Skip to content

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.

  1. 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
  2. 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
    • S. Bhosale

      red_referee

      Red corner
    • N. Chavan

      blue_referee

      Blue corner
    • D. Rane

      head_referee

      Head official

    Unassigned corners cannot score. Every join is re-authorised against the assignment before a point is accepted.

  3. 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 queued

    Auto-refresh 15s · score reconcile compares board state against the database

  4. 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

    Mat A · Senior · 68 kg

    Match #1284

    Live

    Red corner

    A. Deshmukh

    Kolhapur Akhada

    4
    TimeLive
    00:34

    Blue corner

    R. Patil

    Pune Combat Club

    4

    Point Stream · Live scoring · Mardani

    Red +1 · Jab combo

  5. 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

    Points

    Winner

    Draw

    44

    • 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.

  1. 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.

  2. 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.

  3. Before the event

    Roster and event loaded

    Athletes are imported or registered publicly, categories and fees are defined, and entries are approved and bibbed.

  4. 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.

  5. 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