Skip to content
~/lucas

← Back to projects

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.