Inspiration

Local tennis tournament coordinators often need to follow several matches happening at the same time. Keeping up with scores, answering questions, and moving between courts can quickly become overwhelming.

We built CourtSide AI to help organizers manage simultaneous matches from one central dashboard, while making scorekeeping easier for players through voice commands.

What it does

CourtSide AI is a voice-controlled tennis scoring assistant that connects the court to the organizer in real time.

Players can report points by voice, and the scoring engine handles points, games, sets, and serving order. Scores appear on the courtside interface and update on the organizer’s dashboard, giving coordinators a view of ongoing matches without visiting every court.

The project supports different match formats, including singles and doubles.

How we built it

We built the backend with Django, using Django Channels and Daphne to support WebSocket connections. These connections deliver live match updates to the courtside interface and organizer dashboard.

A dedicated scoring engine applies the tennis rules and manages match progression. Firestore stores match data, while REST endpoints handle court and match creation.

We connected the frontend to the backend so that scoring actions flow through the engine and the resulting match state is shared with connected screens.

Challenges we faced

One challenge was translating tennis rules into consistent scoring logic, particularly around tiebreaks and doubles serving order.

Another was connecting the frontend and backend around a shared command format. Both sides needed to agree on how scoring actions were sent, validated, and displayed.

We also worked through connection handling: distinguishing a backend acknowledgement from database persistence, and understanding how clients recover the saved match state after reconnecting.

What we learned

We learned that a real-time application requires more than quickly updating a screen. It needs a clear source of truth, consistent commands, and careful handling of connection failures.

Most importantly, we learned to keep our focus on the organizer’s problem: making multiple matches easier to follow, so more attention can go toward running the tournament and supporting the players.

Built With

Share this project:

Updates

Submission history