A full-fledged tennis club and tournament management platform. Clubs run singles and doubles events with auto-seeded knockout draws, players score matches live and confirm results, and everyone earns an ELO-style strength index — with rankings, head-to-head history, and in-app messaging. Backed by a FastAPI backend with JWT auth and a MySQL database.
From tournament sign-up to the final point, Tennis Logic manages the full lifecycle — events, draws, live scoring, confirmation, and rankings, all in one place.
Create singles and doubles events with sign-up, partner invitations, and automatic single-elimination draws. Entrants are seeded by strength index, byes go to the top seeds, and brackets are pannable and zoomable as results come in.
Start a match and score it point-by-point in real time. Supports multiple formats — single set, pro set to 8, best of 3, and best of 5 — with a live scoreboard others can follow.
Recorded scores aren't final until the opponent confirms them, keeping the strength index honest. Per-match chat and typing indicators let both players sort out any discrepancies.
Every confirmed match feeds a live ELO-style strength index. Beat a higher-ranked opponent and your rating climbs faster; the platform recomputes ratings and rankings automatically.
Organise players into clubs and groups with role-based admin. Each player has a profile with full match history, win/loss record, and head-to-head breakdown — and can claim their own account.
Built-in direct messaging keeps players and organisers connected, with encrypted message bodies and scheduled email notifications for event invitations and draw announcements.
Built to run self-hosted with Docker Compose — no managed services, no cloud lock-in.
Built with React 18, React Router, and MUI — a responsive SPA with chart-based player stats (Chart.js), pan-and-zoom tournament brackets, live scoreboards, and a mobile-friendly layout.
A Python FastAPI REST API covering players, events, draws, matches, clubs, and rankings. JWT auth, bcrypt hashing, encrypted messaging, and an APScheduler-driven job runner for rating recomputes and event emails.
Relational schema covering players, events, draws, match results (singles + doubles), confirmations, messaging, club membership, and computed strength-index scores — versioned with incremental SQL migrations.
Three-service compose stack (frontend, backend, MySQL) with health-checked startup ordering, persistent volumes, and environment-based config for JWT secrets and SMTP credentials.
Set up your club, launch an event, and let Tennis Logic handle the draw, the live scoring, and the rankings — every result confirmed and counted.
Launch Tennis Logic →