Tournament Arc
Ratings platform for local table tennis leagues.
Tournament Arc is a “league management” tool I built for my local table tennis gym, Maryland Table Tennis Center (https://mdttc.com/). They run a bi-weekly league, every Tuesday and Friday night.
Check it out: https://www.tournamentarc.com/
What it does
The app has two primary functions: league management and reporting results.
Gym owners can create a league, which gives them management access to players and seeding their initial ratings. When they run leagues, they can create ad hoc brackets that reflect the physical papers that players use to record results. When the night is done, there’s a rapid entry system for recording results and processing rating changes.
US Table Tennis’ rating system uses a simplified Elo calculation, similar to Chess. I originally wrote the Elo system true to the Chess system before discovering that the US system results in cleaner numbers with less rounding and has a ceiling and floor for the potential number of points that can be won or loss in a game. The other complication is sequencing the results in a league night, as technically each match sequence should transactionally update the ratings as soon as it’s played, but given that tournaments happen in real life, the specific ordering of rating entries must instead follow a formula of high-to-low to avoid thrashing ratings when entering the scores in bulk.
Individual players can view a public link. As soon as their scores are entered, they can view the site with a graphic of their ratings progression. With a login, they can pin their friends to make it easier to track each other’s results.
Backstory
Around 2019 the US Table Tennis league stopped allowing local gyms from using their official ratings platform for these routine leagues. This created a headache for the league runners, so new tournament results would take weeks to get processed.
At work at the time, I had designed an interview questions using a toy app version of this same concept. I’d been interviewing people on a slightly overarchitected version for about a year, so all the calculations were fresh in my mind. It was originally written in Java, but I ported it over to Go to be able to take better advantage of low-compute hosting to reduce costs.