Skip to main content
KRA Meets

KRA Meets

Table of Contents
A mobile web app for our summer swim team, the Kanawha Firefish, with live heat sheets, real-time results, and a heads-up the moment your swimmer is in the water.

Visit KRA Meets

A little background
#

I have helped run the computer at the scoring table for our summer swim meets for a few years. It’s a great seat for watching the meet come together, but it also meant I spent a lot of time seeing the gaps in the system and answering many of the same questions for swimmers and parents.

Last summer I built the first version of KRA Meets to answer those questions for our swim families. It did the basics, heat sheets and results, and a very initial draft of live results.

This season I rebuilt the whole thing from scratch. It is faster, it works offline, and it can now follow a meet live as it happens.

Finding your swimmer
#

A summer meet can run more than fifty events across a few hundred kids, so the first job is just helping parents understand what their kids are swimming and when those events are. You can search the heat sheet, tap any name to see that swimmer’s whole day, and star the kids you care about so they stand out everywhere.

Scrolling down the heat sheet to a starred swimmer's heat
Star your swimmers and they pop out, right down to their lane.

Once a swimmer is starred, a separate view collapses the whole meet down to just their events, so you are not scrolling past everyone else’s heats to find the four that matter to you.

A view showing only the starred swimmer's events
Tap a swimmer for their full schedule, or follow just the kids you starred.

Live results, as they happen
#

Additionally, when a meet is running, KRA Meets shows which event is in the water and which events have been called to the clerk of course, so you know roughly how much time you have before your swimmer is up. Results post heat by heat as they are entered into the Meet Manager system (if it’s syncing to Meet Mobile).

If you have starred a swimmer and added the app to your phone’s home screen, you also get a push notification when their event is called.

Live heat sheet showing now swimming and called-to-clerk sections
On meet day: what is in the water, what has been called, and live results.

Team scores in real time
#

Everyone wants to know if we are winning. If a meet is syncing to the live results, KRA Meets keeps a running team score during the meet and breaks it down by boys, girls, and relays, then shows the records that fell along the way. After a meet officially ends, a final Meet Manager file from the scoring computer is uploaded to break down all the scores, drops, and records.

Live team scores and records broken
Live team scores, division by division, plus any records broken.

Behind the scenes: calling the meet
#

The live features only work if someone on deck is telling the app what is happening. So there is a simple console for our clerk-of-course volunteers. They tap an event to call it, and tap again to mark it as now swimming. That is what drives the parent notifications and the live banners.

Clerk console showing events move from Call to Called to Swimming
The volunteer console: events move from Call, to Called, to Swimming.

There is also a small admin screen for turning the live features on for a meet, managing the volunteer PIN, and connecting to live results. It’s meant to be easily managed from the meet and from a phone.

Admin live-controls screen with feature toggles and live-results settings
The control panel: flip on the live features and connect results for a meet.

The fun part: two reverse-engineering puzzles
#

Half the reason this project is so much fun is that the data lives in two awkward (and antiquated) places, and getting it out was a fun puzzle and exercise.

The first is Meet Manager, the desktop program that actually runs the meet. It stores everything in an old Microsoft Access database file. Rather than try to translate it, KRA Meets reads the file directly and pulls all of it in, every event, entry, and result, so nothing gets lost in translation. We also sanitize this data on import to strip out anything we don’t need.

The second is Meet Mobile, the app a lot of families already use for live results. It has no public way to plug in, so I used some tools to understand how the requests are built. Now KRA Meets can pull in live results and scores on its own.

Admin panel showing the live MeetMobile results connection
Live results flowing in from Meet Mobile, reverse-engineered and matched to our meet.

How it was built
#

  • Frontend and backend: React with React Router, running on Cloudflare’s servers so the site is fast no matter where you load it from
  • Database: Cloudflare D1, a managed SQLite database
  • Notifications: web push built from scratch. The usual off-the-shelf library does not run on Cloudflare, so I wrote the notification encryption
  • Installable app: it is a progressive web app (PWA), so you can add it to your home screen and it behaves like a native app, notifications included
  • Live results: a reverse-engineered Meet Mobile connection, cached so it stays quick and never hammers their servers

I built this along with Claude Code over the spring and early summer, and it has now run real meets for our team. There is still plenty I want to add next season, but it has already made meet days a little easier for our swim families.