← All projects
Close Enough logo
Live2026Next.js / Convex / Framer Motion / TypeScript

Close Enough

A browser game about how badly we estimate things

Close Enough gameplay demo showing estimation modes and score reveals

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.