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.

