Case Study

The app that runs WDCTT's league night.

Washington DC Table Tennis used to run league night by hand: pairing players, tracking every score, and keeping the ladder up to date on the fly. We built them an app that runs the whole night on its own, and you can watch the logic work right here on this page.

Visit the live app

The challenge

On a busy night, someone had to pair every player, remember who beat whom, update the rankings, and keep the tables moving. It was manual, slow, and easy to get wrong.

WDCTT needed software that could run the night itself: sign players in, match them fairly, assign tables, score the games, and update the ladder the moment a match ends.

Ranking, by hand
Match Paul beat Bob, 3-2
Ratings Paul 1350 · Bob 1300
Expected 1 / (1 + 10^((13001350)/400)) = 0.57
Change K × (1 − 0.57), K = 24 = +10
New: Paul 1360 +10Bob 1290 10
Now imagine doing this by hand, for every match, all nights.

What we built

Everything an organizer needs to run the night, and everything a player wants to see.

Under the hood

Here is some of the logic that runs the night. Try it yourself.

LIVE WDCTT League Night
Tap to run a live simulation
K
wait0:20play1:20games3
M
wait0:57play2:13games7
L
wait1:34play3:06games11
A
wait2:11play3:59games5
S
wait2:48play1:22games9
Z
wait0:55play2:15games3
I
wait1:32play3:08games7
M
wait2:09play4:01games11
R
wait2:46play1:24games5
E
wait0:53play2:17games9
Waiting
Live standings
1EEli6-31227
2SSam6-31222
3RRio3-21214
4AAva3-21209
5MMax9-21201
6LLeo9-21196
7IIvy4-31188
8MMia4-31183
9ZZoe1-21175
10KKai1-21170
0matches
10on bench
0/4tables
This runs a real league →

Live ELO rankings

Every result runs through the same rating math the real app uses. Tap a winner and watch the ladder move.

Win chance
69% / 31%
Tap a player to record a win. The bigger the upset, the bigger the rating swing.

Fair coin flip

Before each match, a fair coin flip decides the first serve. Tap to flip.

ML
Fair 50/50, no arguments

Built to be safe

Role-based access

Players, admins, and super admins each see only what they should.

Secure password handling

A reset issues a strong one-time password, signs the player out everywhere, and never shows or stores a readable password.

No privilege escalation

Only a super admin can reset another admin, never a regular one.

Isolated data + review

The database is isolated from every other system, and we ran a dedicated security review before release.

The technology

Built on a modern, dependable stack: a Python backend (FastAPI), an isolated PostgreSQL database, a timezone-aware scheduler that opens league night automatically at 7pm, and a mobile-first interface. It runs on Railway with automatic deploys, so improvements ship the same day.

FastAPIPostgreSQLAPSchedulerRailwayPython

It is live

This is not a concept. It runs real league nights every week at league.wdctt.com.

Visit the live app

Want an app that runs your operation like this?

Tell us what you need and we will show you what is possible.

Let’s Start Your Project

© 2026 QA Digital Advertising | All rights reserved

Privacy Policy|Terms and Conditions