Older posts

  1. Illegal states, unrepresentable

    An architecture review found both duel pages still carrying the same ninety-line derivation chain by hand. The fix collapses sixteen flat props into one discriminated model.

  2. One parser for every mode

    Three near-identical physical-keyboard parsers, one bug that only showed up in duel modes, and a wayfinder map that carried its own execution instead of stopping at a spec.

  3. The image that repaints itself

    The daily share image gets real fruit icons, an OG-ratio canvas, and a gold rank line that fills in the moment a leaderboard submission lands.

  4. The game never volunteers that

    The Norwegian AI opponent played a profanity as its move. The fix keeps every word valid for players and just stops the game from choosing one on its own.

  5. The same trap, a third time

    A word input overflowing the screen at 320px turned out to be two unrelated bugs, and fixing the second one surfaced a third case of a CSS trap this codebase keeps hitting.

  6. One tooltip, anywhere on the page

    Detail tooltips reach the fruit on the board itself, and the "only one open at a time" rule stops being a property of the game log and becomes a property of the page.

  7. The log that remembers both players

    The shared game log learns to show two players at once, PvP gets a live panel of its own, and a scoring bug that only hurt guests surfaces along the way.

  8. One recap, two modes

    A blocking modal in PvE and an inline overlay in PvP get replaced by one shared recap component, ported wholesale from the Daily Challenge pattern.

  9. One word at a time

    Two long words typed at once could break the whole duel layout. The fix drops the side-by-side grid for a single panel that follows whoever is acting.

  10. Fifty-six turns of twenty

    A Daily Challenge that can never exceed twenty words showed a game log toggle claiming fifty-six turns. Fruit events were counting as turns.