Noël en basket
The club’s Christmas tournament app: groups, schedule, scores and standings work themselves out, and results can be followed live on a phone.
In productionPrivate source code
- Nuxt 4
- Vue 3
- TypeScript
- Tailwind 4
- Drizzle
- SQLite
- Docker
Context
The club’s Christmas tournament used to run on a Google Sheet. The app replaces it, with two uses:
- Organisers, on a laptop, manage the teams, the group draw, the suggested schedule, score entry and the score sheets. Standings and the knockout phase work themselves out.
- Visitors follow the tournament on their phone, no account needed: schedule, live results and standings, with a display made for the hall’s screen.
The app keeps every edition of the tournament, but only one is live at a time: the database itself refuses to publish two. It serves the 2026 edition of the tournament.
A few choices that matter
- The rules live in a pure TypeScript engine. The database only keeps the facts (the scores), and everything else is recomputed.
- Tie-breaking criterion by criterion, where the spreadsheet added the criteria together.
- An engine tested on the 2025 tournament. Replayed with the real scores, it finds that year’s standings, and it exposed flaws in the spreadsheet: criteria added together, an unhandled perfect tie.
- Hashed table passwords: I can revoke a scoring table’s profile without closing access to the admin.
- Live updates that just arrive on phones, through server-sent events (SSE), with a fallback to regular polling.
The tests
Around 300 automated tests.
// For my 2026 projects, I work with AI agents (Claude Code): I frame the need, write the specification, then review and validate the code.