nOxyApp · Organizer Manual

Running your competition in nOxyApp

The organizer's guide to running a freediving competition in nOxyApp — from creating the competition, through the live days, to publishing its results. Terms that carry a dotted underline link to the glossary; staff roles link to the roles reference.

1Setting up a competition

Creating it

A new competition starts from the dashboard's + menu. Seven fields are required to create it: name, location, start and end dates, country, timezone, and the sanctioning organization. Everything else can wait — most settings are editable both at creation and later in the setup panel.

Every new competition starts Hidden: invisible to the public until you change its status (see: Visibility & statuses). Whoever creates the competition automatically becomes its Organizer.

The basics

Visibility & statuses

The status controls three things at once: whether the public sees the competition, whether athletes can register, and whether people can apply as staff.

StatusPublicRegistrationStaff applications
Hiddennonono
Coming Soonyesno — visible-only; organizers can still create entriesyes
Registration Openyesyesyes
Registration Closedyesnoyes
Cancelled / Postponedyesnono
Closedyesnono — results are locked

Closing a competition asks for confirmation — once Closed, it locks for everyone but an admin, and its results freeze.

Adding sessions

A session is one discipline on one day. When adding one you set only four things: date (within the competition's range), time, discipline, and sanctioning organization.

Duplicate sessions (the same date, time, discipline, and organization) are flagged when you save — the save is rejected with a message naming the duplicate.

A session's discipline, sanctioning organization, and date are set when the session is added and cannot be changed in the session configuration afterwards. Changing the date of an existing session is done with the reschedule operation in Sessions & Startlists.

Session list functions

The setup panel's session list carries five per-session controls, directly on each row:

Heat timing, lane patterns, and performance buckets are configured in the session configuration inside Sessions & Startlists — covered in its own chapter (see: Sessions & startlists).

Documents, fees & policies

2Building your staff

Roles at a glance

Staff roles are per competition — separate from whatever account someone holds in the app. There is one canonical set of eighteen roles, from Organizer down to Volunteer, and a person can hold several at once: a judge who also runs check-in is two toggles, not two accounts. The full role-by-role breakdown lives at the end of this manual (see: Staff roles reference).

One thing a role grant does not do: granting a judging role only makes someone eligible to judge. Placing judges on specific heats and lanes happens in the startlist (see: Crewing the lanes).

The staff screen

The Competition Staff screen lists the roster grouped by role, searchable by name, email, role, or organization. Organizers and managers can manage it; everyone else on the roster sees it read-only. Remove someone from a role via their card's ⋯ menu — with one guard: you cannot remove your own organizer role. Another organizer must do it, so a competition can never accidentally lose its last pair of hands.

Adding people

Two buttons, two situations:

Either way you land in the role editor: a grid of all eighteen roles with the person's current set pre-selected — toggle and Save Assignments. When editing your own membership, your organizer toggle is disabled (the same self-demotion guard as above).

Staff applications

With staff applications enabled in setup (see: Documents, fees & policies), visitors can volunteer straight from the competition page: they pick from the roles you opened for application, add an optional note and a phone number, and submit — and can check or withdraw their application later the same way.

Applications land in the Applications tab of the staff screen; its button carries a badge with the pending count. For each application you can Accept as any role the applicant asked for, Accept as Staff (pending) to put them on the roster while the real role is still being decided, Decline, or delete it. Accepting writes them onto the roster immediately, in the chosen role.

Which roles are open for application is an allowlist edited on the same tab (Organizer and Manager are never applicable). Changing the allowlist is not retroactive — applications already submitted keep the roles they asked for.

Crewing the lanes

Judges, assistants, camera operators and safety divers work per lane, per heat — and assigning them slot by slot for a whole session is exactly what staff patterns save you from. A pattern set has one row per lane carrying that lane's crew; apply the set to the whole session, a range of heats, or specific heats — either replacing what's there or additively filling only the empty slots. Patterns can also be applied automatically as part of startlist generation (see: Generating a startlist).

Staff assignments are positional: they belong to the lane, and athletes rotate through. Moving or swapping an athlete never clobbers a lane's crew. And the flip side of the eligibility rule: placing someone in a pattern does not grant them a competition role — eligibility comes from the staff screen, placement from the pattern.

3Managing entries

The entries list

The entries screen is a grid of every registration: searchable, filterable (approval status, gender, session/discipline), and sortable (name, nationality, submission date, approval date). Search spans names, emails, nationalities, organizations, and disciplines at once, and multiple words combine across fields — anna HUN finds Anna from Hungary. Your filters and sort stick per competition between visits. A toolbar offers a CSV export of the whole list, a batch-reminder mode (see: Reminders), an email mode (see: Emailing your athletes), and Add New Entry for registering an athlete on their behalf.

Each row carries the entry's status controls: approval, fee, medical, liability, and an attention bell when the athlete has a pending change request. The medical and liability icons (and their columns) appear only when the competition requires that document.

Approval

Approving an entry is the gate into the competition proper: only approved athletes are picked up when a startlist is generated. Toggle it per entry from the list or from the entry itself; approval can be revoked the same way. Note that revoking approval does not remove the athlete from any startlist that already exists — it only affects future startlist generation; removing someone from a built startlist is done in the startlist editor.

Fees & payments

In manual mode you mark fees paid or unpaid yourself. Marking paid can record when it was paid and, optionally, notify the athlete — a receipt email with a PDF receipt attached (organizers CC'd). Marking unpaid with notify sends an unpaid notice.

In Stripe mode the athlete sees the computed amount on their entry and pays through Stripe checkout, using whatever payment methods are enabled on your Stripe profile (cards, wallets, local methods — you control this in Stripe). The payment confirmation marks the entry paid automatically and the athlete gets Stripe's own receipt link. The latest payment record (amount, status, receipt) is visible alongside the manual paid state.

To use Stripe mode, the competition's payee first connects a Stripe account from the fee editor: either authenticate an existing Stripe profile (a fast connect via Stripe login) or complete Stripe's onboarding to create a new one. Payments then go directly to that account.

No refunds happen in the app. Un-marking a paid entry only clears the flag — it never refunds a card. Refunds are handled outside, in Stripe.

Medical documents

An uploaded medical document starts as pending. Review it from the entries list (the heart icon opens a preview with Approve/Reject) or directly on the athlete's entry form, where Approve/Reject buttons sit next to the document. Rejecting notifies the athlete with a re-upload link and also revokes the entry's approval, so the entry resurfaces in your pending filter — but nothing blocks approval: you can re-approve at any time, even before a replacement arrives. The entry form shows a red banner while the document is missing or rejected, and a green one once approved.

Liability waivers

Liability is binary: signed or not. The athlete signs the form during registration (required blocks enforced); their signature stores an immutable snapshot of the form as it was at that moment, so later edits to the form never alter past signatures. From the list, the signature icon opens the signed response.

Change requests

Once submitted, an entry locks. Under a request-based edit policy, an athlete who needs a change requests an edit or a cancellation (with an optional message) — you'll see the attention bell on their row. Approving unlocks the entry back to draft so they can edit and resubmit; declining reverts it to submitted. Either decision emails the athlete. What exactly athletes may touch (sessions, announced performances) is governed by the entry-edit policy you chose in setup.

Phone numbers

Every athlete account carries a phone number — required at signup, in international format — and every entry form confirms it: the field arrives prefilled with a "please check your phone number" reminder, and an athlete cannot submit an entry without a valid number. The practical effect for you: a reachable number for every entrant, right on their entry form. Registering someone on their behalf is never blocked by the phone field.

Reminders

Select entries in the list and send batch reminders. The app is selective for you: only entries actually missing something — an unpaid fee, a missing or rejected medical document — receive an email; complete entries are silently skipped, so you can select all without spamming anyone. You can also target only missing medicals, only unpaid fees, or both (the choice appears when the competition uses both).

The reminder bar predicts the outcome before you send: how many of the selected will actually get an email, and why the rest are skipped (nothing missing, or no usable address). Select applicable picks exactly the entries that would receive one, and Preview email renders the reminder as it will actually send — your competition's customized template if one is placed, the default otherwise.

Emailing your athletes

Beside reminders sits the Email mode — free-form announcements to entrants you select, using the same select-over-the-list flow.

The message body is a reusable email block: pick a past message from the competition's library or write a new one on the spot — a subject and a rich-text body, with click-to-insert variable chips (athlete name, competition name and dates, a link to their entry, …) that personalize each recipient's copy. Preview renders the email with sample data before anything goes out. The message travels in the app's fixed email frame, so every send looks consistent.

Recipients without a usable address are skipped automatically. Every send — custom emails and reminders alike — is logged on the athlete's communication trail with the exact copy archived, so "what did we send them, and when?" always has an answer.

4Sessions & startlists

A session is one discipline on one day; creating sessions is part of setup (see: Adding sessions). This chapter is everything after that: timing and lane configuration, generating the startlist, editing it, and moving a session when the schedule shifts.

The session cards

The screen lists each session as a card with its athlete and heat counts — and a Reg row of status chips answering "can athletes sign up for this right now?" at a glance: red = currently blocking, green = not blocking. A chip appears per active gate: the competition's status, the session's registration window (with its opening or closing time), an organizer lock, the capacity cap (seats taken / cap, Full when reached), and the entry-edit policy.

The whole card is the click target — tap anywhere on it to open the session. The opened session's header carries Configuration (the session config, next section) and Generate / Regenerate; staff-pattern management sits in the startlist editor's toolbar once a startlist exists (see: Crewing the lanes).

Configuring a session

Each session's Edit Session Config has three tabs:

A session's discipline, organization, and date are fixed at creation — the config edits only the time of day. Moving a session to another day is a separate operation (see: Rescheduling a session).

Saving the config always drops you into the startlist generator: timing and lane changes only reach the heats when the startlist is regenerated, so the app takes you straight there.

Heat timing: fixed or bucketed

Fixed gives every heat the same length. Variable derives each heat's length from performance buckets: ranges of PB mapped to durations, so heats full of stronger divers get more time. Each bucket is a label, a maximum PB, and a heat duration; the rows re-sort by their maximum as you type, and an incomplete row blocks the save with a message naming it.

Lane patterns

Generating a startlist

The generator seeds every approved athlete into heats (see: Approval):

Heat lengths come from the session config — fixed, or per-bucket in variable mode.

Regenerating is safe. Heats and lanes keep their identities across a regenerate, so anything pointing at them — scoreboard URLs, broadcast overlays, external streaming systems — keeps working.

Editing a startlist

Toggle into edit mode to add, remove and reorder heats and athletes, or insert breaks. A heat can be added at the front (its start time is back-calculated) or after any heat, including the last; deleting a heat renumbers and re-times the rest.

Timing edits work from either end. The gap between two heats is one number seen from two sides: this heat's duration, or the next heat's start time. Edit whichever reads naturally — they are the same change. The Linked toggle (the default) cascades the change through all later heats; Free moves only the edited heat and leaves the rest of the schedule put.

Breaks are a per-heat setting. Every heat card carries a break field — minutes of pause after that heat. Type a value to insert a break: a "Break: N min" row appears before the next heat and the following heats re-time to match. Set it back to 0 to remove the break.

What protects your work: an Undo that steps back through recent edits, a stale-data check when entering edit mode (it refuses if someone saved a newer version in the meantime), and a confirmation step when a save would drop athletes off the list. Note that Cancel reverts silently to the last saved state — treat it as "discard everything since my last save".

A running session shows a Live badge in the session list — that's information, not a lock. You can edit a startlist mid-competition.

Planning warnings

The editor flags two scheduling problems while you build:

One athlete can be present on a startlist only once. That is a hard rule the editor enforces — an athlete already placed simply disappears from the add-athlete pickers.

Rescheduling a session

Because the date is fixed in the session config, moving a session to another day — or shifting its whole schedule — is its own operation: reschedule edits the session's date and time and propagates the shift to all of its heats. The new session time is the first OT. Remember to adjust the session's registration window when necessary.

5The Startlist Visualizer

Reading the timeline

The Visualizer draws the session as a vertical timeline: each heat is a block, and each block stacks three zones top to bottom — countdown (setup plus the organization's official countdown), performance (the dive window) and exit (a fixed one minute). Between two heats there can be a plain gap — empty space on the timeline — and an explicitly set break shows as its own labelled block. An occupied heat shows its number, athlete, discipline and duration, plus a dashed line marking where the athlete's PB falls within the window (in the distance disciplines the metres convert at a 1 m/s average speed) — and if the PB would run past the window, a red over-limit bar (the same condition as the editor's yellow "shortened" flag).

Dragging to retime

Long-press a zone, then drag:

The drag is a live preview and commits when you release. The Linked / Free choice applies exactly as in the table editor (see: Editing a startlist) — Linked cascades the later heats, Free moves only this one. Dragging a heat into its neighbour doesn't push the neighbour away; the collision shows as a red Overlap band, and resolving it is yours to do.

6Check-in

Picking a session

Check-in opens with a session picker grouped by date; a session currently running carries a Live badge. Pick the session you're checking athletes in for — its list opens.

Working the list

One row per registered athlete: name, check-in status, photo, gender, nationality, and email. Search matches names and nationalities. Two sort modes:

Blackout badges

Athletes with a prior blackout in this competition carry a red badge on their check-in row (and a banner in their check-in panel) naming the blackout type — this safety cue is always on, and the judging console shows the same cue to judges. When the competition runs the blackout clearance workflow, a medical officer or organizer can review and clear a blackout — a cleared blackout stops flagging everywhere. Without the clearance workflow the badges simply stay until the competition ends.

Checking athletes in

Tap a row to open the athlete's panel. Presence is one toggle — it saves immediately ("Saved successfully"), no confirm step, and the list re-sorts the checked-in athlete down. Check-in windows follow the athlete's start time; past the deadline the toggle locks for regular staff, while privileged roles can override.

With batch check-in enabled (a competition setting), the panel lists a toggle for every same-day session the athlete is registered to — check them into the morning static and the afternoon dynamic in one visit.

The check-in photo

The panel also captures the competition photo: shoot with the device camera or upload a file. The app enforces a uniform look — a 3:4 portrait, center-cropped to 480×640 — and asks the athlete to center their face for broadcast overlays. The photo is per-athlete, per-competition, separate from their profile picture, and it takes precedence everywhere the athlete's face shows during the event: heat rows, the judging console, entries, and the streaming overlays. It's never required — without one the app falls back to the profile picture, then initials. (One exception: result share cards default to the athlete's own profile portrait, with the check-in photo selectable.)

7Judging

The judging console

Judging opens like check-in: a session picker (with a Live badge on a running session), then the session's athletes heat by heat. Each row shows the athlete's AP and PB and, where relevant, a prior-blackout cue (see: Blackouts & clearance).

Who sees which heats: a judge or assistant sees only the heats assigned to them. The session's chief judge, the organizer and managers see everything, with a My Heats toggle to narrow back down; a competition policy can lift the restriction and let all judges see all heats (see: Judging policies).

The list marks the active heat — amber while in its countdown, green and pulsing once live — and a sticky header keeps its timer in view, with tap-to-scroll straight to it.

Scoring an attempt

Tap an athlete to open the entry form. Enter the realised performance (RP) — metres for distance and depth, a duration for STA timed with the built-in stopwatch or with LiveTrack (see: LiveTrack) — then pick the card, add any penalty codes, and submit.

The stopwatch's stop is deliberately two-step: stopping freezes the display and starts the Surface protocol timer; confirming finalises the duration.

A submitted result locks for regular judges. The chief judge, the organizer and managers can reopen and resubmit — that is the correction path.

Cards & penalty codes

Every judge code sits under one of the three Cards: white for records, yellow for penalties, red for disqualifications. The entry form's picker carries the full catalogue for the session's organization, and it is discipline-aware — the same code can cost different rates per discipline (UNDER AP costs 0.2 points per second in STA but 0.5 points per metre in the distance disciplines), and codes that don't apply to the discipline don't appear.

Certain codes can be applied multiple times to one attempt, each repeat multiplying the deduction — two missed wall touches under CMAS is −6 m, not −3 m. CMAS disqualifications are the most detailed: specific reasons (surface-protocol variants, blackout types, equipment, no-show) nest under shared parent codes, while an AIDA judge typically cards the parent itself.

Automated calculations run in the background — for example, when the entered result lands under the athlete's AP, the form offers the UNDER AP penalty code with the count precomputed, one tap to apply.

DNS is not a card. Marking an athlete DNS ("did not start") clears the judged fields — no verdict was needed. It does lock the form just like a submitted result does. Reinstating a DNS is an explicit action, and DNS rows sit at the bottom of the results tables without consuming a rank.

Once a card is selected, the information is instantly available to the streaming and audience surfaces — the status of the attempt is known before the result is entered.

How the points are computed

Every attempt is scored up to three ways in parallel; which score a page shows depends on the competition's configuration (see: The results page).

The judge always sees the computed score before submitting — what you confirm is what is stored.

Records

As soon as a performance is entered, the form checks it against the standing national, continental and world records for the athlete's discipline, gender and nationality — and cascades: a swim at or above the world-record threshold is NR, CR and WR at once (ties count, and records apply on a white card only).

For regular judges the detected record codes apply automatically and are read-only. The chief judge (and organizer/managers) instead get a suggestion banner with an explicit APPLY — confirming a record is deliberately theirs to do.

Detection is only as good as the thresholds in the store, which come from AIDA — refresh them before the competition, and use the coverage panel to spot nationalities with no thresholds loaded (see: Records & rankings refresh).

Blackouts & clearance

A blackout noted on a red card earlier in the competition follows the athlete as a red warning badge — in the judging list and at check-in (see: Blackout badges). The badges are always on; what is optional is the clearance workflow: when enabled, a Medical Officer or Organizer reviews open blackouts in one place, grouped by athlete, and clears them — a cleared blackout stops flagging everywhere, and an undo restores it. Clearance only ever hides warnings; it never blocks judging or check-in by itself.

Judging policies

Two competition-level policies shape the judging workflow, both set in competition setup:

And one per-session control: locking a session (from the setup panel's session list) freezes its results against further edits — typically once they are final (see: Session list functions).

Results flow onward

A submitted result is live everywhere within seconds — the results page, the DataStream and the scoreboard pick it up on their next refresh. If the competition is linked to AIDA, each saved result is also pushed to the AIDA startlist automatically in the background (see: Publishing results).

8LiveTrack

What it is

LiveTrack is phone-based split capture: while an athlete swims, an operator taps once every split distance. The taps become live telemetry — the pool progress bar and the speed graph spectators watch on the DataStream (see: The pool progress bar) — and a record of the swim's pacing. It applies to the pool distance disciplines, and to STA as an alternative to the plain stopwatch.

Setting it up

Three competition-level settings (see: Documents, fees & policies):

The pool length from the venue settings drives the lap-and-turn arithmetic.

Capturing an attempt

The operator opens the Speed Tracker from the athlete's entry form. Start anchors the clock at the top of the dive; every tap logs a split at the running distance; stop logs the final split and hands over to the Surface protocol timer. For STA the tracker and the stopwatch are mutually exclusive — the form offers the one the competition is configured for.

Where the data goes

Splits reach spectators within seconds. The per-lane pool progress bar animates the athlete down the pool with markers for their AP and PB, the current leader, and the standing records; the speed graph in the athlete detail panel charts speed per split segment, live during the swim and preserved afterwards (see: The athlete detail panel).

9Commentator notes

Private notes

The commentator's prep tool: one row per athlete in the competition, with an inline markdown note editor. Notes save explicitly, and they are private to their author — a commentator and an organizer keeping notes on the same athlete never see each other's.

Notes attach to the athlete, not the competition: the dossier a commentator builds follows the athlete into every later competition they call. The list filters (all / with notes / without) and searches across names, nationalities, organizations, and the note text itself.

During the stream, the note surfaces where it is needed: the athlete detail panel on the Live DataStream shows the commentator their own note for whoever is on screen (see: The athlete detail panel).

Access: commentators, managers and organizers.

Shared flags

Separate from notes: a purple flag toggled on an athlete — "one to watch". Flags are per-competition and shared: every commentator and organizer sees them.

Bulk import

Notes prepared in a spreadsheet load in one pass: CSV or Excel, delimiter auto-detected. Columns are mapped, not fixed — the app guesses which column is the athlete id, email, name, nationality or note content from the headers, and you correct it; several content columns merge into one structured note.

Rows are matched to athletes most-confident-first: AIDA id, then email, then name + nationality, then name alone with a picker for the ambiguous ones. Re-importing onto an athlete who already has a note appends rather than overwrites.

10The Live DataStream

The spectator page

The DataStream is the public face of the competition while it runs: a session picker, then the live session — heats and lanes, results as they are confirmed, the countdown, the athlete detail panel. Anyone with the link can watch; no account needed.

Two organizer-side controls matter here:

Following the live heat

The current heat highlights automatically — computed in Venue time, so every viewer sees the same heat regardless of their timezone. Lanes show the live attempt timer, then the Surface protocol countdown, then the confirmed result (card, performance, points) as it lands. A Current Heat button jumps to it, and Focus mode narrows the page to the current heat and the next one.

The pool progress bar

In pool disciplines with LiveTrack running, each lane renders a pool-shaped progress bar animated from the live splits — the athlete visibly moving down the pool — with markers for their AP and PB, the current leader of their gender, and the standing NR / CR / WR. Live telemetry is served to every viewer.

The athlete detail panel

Tap any competitor for the full picture, in three tabs:

The panel is open to everyone, including anonymous spectators. Staff in the full-detail view additionally see their own commentator note on the athlete, editable in place (see: Private notes).

Share cards

Every lane card with a result carries a Share button — for spectators too. It renders the result as a branded image: Story (9:16) or Feed (4:5) format, the athlete's profile portrait or check-in photo, and a design that reacts to the result — card-status accents, and gold / silver / bronze treatments when the swim set a world, continental or national record. On phones it hands the image to the native share sheet; on desktop it downloads.

The YouTube overlay

Give a session a livestream link (see: Session list functions) and the DataStream grows a floating YouTube player, available to every viewer — the stream and the startlist on one screen. It is draggable and resizable, and collapsing it keeps the audio playing — handy for audio commentary.

Set the session's video anchor — the second in the video where the first heat starts — and every completed heat gets a ▶ Playback button that seeks the stream straight to that heat.

Compact view & favorites

The heat list has two shapes: full Cards, and a Compact list — dense one-line rows of start time, name, lane and result, tinted by heat state. Compact is built for finding people by start time and for phones.

Compact rows carry a favorite star: any viewer can bookmark the athletes they are following, and the favorites collect in a strip pinned above the heats. Favorites are personal to the device and to the competition. Compact and Focus are alternatives — turning one on turns the other off.

11Scoreboard & live countdown

The venue scoreboard

The scoreboard is a chrome-less, full-screen page built for the venue: plug a laptop into the hall display, open the scoreboard, done. It needs no login, so it is safe on shared venue machines.

The left panel is the session's leaderboard — the top eight, with place, flag, name, performance, points and card, under a live venue clock. The right panel is the heat schedule: the current and next heat with each athlete's lane, flag, PB, AP and live result, headed by a big timer counting down to the next OT or up through the running heat. During configured breaks a BREAK watermark appears and the timer counts down to the next heat.

Staff open it from the DataStream's floating SCOREBOARD control. It renders the design picked in competition setup — free designs plus any premium designs granted to the organizer — and a preview option lets you try a design before committing (see: Documents, fees & policies).

The emergency blank

Next to the scoreboard control sits an Emergency toggle: one tap blanks every open scoreboard to a centered logo, instantly — for unexpected circumstances or prolonged breaks. Toggling back restores the boards just as fast.

The live countdown

The DataStream header counts down the final two minutes to each heat's OT, in Venue time for everyone. With audio on, it plays the official AIDA or CMAS countdown track, scheduled so that the track's end lands exactly on the OT — once per heat, never re-seeked mid-play.

That makes the countdown self-operating: a venue device on the PA, left unmuted, plays the official countdown with no operator at all. Staff viewers default to unmuted, everyone else to muted (each viewer has a toggle), and a staff-only manual mode — pick the track, play and stop by hand — stands by as the backup.

Important: when initializing the countdown for venue use, make sure the browser has the right privileges to play sound. One sure-fire way to do this is to disable and re-enable (mute/unmute) the sound with the speaker button on the clock.

12Results & statistics

The results page

The results page is fully public: one ranked table per discipline, with the tabs derived from what was actually swum — including combined tabs (such as DYN+DYNB) where a session ranks two disciplines together, and an OVERALL tab where the sanctioning makes one possible (see: The OVERALL tab).

The points column follows the competition's configuration — nOxy points, CMAS native units, or AIDA points (see: How the points are computed). Cards render as white, yellow and red chips; a red card is the disqualification (there is no separate DSQ state), and red-card and DNS rows sit at the bottom, consuming no rank. Filters: gender, organization (on multi-org competitions), international vs host-country, newcomers-only. The page refreshes itself while open, so it can run on a screen all day.

How places are decided

Higher points win (speed events invert — there, the lower time wins). On equal points, the athlete whose announced performance was closer to what they delivered ranks higher — the AP-to-result gap is the tiebreak, rewarding honest announcements. If points and gap are equal, the athletes genuinely share the place, Olympic style: a tie for first yields 1, 1, 3.

The same comparator decides places everywhere — results page, scoreboard, DataStream leader markers, exports and the public streaming API — so a place never differs between surfaces.

The result detail panel

Tap any row for the attempt in full: performance, points, card, and each penalty as a chip — plus a step-by-step scoring breakdown (base points, each deduction, the final) for AIDA and CMAS attempts. Logged-in viewers also get the athlete's Rankings & PBs: their national, continental and world ranking positions per discipline. A button jumps to the attempt's heat on the Live DataStream — and if you arrived from the DataStream, a floating button takes you back.

The OVERALL tab

OVERALL is a points matrix — athletes × disciplines, plus a total column — appended when the configuration supports a fair sum: an AIDA-only competition, or a mixed or CMAS competition scored with nOxy points (cross-discipline comparison being precisely what nOxy points are for). It hides itself when a CMAS competition mixes speed events with pool or depth — seconds cannot rank against metres. Overall ties break on total points alone.

A medal table across all disciplines lives on the statistics page (see: By the numbers).

Exports

Two export buttons — CSV and Excel — tiered by who is asking: guests see no buttons; a logged-in spectator exports the public columns (rank, name, nationality, organization, result, points, card); staff export the full operational set, adding gender, age, heat, lane, OT and the judging crew.

13DataScience

By the numbers

DataScience is the competition's statistics page — public, linked from the competition dashboard, and refreshing itself about once a minute, so it holds up as an ambient display in the venue or a rest-day link for athletes and press.

Its sections, top to bottom: records broken (with the top record-setting nations), the medal table, who showed up (athletes, nations, the gender split, a by-continent breakdown), the sanctioning split (AIDA vs CMAS), the effort (heats, dives, total distance swum, total breath-hold time, personal bests beaten), disciplines (how many each athlete does, with card splits), announced vs. delivered, the drama (the card donut, with a cleanliness percentage), and blackouts by day. Sections appear only when the competition has data for them. By the time you open the app, new infographics may have been added.

Reading the numbers

A few definitions worth having when someone asks: the medal table collects podium places across every discipline and gender, sorted gold → silver → bronze. PBs beaten counts valid swims (white or yellow card) that exceeded the athlete's personal best on entry. And every section is deep-linkable — the page can open scrolled to a chosen section, handy for sharing one chart.

14Syncing with AIDA

Importing a competition

An AIDA-sanctioned competition doesn't have to be built by hand — import it. From the dashboard's create menu, enter the AIDA event ID and the event's API key (generated in the AIDA portal for an approved competition; keys are per-event), or upload the startlist as an Excel/CSV file.

The import first scans and analyzes: disciplines found, unique athletes, nationalities, heat spacing, gender split — with a field-mapping review before anything is written. Importing then creates the competition, its sessions, heats and lanes, an entry per athlete with their announced and personal bests, and their AIDA rankings. Whoever runs the import becomes the competition's Organizer.

Three optional follow-ups run right after: importing the record thresholds, refreshing rankings, and processing athlete avatars (see: Records & rankings refresh).

Matched athletes & shadow accounts

Every imported athlete is resolved against existing accounts — by their AIDA profile id first (an exact match whenever the athlete has linked their profile — (see: Athletes link themselves)), then by name + nationality. A match links the existing account; no match creates a shadow account: a placeholder carrying the athlete's AIDA data (name, nationality, photo, career highlights, rankings) so the competition is fully populated even for athletes who have never opened the app. When the real person registers later, their account and the shadow can be merged. The merge itself is admin-performed; your lever as an organizer is pinning identities down in the AIDA identity panel (see: The AIDA identity panel), which turns fuzzy name matches into exact ids.

Re-imports never overwrite — they only fill in what is missing, so nothing typed in the app is lost to a sync.

The strongest fix for matching happens at the source: registering for an AIDA-sanctioned competition, each athlete is asked to link their own AIDA profile. They search AIDA's athlete directory by name (or paste their profile link), preview the profile, and confirm — from then on, imports and syncs resolve them by exact id, never by name. The same step is offered when creating an account.

Linking is soft-required: an explicit "I can't find my profile" records the skip and never blocks the registration or its payment. You see the outcome either way — the new-entry notification flags athletes who are not linked — needs a manual match, and the identity panel collects them for you (see: The AIDA identity panel). A profile id already claimed by another account is hard-blocked, so nobody can take over someone else's identity — and athletes never merge anything themselves; supplying the id is all they do.

DataConnections

DataConnections is the sync control center for an AIDA-linked competition — organizer-only, and read-only once the competition closes. The top card holds the AIDA event ID and the (masked) API key; below it, diagnostics: connection status, discipline and session mismatches, athletes present on one side but not the other, and days AIDA no longer serves.

The session list carries the working buttons:

One boundary to know: once a slot exists locally, AIDA-side structural changes — an athlete's heat, lane or start time — are not pulled onto it. Your local startlist is the working truth; AIDA positions are consumed only when a slot is first created.

The AIDA identity panel

AIDA identity, also on DataConnections, is where the remaining matching work queues: one row per athlete with their link status — Linked, Skipped ("couldn't find my profile"), Proposed (awaiting the athlete's answer), Declined, Contested, or Not linked — with the evidence behind each claim. It opens on the subset that needs your attention. What you can do depends on who the row is:

Linking a profile directly onto a real athlete's account stays with nOxyApp admins.

Publishing results

Results flow back to AIDA two ways:

Records & rankings refresh

Three freshness actions keep the reference data current:

15Broadcast overlays (the Titler)

What it is

The Titler is nOxyApp's broadcast graphics system: athlete lower-thirds, live progress, startlists, leaderboards and results, rendered as a transparent 1920×1080 web page that OBS (or vMix) loads as a browser source over your cameras. The graphics feed themselves from the competition's live data — judging, telemetry, results — so once a scene is up, it stays current without anyone typing.

Two halves make it work:

Two operators can drive the same channel at once; the console converges on the latest state within a couple of seconds.

Getting access

Overlay access is granted per template set — the visual package your graphics use — either to your competition (covering all its operator staff) or to a person across all their competitions. There are no free sets; if the Overlays button doesn't appear on your dashboard, ask a nOxyApp admin for a grant. Operating also requires an operator role on the competition: organizer, manager, streaming or techie. If a grant lapses mid-broadcast, operation locks but the on-air graphics keep rendering — a paperwork problem never blacks out your stream.

Channels and the OBS source

Pick a session in the Overlays screen and create its channel — that mints the secret renderer URL, shown under ⚙ in the console. Paste it into OBS as a browser source at 1920×1080 with a transparent background; add ?bg=checker while positioning if you want to see its bounds, and drop that once live.

By default the operator switches scenes from the console and OBS shows whatever is live. If your studio prefers cutting in the mixer, use the per-scene URLs (⚙ → Scene URLs): each pins one scene permanently, so you load one browser source per scene and cut between them in OBS — element and athlete changes still flow live into every pinned source.

If a token ever leaks, regenerate it: the old URL dies instantly. The token only exposes overlay graphics and already-public competition data.

Scenes

A channel's graphics are organized into five scenes — pre-heat, intros, live, results, leaderboard — each remembering its own element setup. The presets are only starting points: any element can be toggled onto any scene, and your changes persist per scene for the whole session. Scene keys 1–5 cut between them.

Composing off-air uses preview mode: enter PREVIEW, edit freely (nothing you do touches the live output, even on the same scene), then TAKE (Space or Enter) cuts your composition to air. PEEK flips the monitor to what's currently live while you work; CANCEL discards. For emergencies there are two clears: CLEAR ALL (Esc) blanks the whole output as a toggle — press again to bring everything back exactly as it was — and Clear scene darkens just the active scene, which with pinned per-scene sources means darkening that one browser source while others stay up.

The elements

The default set carries the full WC-2026 broadcast package:

ElementWhat it shows
Athlete underbarThe flagship lower-third: follows one athlete through their whole attempt — announced stats and world/continental/national rankings before the dive, a live progress bar with pool-position markers during it, the surface-protocol countdown, then the official result and card.
Mini progress barsThe whole heat at a glance — one compact live row per lane, with a configurable middle column (progress strip, PB+AP, time+speed, or compact).
OT dive timerThe black-on-yellow clock counting up from Official Top, always following the actually-live heat.
Next-heat startlistThe upcoming lineup — configurable to show the heat after the live one or after the heat you've selected.
Heat resultsOne heat's preliminary results as they're judged, with card chips and remarks; freezable against late corrections.
LeaderboardSession standings with shared places, gender filter and pagination; freezable, with animated reordering as results land.
Results tableThe app's full Results page on air — overall or per discipline, with every filter and paging.
Athlete info cardA career portrait: the athlete's best per discipline as a bar against the world record, plus their world ranking.
Free text ×3Caption slots for commentator names, guests and ad-hoc messages (see: Making it yours).

Elements animate in and out; changing what one shows (a new athlete, another page) plays a graceful hide-change-show rather than snapping. Live positions come from one shared estimator per lane, so every element always agrees on where a swimmer is.

Following the action

With auto-follow on, the featured heat advances by Official Top and the featured athlete is whoever is in the water — and once someone is featured, they're held through their surface protocol until their full result lands, plus a three-second linger, before the focus moves on. Selecting an athlete by hand pins them and turns auto-follow off; turning it off freezes on whoever is currently featured. The console highlights the auto-featured athlete so you always know what the output is doing.

Keyboard, hotkeys and macros

Everything is driveable from the keyboard, and every binding is yours to change (⚙ → KEYS): elements on the QWERTY row, scenes on the digits, athletes on Shift+digits, heat/lane focus on the arrows. Bindings are saved to your account — your layout follows you to any competition — and the on-screen badges show your physical keyboard's real labels, QWERTZ included. Beyond single keys, macros chain actions with waits ("hide everything, wait half a second, bring up the leaderboard") and bind to a key like any action; deterministic On/Off variants exist for every element so a macro can guarantee a state instead of blindly toggling.

Making it yours

16Practice runs: demo & sandbox competitions

A competition to play with

Nothing teaches the app like a competition that is actually running — so on nOxyApp's demo environment, competition creators find Demo & sandbox comps in the header's info menu (the same menu as Read the manual). This is a demo-environment feature by design: practice competitions never exist on the production site, so nothing you try here can ever sit next to real results. Two buttons, two purposes:

One demo runs at a time across the whole environment; if another one is already going, the launcher says so (and for how long it has been running) instead of starting a second.

Glossary

AP — Announced Performance
What the athlete declared they'd do when registering. Lower announcements start earlier, so athletes routinely lowball their AP to get an early start — an AP of 1 means "start me first", not a typo. Reaching less than the AP costs an under-AP penalty in AIDA scoring, and the AP-to-result gap breaks ranking ties (smaller gap wins).
RP — Realised Performance
What the athlete actually did: the raw result in the discipline's natural unit — metres, or seconds for STA.
OT — Official Top
The scheduled start moment of an attempt: countdown zero, performance window opens. Always in venue time. AIDA start rules hang off it: up to 10 s after OT is free, 10–30 s costs a late-start penalty, beyond 30 s disqualifies.
PB — Personal Best
The athlete's best performance in a discipline entering the competition. It drives startlist seeding and performance buckets, and "PB beaten" statistics compare results against it. It does not update itself during the event.
Venue time
The competition's own timezone, set in setup. Every schedule, countdown, and deadline is shown in venue time for everyone, regardless of where a viewer is.
Cards
WHITE clean, full result   YELLOW valid result with penalties   RED disqualified — no result, no rank   DNS did not start (not a card: no verdict was needed). A "counted swim" means white or yellow and not DNS.
Heat
One timed group of attempts run side by side across the lanes; a session is a sequence of heats, each with its own OT. An athlete occupies one lane slot in one heat per session.
Shadow account
A placeholder athlete account created by the AIDA import for someone not yet in the app — it carries their AIDA name, nationality, photo and rankings, and is merged into the athlete's real account when they register.
nOxy points
A balanced scoring system developed by nOxygen: every performance is normalized against a per-discipline benchmark to a common points scale, so results compare across disciplines, genders, and sanctioning bodies — the basis for mixed overall rankings.
STA — Static apnea
The breath-hold discipline: the performance is the duration, face-down in the pool. Times read mm:ss; higher is better.
DYNB — Dynamic bi-fins
Underwater distance swimming with two separate fins; metres, higher is better. Often run as a mixed DYN+DYNB session where both rank together.
Disciplines
Pool: STA (seconds), DYN / DYNB / DNF (metres). Depth: CWT, CWTB, CNF, FIM (metres). Speed (CMAS): SP and SE events, where lower time wins — the one family that ranks ascending.
Surface protocol
The mandatory post-surfacing sequence — equipment off the face, OK sign, "I am OK" — within 15 s (AIDA) or 20 s (CMAS). Judges card the attempt only after it; failing it is a red-card disqualification.

Staff roles reference

Roles are granted per competition on the Competition Staff screen. Granting a judging role makes someone eligible; assigning them to specific heats happens in Sessions & Startlists.

RoleWhat they do
OrganizerFull management: setup, sessions, staff, entries, sync, results authority. The creator gets it automatically. Can't remove their own organizer role — another organizer must.
ManagerDay-to-day deputy: entries, results, startlists, check-in, notes, broadcast — but no competition setup, staff management, or AIDA sync.
CoordinatorField-ops coordination: office visibility and user lists, without result or management powers.
AIDA / CMAS JudgeScores attempts in the judging console for their organization's sessions. Sees their assigned heats by default; a submitted result locks for them.
AIDA / CMAS Chief JudgeSession authority: sees all heats, may edit submitted results, and confirms record applications.
AssistantPoolside support; in assistant-entry competitions, the person who actually types the results.
Check-in OfficerRuns athlete presence — the check-in console is theirs (chapter 3).
Medical OfficerThe only role besides the organizer that can clear blackout warnings.
CommentatorPrivate athlete notes (with bulk import), shared athlete flags, broadcast panel, and the fastest live-data feed.
StreamingStream production: broadcast panel, live telemetry, overlays and the venue scoreboard as sources.
TechieTechnical crew with broadcast-panel access.
LiveTrackerDedicated split-time telemetry operator — can capture LiveTrack data but never touch results.
Camera OperatorPer-lane camera crew, assigned to heat slots (usually via staff patterns).
Safety DiverIn-water athlete safety; an operational presence role.
VolunteerGeneral helper on the roster — no console access or special views.
Staff (Pending)"On the roster, assignment to be decided" — used when accepting applications before deciding a role.