01 / SNAPSHOT
THE PROBLEM
Three simultaneous competition floors, no single source of truth, and a WhatsApp group as the operational change system. Judge counts were done in your head. Lane changes were photographed on a phone and shared to a chat that not everyone read in time.
WHAT I BUILT
A live floor management system that replaced paper, WhatsApp, and guesswork, giving floor leads and zone leads real-time visibility across all three floors, with a structured change feed that requires four independent confirmations before anything is marked resolved.
WHAT CHANGED
ROLE
Sole Designer & Builder
MY CONTEXT
Director of Judges · ATHX. I tested every version of this at live events I was also running.
TIMEFRAME
2025–2026
02 / What It Looked Like Before
This is what managing a competition floor looked like before I built anything. I was the person holding that clipboard. I was also the person who decided it needed to change.
The current heat was visible. Planning two or three heats ahead meant doing mental arithmetic from a printed sheet while the current heat was still running.
Knowing whether I had enough judges meant counting active athletes, knowing the required ratio, and doing the maths in my head, under time pressure, across 40 lanes, on three floors in parallel. Getting it wrong meant pulling a judge from another lane mid-heat.
When an athlete dropped out, changed category, or swapped lanes, the update came via WhatsApp. A handwritten change card photographed and tagged to multiple people, with no confirmation the right person had seen it before the next heat started.
03 / The Decisions That Changed It
Different roles needed different information
The first question I set out to answer was simple: do I have enough judges for the next heat? V1 answered that and nothing else. But in scoping even that minimal build I made a decision that shaped everything that followed: the overview and the per-floor views needed to serve fundamentally different users.
The overview screen was mine. As Director of Judges I needed a cross-floor picture, total judges, breakdown by floor, current and next heat, surplus or deficit across all three floors simultaneously. No single person can be on all three floors at once. I designed the overview to replace the act of physically walking between them to check numbers.
The individual floor screens (Strength, Endurance, Metcon) belonged to the zone leads. Each head judge needed to stay focused on their floor's lanes and their judge count, with no noise from the other floors, no information they didn't need. Active lanes, empty lanes, red alert when short.
Two different user experiences, one V1 build. I validated both at the next live event before building anything else on top.

Active Heat alone was never going to be enough
From V1 I showed Active Heat, Next Heat, and Following Heat tabs per floor rather than just the current state. The obvious simpler version was a single active heat view, which is all you technically need to run the current heat.
But floor management is not about the current heat. It is about the next one. A floor lead who can only see what is happening now is always reacting. A floor lead who can see what is coming has time to move judges, flag shortfalls, and make decisions before they become problems. I built the foresight in from the start because I already knew from experience that the moment you need that information is always the moment you do not have time to calculate it.
A single confirm button would have moved the WhatsApp problem into the app
When an athlete changes category or lane, four separate teams need to act: Endurance C2 system, Endurance race system, Athlete Support Strength, and Athlete Support Metcon.
The obvious solution was a single confirm button. One tap, done.
I didn't build that. The WhatsApp group had exactly the same failure mode, someone sent the message, someone hit the thumbs up, and three other people never saw it. A single confirm button would have replicated that failure in a different interface.
A change is only marked as actioned when all four teams have confirmed independently. Until then it stays visible in the pending section. Each team works at their own pace with no dependency on any other. Nothing gets marked resolved until it actually is.
This was the decision that most directly replaced the WhatsApp group, not just technically, but structurally. The old system had no way to know if all four teams had acted. This one makes it impossible to not know.

I was literally standing on a box
Pre-event visibility and event day visibility are different needs
Zone leads need to see their judging team before the event to plan coverage. They need to see their active team on event day to manage it. Those are different needs at different moments and I made a deliberate decision about where each one should live.
Pre-event, zone leads access the Workforce Teams Dashboard to see their roster, check assignments, and plan. On event day I surfaced the judges panel directly within their floor page. They never have to navigate away from their active floor view to see who is available. The count stays visible. The team stays visible. Everything they need is in the same screen.
That decision also protected data. Zone leads see their team. They do not see other floors, other roles, or workforce data they have no reason to access.
International names in a noisy venue
V1 was a dark interface with purple accents. When ATHX updated their branding the platform shifted to match — light UI, red accents, consistent with the updated ATHX visual identity.
The platform exists inside the ATHX ecosystem. It needed to feel like it belonged there. That was the reason for the shift, not an independent design decision.

04 / What Only an Operator Would Know to Build
The kit team detail never appeared in any brief or feedback session. I noticed it by being on the floor.
Before live check-in data, the kit team set up every lane for every heat regardless of who had checked in. If an athlete hadn't shown, the lane was set up, the heat ran short, and the kit team reset the weights for the next heat. That repeated across every heat, across three floors, across a full event day.
With live check-in status visible on the floor view, the kit team can see which lanes are empty and make a decision about setup without asking anyone. I added check-in status to the floor view because I saw the problem with my own eyes. It is not a headline feature. It is exactly the kind of thing you only know to build when you are running the event, not observing it.
05 / What I Learned
Foresight Was the Right Bet
The foresight tabs (Next Heat, Following Heat) were in from V1 and remain one of the most impactful decisions in the platform. It is easy to design for the current state. Designing for what a user needs two steps ahead requires understanding the actual operational rhythm, which I had, because I was living it.
You Calibrate by Shipping
The judge count alert threshold took a few events to calibrate. The required judge ratio is not fixed. It depends on the category mix in each heat. I had to run the platform at real events before I understood how to set the alert correctly. That is not a failure of design. It is what happens when you ship something real and pay attention to how it performs.
The Radio Still Has a Role
Radios still have a role on event day. The dashboard tells me if there is a gap. The radio is how I call judges back to their lanes at the start of a heat when they have wandered. The platform handles the visibility. The radio handles the real-time correction. Both are needed.
06 / Impact
3
Simultaneous competition floors managed live
0
Clipboards required
4
Independent confirmations before a change is actioned
3
Heat states visible per floor: Active, Next, Following


