An AI wrote the code. I decided what survives.

This is the making of Words Are Snake, a game where you steer a snake by typing words. Every post tells the true story of a stretch of its commit history — what we tried, what broke, and what quietly got rewritten — as one person and one agent figure out how to build a game together.

  1. A test run that cannot reach production

    Local end-to-end runs get their own throwaway database and a shared lock, and the retrospective that followed turned four agent mistakes into rules the repository enforces.

  2. An agent that cannot play a word

    Phase 1 of player agent tools exposes read-only game state and dry-run previews over WebMCP, while leaving typing and submission strictly to the human.

  3. Four points short of a hundred

    A routine Lighthouse audit surfaced two accessibility defects on the duel word panel: a missing accessible name and a token the snake could not share.

  4. Closing the mobile PageSpeed gap

    Three targeted cuts to initial load (lazy-loading AccountModal, self-hosting variable fonts, and manualChunks CSS consolidation) lift mobile performance.

  5. When one DNS answer was not enough

    A devcontainer firewall update replaces a point-in-time DNS assumption with published ranges for shared Google infrastructure.

  6. Four packages, one refresh

    A grouped minor and patch update refreshes the error-reporting SDK, test DOMs, and build tool through the package manifest and lockfile.

  7. The missing step before MP4

    Restoring a missing image package lets the gameplay recorder finish its WebM-to-MP4 conversion.

  8. One frame for video and stills

    The gameplay recorder moves to a phone-sized frame and captures full-screen marketing stills during the same run as its videos.

  9. A passkey with a name of its own

    New passkeys now carry a device label into the authenticator, so a password manager can tell registrations apart.

  10. An account without Google

    Passkeys arrive alongside Google sign-in as an independent credential type, with an in-page modal chosen over a dedicated route and throwaway prototypes shaping the flow.