
Close Enough
A browser game about how badly we estimate things

The problem
Human estimation is fun to talk about and almost impossible to practise. There is no way to find out whether you are bad at pouring 400 mL or just bad at it today, because nothing measures it and nothing keeps score.
What I built
Each mode generates a random target, takes one input, then scores the gap on a 0 to 100 scale with eight result tiers and a different colour, comment and insult for each. Pour mode is the interesting one: there is no physics engine, the liquid is an SVG clip path with a wave surface rebuilt every frame from two sine terms, amplitude eased so it never snaps, and the fill rate is fixed so a full glass takes about 3.6 seconds. Convex holds games and players, joins by share code, and a cron sweeps rooms older than 24 hours or idle for 12. Scoring maths is pure and lives outside the components, so unit tests cover it directly and Playwright drives the multiplayer flow end to end.
What I’d tell past me
The scoring function was the whole design. Once each tier had its own colour and its own line of trash talk, six more modes became a copy-paste job instead of a project.