The last time I wrote one of these, the headline was a number: eighty-five commits in a day. I was proud of the number. I've since learned the number is never the story.
The story this time is that I sat down to update a portfolio and, four weeks later, looked up to find something that behaves like a small town. There's a square where people gather and argue and share. There's an arcade. There's a print shop that writes its own articles. None of it was on the plan. All of it is live. This is how it happened — told as a story, because the changelog already exists and nobody reads a changelog for pleasure.
The empty room
It started with a room nobody could enter.
For a year, /community was a sign that said "coming soon." I finally opened it: one shared feed, a few ways to sort, a way to post. Simple. And for about three weeks, it worked exactly as designed — which is how I almost missed that it was quietly lying to everyone.
The feed had a "Hot" tab. Hot is supposed to lift the good stuff. One evening I sat down to actually look at it, and it was just... the newest posts, in order. Same as "New," wearing a costume.
The reason is almost funny. Hot ranked posts by their vote score. But I'd removed downvotes months earlier, and almost nothing gets upvoted, so every post's score was zero. The math that was supposed to sort by popularity multiplied everything by that zero and collapsed into "whatever's newest." Hot had been an expensive impersonation of New since the day it shipped. No amount of tuning fixes that — with no votes, there's nothing to rank.
So I stopped pretending. Hot is now an honest shuffle: every visit reorders the feed, old posts resurface, and the order is stable enough that scrolling doesn't show you the same post twice. It's the difference between a feed that performs freshness and one that actually is fresh.
That set the tone for the whole month. Over and over, the real work wasn't adding a feature — it was catching the place where the thing I'd already built was quietly wrong.
Making it feel like somewhere
A feed is plumbing. A place is a feeling. The rest of the month on /community was chasing the feeling.
People got the ability to follow each other, and to mute — quietly, so a muted person never finds out; that's the whole mercy of a mute versus a block. Replies could finally nest, so a conversation reads like a conversation instead of a wall of disconnected notes. The composer grew up into something you'd actually enjoy typing into.
But the decision I'm proudest of runs against every trick the big platforms use: I made the feed end. When you've read what's new, you hit a card that says so, and tells you to go build something. No infinite scroll, no algorithmic "you might also like" pulling you back down. And above the feed there's one honest line explaining exactly why you're seeing what you're seeing — no black box. I even hid the like and reblog counts on other people's posts. Nothing to compare yourself to, nothing to perform for.
It's a bet that people will come back to a place that respects them more than one that traps them. I don't have the numbers yet to know if I'm right. But I'd rather be wrong on that side.
The arcade builds itself
The games section began the month as two small daily puzzles and ended it as something recursive.
The through-line was refusing to copy-paste. Once a third game showed up, I stopped building games and built the parts games are made of — a shared board, shared keyboard, shared everything — so the next one is a configuration, not a rewrite.
The payoff came on the last day, with the feature I'd wanted for a year: players can now invent their own puzzles. Set a secret word, share a link, and watch strangers try to crack it on a leaderboard. The detail that makes it trustworthy is invisible: the secret never reaches your browser. Every guess is scored on the server, so nobody can peek at the answer or fake a time. Two days in, someone had already built a puzzle harder than anything I'd made myself. That's the moment a tool stops being yours and starts being everyone's.
The print shop that pays for itself
The quiet giant this month was a writing engine I've barely mentioned in public. You give it a keyword; it researches, drafts, critiques its own draft, rewrites, and scores the result. A real assembly line, not a single magic prompt.
Everything interesting about it is economics. Each stage has to finish inside a hard sixty-second wall, refund itself if it fails, and survive a hiccup without silently charging you twice. One entire fix existed because the engine wasn't reusing cached work and was quietly costing three times what it should. That's the unglamorous truth of building with AI right now: the cleverness is free, and the discipline is where the whole thing lives or dies.
The bug that made me laugh
My favourite catch of the month is the most embarrassing.
I sell "internal linking" as a service. I have a page that pitches it. And I have a blog with seventy-six posts that, until last week, didn't link to itself at all. The cobbler's children had no shoes and the cobbler was running ads for shoes.
Worse: one whole category of my blog — the daily log, twenty-four posts deep — was returning an empty page to the entire internet. The posts existed. They were published. But the code that lists categories had never been told that this one existed, so it shrugged and served "nothing here" to every reader and every search engine for weeks.
The fix was one line. The lesson was longer, and it's the same lesson the Hot tab taught me: the most dangerous bugs don't crash. They just quietly serve you the wrong thing while every test stays green.
What I actually learned
Strip away the features and the month keeps repeating a few sentences at me.
Chronological isn't fair — it's just chronological; the moment more than one voice shows up, "newest first" starts burying the thoughtful for the recent. A demo that fakes a plausible number is worse than no demo, because it's a lie you have to un-tell before anyone trusts you again. And most of the good work was deletion: a broken tab, a dead redirect, an entire abstraction I built and then killed. The commit that removes two hundred lines almost always did more for the product than the one that added them.
What's next
August is a different shape. July was building; August is watching. The numbers that matter need a few weeks of ordinary traffic before they mean anything, so the plan is to publish, wait, and listen — and resist the itch to ship over the silence.
Two things I'm quietly starting: giving the community a real reason to vote, so Hot can finally rank on something true instead of shuffling; and teaching the writing engine to ask its own follow-up questions instead of taking a single brief. One turns a feed into a signal. The other turns a drafter into a researcher.
That's the month. A portfolio went in, and a place came out. I still can't quite believe it holds together — one person, one codebase, deployed continuously — but it does.
See you at the next one.

