Older posts

  1. A contract before the client

    The planned native client gets an offline submission path, a bundled dictionary, and an API compatibility rule before its first install exists.

  2. What the end of a game should say

    The end-game dialog gets a hierarchy, sharing survives the trip to the daily countdown, and the final board becomes part of the result without storing the whole game.

  3. Showing the snake where it's about to go

    A ghost-path overlay that simulates each keystroke before it happens, a collision rule that took two attempts to get right, and the interactive demo it made redundant.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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.

  9. 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.

  10. 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.