How it works
From an empty organization to a declared result
Two timelines matter: getting set up once, and the loop you repeat for every bout on the day. Both are short, and neither depends on us being in the room.
How a bout moves
The five-step loop operators already run
Nothing here is aspirational — it is the sequence the console enforces, from creating the card to writing the result.
Step 01 · Set up the card
New bout
Athletes come from the org roster
- Sport
- Mardani
- Category
- Senior · 68 kg
- Red corner
- A. Deshmukh · Kolhapur Akhada
- Blue corner
- R. Patil · Pune Combat Club
- Bout time
- 80 s · 1 round
- Mat
- Mat A
- 01
Set up the card
Create the bout or team fixture — corners, category, weight class, and the athletes pulled from your roster rather than retyped.
POST /api/fight/add-fight-match
New bout
Athletes come from the org roster
- Sport
- Mardani
- Category
- Senior · 68 kg
- Red corner
- A. Deshmukh · Kolhapur Akhada
- Blue corner
- R. Patil · Pune Combat Club
- Bout time
- 80 s · 1 round
- Mat
- Mat A
- 02
Assign the officials
Lock the red and blue corners plus an optional head official. Until the corners are filled, the bout cannot enter the queue and nobody can score it.
POST /api/assignments/set
Officials
Locked- Red corner
S. Bhosale
red_referee
- Blue corner
N. Chavan
blue_referee
- Head official
D. Rane
head_referee
Unassigned corners cannot score. Every join is re-authorised against the assignment before a point is accepted.
- 03
Queue and start
The bout joins its mat queue. Starting it opens the operator board, wakes the assigned pads, and publishes the audience board for that mat.
socket startMatch
Control room
Multi-mat live wall
2 live19 queuedAuto-refresh 15s · score reconcile compares board state against the database
- 04
Score live
Officials award points from their own pads. Each delta broadcasts to the match room, so the board on the wall and the overlay on the stream move together.
socket updateScore
LiveMat A · Senior · 68 kg
Match #1284
Red corner
A. Deshmukh
Kolhapur Akhada
4TimeLive00:34Blue corner
R. Patil
Pune Combat Club
4Point Stream · Live scoring · Mardani
Red +1 · Jab combo
- 05
Finish and record
Declare the result and method. The bout writes to athlete history, advances the bracket, and unlocks certificates and results export.
socket finishMatch
Bout complete
PointsWinner
Draw
4–4
- Athlete history updated
- Bracket advanced
- Certificate unlocked
- Results CSV row written
Getting started
What onboarding actually looks like
There is no self-serve signup, and that is deliberate — a federation's tenancy, branding, and role structure are set up with you rather than guessed by a form.
Week 0
Organization provisioned
We create your organization, set the plan, and apply your branding — logo, colours, and login art. Your staff sign in at your own tenant URL.
Week 0
Roles and officials created
Admins, fight admins, referees, and punch officials are created with the access their job needs. Club owners and coaches get their own scoped portal.
Before the event
Roster and event loaded
Athletes are imported or registered publicly, categories and fees are defined, and entries are approved and bibbed.
Event day
Mats, officials, boards
Assign officials, open the control room, publish the boards you want public, and run the five-step loop for every bout.
After
Results out
Certificates, athlete histories, club results CSV, and the warehouse export for federation reporting.
Real time
One score, many screens, no drift
The live layer is a dedicated Socket.IO service, not a side effect of the web app. Here is what it actually guarantees.
Who scores
Red / blue corner pads
joinMatch → authorize-scoring
Punch officials 1–4
/solo-game · Panch1…Panch4
Operator board
start · pause · reset · finish
What carries it
Match room broadcast
updateScore, room-only
Short-lived socket tickets
/api/auth/socket-ticket
Org-filtered queue snapshots
queueSnapshot per tenant
What reads it
Audience scoreboard
/public/scoreboard/{slug}
Venue TV wall
/public/now/{org}
OBS overlay
/public/overlay/{slug}
Fan companion
/public/fan/{org}
Scores are room-scoped
A point is broadcast to its match room, never across the namespace. Two bouts on two mats cannot bleed into each other.
Authorisation is re-checked at join
Holding a link is not enough. Corner scoring is authorised against the current assignment every time a pad connects.
MySQL stays the source of truth
Boards are fast because they are in memory, but the result is persisted. Score reconcile compares the two and reports mismatches.
Restarts recover
With Redis configured, the socket layer runs multi-instance and restores bout snapshots after a restart instead of losing the card.
Want to see the loop on your own card?
Send us a bout sheet from your last event. We will set it up in a sandbox organization and walk your officials through the pads on a call.
- Walk through a live bout on your own sport
- See the control room with your mat layout
- Review tenancy, roles, and audit before you commit