Skip to content

The 600px decision I paid for all day

I locked the middle column to a fixed width so three unrelated sections would line up. Then I spent nine PRs paying for it.

SD
Shubham Datarkar
· 2 min read

Some decisions are cheap to make and expensive to keep. Yesterday I made one number the spine of the whole site, and then I spent the rest of the day rebuilding everything around it.

The number was 600. Pixels. I wrapped the sidebar, the main content, and an optional right rail into one centered container capped at 1240px, and I fixed the middle column at exactly 600px on every surface. The reason sounded innocent when I wrote it in the commit: so community, games, and members all line up. One column width, three sections, everything aligned. Clean.

What I did not fully clock is that 600px is narrower than what those pages were built for. The members pages assumed a max-w-6xl layout with three-column card grids. Drop them into 600px and the cards spill, wrap ugly, or shrink to nothing. So the first casualty of the alignment decision was every grid on /members -- I had to reflow them, killing the xl and lg three-column layouts and settling for two columns on small screens up. Not a redesign I wanted. A tax I owed.

The rail I promised and had to build

The shell change also introduced an optional right rail -- an aside that only renders when a section passes one in. In the first PR I passed nothing for games and members and told myself the next PRs would fill them. That is the honest part of building in public: I shipped a hole and dated the IOU.

So the day became about paying those IOUs. Community got its two ad slots pulled out of the layout and into a proper CommunityRail. Members got a LinkedIn-style rail with blog, games, and an ad. Games got a per-game rail, and the fire streak moved inline into the header. Then Help, Stats, and Settings moved out of buttons and into that rail too, with an example-first guide instead of a wall of rules.

Once games had a rail, the rest of games looked wrong next to it. The archive got stat tiles and filter-search-load-more. The leaderboard got a period dropdown, a medal podium, names with @usernames. I dropped the old /results routes entirely -- dead pages that the new layout had quietly orphaned. By the end I was trimming the game rail back down to just Guide and Other, because the version I had built two PRs earlier was already too much.

What I took from it

The community feed was the last piece, and it taught me the lesson cleanly. Inside 600px, posts that shared a bottom border read like rows in a table. So each post became its own rounded card, the engagement bar got reordered Twitter-style, and the compose button moved to a right-side FAB with an iOS safe-area inset so it stops floating over the home bar on phones.

A layout constant is not a value. It is a contract every page silently signs.

note to self

Nine PRs, one number. If I had picked 600px on day one, half of this would have been free. I did not, so I bought it back page by page. Today I want to actually sit with the thing on a real phone before I change one more pixel.

Reactions

How was this article?

Newsletter

Never miss the next one

Get the latest playbooks, build logs, and the occasional unpublished idea straight to your inbox. One signal a week — no noise.