Older posts
Quiz should score high
Word scoring drops the inherited word-frequency model for Scrabble-style letter values, the duel AI is recalibrated to match, and a domain glossary lands first to give the whole decision a shared vocabulary to be written in.
Giving the logic a name
Two days pulling shared logic out of stores and routes into small, named, independently tested modules, one of which immediately surfaced a real duel bug and got its own same-day fix.
A reason to come back
The daily challenge gets a real midnight boundary instead of an arbitrary UTC one, the wait for it becomes a countdown instead of a dead end, and web push notifications arrive, built around the one hard constraint the hosting platform imposes on anything running on a schedule.
The clock comes off
The thirty-second per-word timer added three weeks ago comes out entirely, scoring reverts to pure word length times rarity, and a UI freeze traced to backdrop-filter blur turns up in three more dialogs with a blunter diagnosis than the first time.
Not like this
The engine gets pulled apart into deep, single-purpose modules, and a day later the entire day-two Norwegian layer, carried for three weeks without a dictionary worth playing against, comes out for good.
The week the game started watching itself
A three-PR refactor trio makes the word-submission pipeline immutable and side-effect-free, then the newly-launched game gets its first stats page, a same-week AI tuning pass informed by it, docs finally caught up to the Postgres stack, and a WCAG 2.2 audit closes the week.
Two kinds of ready
A second design pass swaps oklch approximations for exact designer hex values and a machine-readable spec, then a seven-part bundle declares the game launch-ready: once-per-day enforcement, a streak counter, analytics, and a way to help pay the hosting bill.
The boring stack, on purpose
Render and Turso replaced by Railway and PostgreSQL in a single pull request, deleting the hand-written migrator Turso had forced into existence, plus a CI workflow retired in favor of agents bumping their own version.
Same names, new values underneath
A font and color rewrite that touched zero component files, a layout pass built on the tokens it introduced, and a leaderboard that started checking its own math.
The screen that would not respond
A WCAG reflow fix that became a permanent layout rule, assisted mode deleted nine days after it shipped, and an end-game screen that froze the browser until profiling found why.