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.
A recording that assumed three lives
The PvP gameplay recording still planned for three lives, while the game starts duels with two, so its final crash never reached the video. The recorder now reads the count from the game.
Searching the preview word list
The preview words page for testers gained a search box with fuzzy and exact matching, and a live filter that still works when the page is served without its script.
A gameplay still for the social card
The link preview card for Words Are Snake now shows a still from the game instead of a title card, at the same file path, with alt text that matches the page description.
Four letters, drawn fresh each day
The four letters that steer the snake are now drawn each day for each language, so the same words stop winning forever, and every game keeps the letters it started with.
When two theme rules tie
A light theme set alongside high contrast inherited the dark palette by source order, and the fix became a per-theme rule for the duel snakes.
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.
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.
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.
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.
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.