CourtsideDesk¶
Tennis tournament management for Swiss club events.
CourtsideDesk complements the SwissTennis platform by providing a digital signage display for tournament venues and an organizer toolset for managing the on-site experience. It does not replace SwissTennis — it makes the tournament day smoother for organizers, players, and spectators.
Key Sections¶
| Section | Description |
|---|---|
| Requirements | Full functional requirements — personas, features, scoring formats |
| Architecture / Tech Stack | Finalized technology choices and rationale |
| Draw Management | Draw types, bracket topology, seeding logic |
| Seeding Placement | Seeding placement rules for elimination draws |
| SwissTennis API Integration | Live online import from comp.swisstennis.ch Advantage JSON servlets (tournament + events + bracket + schedule + background sync) |
| SwissTennis scheduler runbook | Operational runbook for the keystone-driven background-sync timer (endpoint contract, troubleshooting, alert thresholds) |
| UX Review | UX/UI design review and guidelines |
| V1 Launch Checklist | Pre-launch checklist for the first production release |
Tech Stack Summary¶
| Layer | Technology |
|---|---|
| Frontend | Next.js 15 (App Router) + React 19 + TypeScript |
| UI | shadcn/ui + Tailwind CSS |
| Backend | Node.js + Hono + tRPC |
| ORM | Drizzle ORM |
| Database | PostgreSQL via Supabase |
| Auth | Supabase Auth (JWT + RLS) |
| Real-time | Supabase Realtime + SSE fallback |
| Hosting | keystone shared platform on kst1.wagen.io (Hetzner VPS, Docker, Caddy ingress) — see keystone runbooks |
| CI/CD | GitLab CI via keystone shared templates (buildx) |
| Monorepo | Turborepo |