Project · 2026
CouchDuel
A little rivalry, every night.
A little rivalry, every night.
CouchDuel keeps score while you and someone else compete over whatever is on television. No questions, no buzzers, no timers. It doesn't play the game with you; it counts, so you can watch.
- From landing page to a live board
- 1 tap
- Players per game
- 2–6
- Tests, incl. real Postgres
- 371
Product
Nothing to configure first
Open couchduel.app, see tonight's date and two players, and tap +1. A guest game starts with no account, and saving your history later keeps every game you played as a guest. Each game is kept with its date, players, scores and winner, which feeds the running rivalry: all-time record, streaks and a month-by-month head-to-head.
Engineering
Scores that can't drift
Scoring is event-sourced: a total is always the sum of its events, and corrections are recorded, never erased. Every tap carries a unique key, so a retry on a flaky connection can't award a point twice, and scores update instantly with an honest rollback if a write fails. The app holds no service-role key; Postgres row-level security does the access control.
