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 palette built five days ago turned out to be a starting point, not the answer: a design handoff arrived with exact hex values in place of the earlier oklch approximations, and the snake’s body changed color again, this time to a vivid teal (#1B7D92) against a sharpened red accent (#C8203C). Two days later, a second and unrelated push made the game launch-ready in the ways that actually matter for a solo daily game: enforcing one attempt a day, giving returning players a streak to protect, and giving the project a way to cover its own hosting bill.
A designer’s exact numbers, not an algorithm’s approximation#
Corner radii tightened by a couple of pixels, the settings nav button picked up an outlined ghost treatment, and the fonts moved again, from IBM Plex to Space Mono and Space Grotesk. None of it changed what oklch was solving for; it replaced computed approximations with a designer’s exact values, arriving as a full handoff rather than another token migration.
A spec written for the agent reading it, not the browser rendering it#
The handoff first landed as an interactive HTML reference and two dozen annotated screenshots, committed alongside the palette so the spec would travel with the code. Both came back out within the same pull request, replaced by a single DESIGN.md, following the open-source DESIGN.md convention: YAML frontmatter carrying exact token values, typography, spacing, and per-component dimensions, with prose covering the six core design principles and do’s and don’ts for implementing new UI. A styleguide that had to be opened and read was replaced by one meant to be loaded straight into a coding agent’s context before it touches any visual code, and CLAUDE.md picked up a pointer to it the same day.
Seven changes, one underlying question#
The problem the game actually had was not visual: a player could replay the same daily seed as many times as it took to beat their own score, which hollows out the exact pitch a share card makes, “can you beat my score”, and there was no way to tell whether any of the launch effort was reaching anyone, or to cover the roughly $11 a month it costs to keep the game running.
”Can you beat my score” loses meaning if scores can be farmed through repetition.
The share card itself needed a fix first, since it was the thing meant to carry all of this virally: the 32px score number, with an ascent of roughly 26px, was drawn only 14px below the 9px “SCORE” label, so any score at or above three digits visually collided with its own label. Widening the gap to 30px was the whole fix, verified against a score of 281.
Where this leaves things#
One pull request changed how the game looks; the other changed whether it can sustain itself once people are actually playing it, day after day, on their own. Neither is really about polish. Both are about what “ready” has to mean once launch is a real event on the calendar rather than a future one.