AIDA Competition Management System
This manual covers running an apnea competition with Apnea Comp from setup to results. The in-app Help (More → Help) is a quick reference; this document goes deeper, with operational scenarios and troubleshooting.
If you only have five minutes, read Quick Start below and the FAQ at the bottom.
You will need:
We recommend each judge / staff member uses their own device. The app supports several people working on the same event simultaneously — results sync between devices in real time.
You are now ready to run the day.
| Role | Setup | Judge | Check-in | Users | Log | OT Delay | Send Push |
|---|---|---|---|---|---|---|---|
| 👑 Organizer | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| ⚖️ Main Judge | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| ✏️ Judge | — | ✅ | ✅ | — | — | — | — |
| 👀 Staff | — | view | ✅ | — | — | — | — |
| 🏊 Athlete | — | — | — | — | — | — | — |
| ⏳ Pending | — | — | — | — | — | — | — |
Open the event → Edit Event → fill:
Tap Test Connection. A green checkmark means the credentials are valid and the app can read the start list. Save.
If you leave these blank or set the token to test or demo, the app runs in 🧪 Mock mode — it generates sample athletes for practice. Mock mode does not send anything to AIDA.
The invite code is shown in Edit Event. Share it via your usual channel (chat, email, paper). Staff use Join with code on the Events screen to enter the code.
Tip: rotating the invite code is not yet supported. Treat it like a password and only share with people who should be on the team.
If you accidentally use the wrong code, ask the Organizer to remove you from Users so you can try again.
If you are competing rather than running the event, sign up as an athlete to see your start list, OT, line, and personal results.
You can switch between staff and athlete views at any time: tap your avatar (top-right) → Switch to Athlete Mode (and back the same way).
When you sign up, the app reads your name and tries to match it to athletes that organizers have already loaded into the app from AIDA. If exactly one match is found, your account is linked automatically. Otherwise, the organizer can issue a one-time invite code.
If two athletes share the same name, automatic matching cannot decide which one is you. Ask the Organizer for an invite code:
The Organizer can turn on a single broadcast code (shown as the Athlete code) that any athlete can use to join the event directly — useful when there is no AIDA start list yet, or for athletes who are not on it.
Organizer: open the event → Setup → tap the green + next to Athlete code to generate it, then copy and share it (chat, paper, projector). Tap the power icon to turn it off at any time.
Athlete: open the app → Events → Enter code → paste the broadcast code. Once joined you can view the start list and results and submit your documents.
If automatic matching does not find you, you can link your AIDA athlete profile by hand. In Edit Profile or Athlete Setup, tap Find me on AIDA, type your name, and pick your profile from the results. This stores your AIDA athlete ID so your results match correctly. The 🔄 sync icon also pulls in events you are registered for. (Athletes with no competition history may not appear in search — in that case enter your name, nationality, and gender manually, exactly as registered with AIDA.)
Athlete Mode has four tabs: My Info, Start List, Results, and Rewards (past events show three — no Start List).
You cannot see other athletes’ personal information, judges’ notes, or AIDA tokens.
If you allow notifications, you receive:
Notification text arrives in your chosen app language. You can turn notifications off at any time in your device’s system settings or in the app’s About screen.
Many events require athletes to submit AIDA consent forms before competing. Open My Info → Documents.
For staff (Organizer / Main Judge): open More → Documents to review each athlete’s submission status, open files, and download everything as a ZIP (folders by document type). When an athlete declares an injury or black-out, the medical statement is flagged for manual verification — confirm the certificate in person, then tap Mark verified. Submitted documents are kept for 15 days after the event, then deleted.





Setup is where you decide the schedule for the day: which line each athlete swims on, when their OT (official time) is, and what breaks happen during the day.
Auto-save — every change you make in Setup is saved to the server automatically. If you leave the app and come back, your settings are restored. If a co-organizer reloads athletes from AIDA, the schedule still respects your line configuration.
09:00).(lines − 1) × line_interval < athlete_interval, otherwise the schedule cannot be generated. When OFF, all lines run in parallel — the athletes in the same row share the same OT, exactly like Pool mode.Tap Advanced Setup to expand more options for fine-grained control:
Cross-discipline lane carry-over — when the previous discipline ends mid-line (e.g. STA ends on lane 3 with 4 lanes), the next discipline can either restart from lane 1 (default) or continue from lane 4. Useful when judges stay on the same lane across disciplines.
After loading athletes, open Assign Lines to move them between lines and reorder. OTs are recalculated automatically:
Direct line assignment — for special cases (e.g. a specific line reserved for a national record attempt, or placing a re-swim — see Re-swim & Opener), tap an athlete, then tap the target line and position. The schedule re-flows to honour your choice.
Save when done — start times are now finalised for the day.
Breaks pause the schedule for a fixed window. The app supports two kinds of breaks.
Use this for fixed-time breaks that everyone agrees on in advance (lunch, ceremony, etc.):
12:00 – 13:00).Any athletes whose OT falls inside the break window are pushed back so their OT lands after the break ends. The lane assignment is preserved.
Use this when you need to insert a break after a specific athlete finishes, regardless of clock time. Typical scenario: the warm-up athletes finish, you want a 60-minute rest before the official athletes start.
60 minutes).The selected athlete plus every athlete after them in the start list order is shifted by the break duration. Other disciplines (athletes earlier in the order, even at the same clock time) are not affected. Lane assignment is preserved.
To remove a break, tap the 🗑️ trash icon next to it in the BREAK TIMES list.
Team events (event type Team) group athletes into teams whose combined scores decide the standings. A Teams section appears in Setup — only for Team-type events.
Tap New Team to open the team editor.
Each team card shows its name, colour, and member count. Tap a card to edit, or use its menu to delete it.
An athlete who competes on more than one day appears once — selecting them assigns all of their day entries to the team, so you pick each person only once.
Athletes sign in before warm-up. Open the Check-in tab.
Check-in HH:mm.The signature drawing is for visual confirmation only — it is shown to the staff member at the moment of check-in and discarded as soon as the sheet closes. We do not store the signature image anywhere (not on the server, not on the device). Only the fact that a signature was captured is recorded, along with the check-in time.
Check-in works offline too. If the device is offline when you confirm, the check-in is held in device memory with a small ⛔ “Offline” badge on the card, and synced to the server automatically within 5 seconds of reconnecting. See Offline operation.
The Start List tab shows the day’s running order with a live countdown to the next athlete’s OT. As each OT approaches, the app speaks the countdown aloud so athletes and judges hear it without watching the screen.
As each OT approaches, the app plays spoken cues so athletes and judges hear the count without watching the screen. The cues are pre-recorded audio files, so they sound identical on iOS and Android (earlier versions used each phone’s built-in text-to-speech, which differed between devices).
Cues before OT:
2:00 (“two minutes to official top”), 1:30, 1:00, 0:30, 0:20, 0:10, then 5 — 4 — 3 — 2 — 1, and at OT: “official top”.
Cues during the start window (after OT): “plus one” at +1 s, then the elapsed seconds are called as the window runs out — up to the discipline’s limit — ending with “start cancelled” if the athlete has not started by the end of the window.
The automatic countdown above is tied to each OT. For a one-off manual announcement, tap the Announce button on the Start List. Enter how many minutes before OT you want to call, and the device speaks “N minutes to Official Top” once, using the device’s text-to-speech.
This is separate from the automatic countdown cues — it is a single spoken announcement you trigger by hand. It speaks in the device language (English, 한국어, 日本語, 简体中文, or 繁體中文).
Tap the 🔊 / 🔇 icon in the AppBar to toggle voice announcements. Useful when:
Mute applies only to the device you toggle it on — other devices in the same event keep speaking. The visual countdown keeps running regardless.
Speaker Mode turns the device into a dedicated countdown announcer — perfect for the venue’s main loudspeaker. Once enabled:
Keeps speaking in the background. In Speaker Mode the voice — both the countdown cues and the manual Announce — keeps playing even when the app is sent to the background or the screen is locked. On iOS this is held open by a silent keep-alive track; on Android by a foreground-service notification (“Start list countdown active”). So the venue loudspeaker keeps announcing even if the phone locks itself. This applies in Speaker Mode only.
To enable: open the role / profile menu → Speaker Mode → set a 4-digit PIN.
To exit: tap the Speaker Mode badge → enter the PIN → confirm.
Recommended setup: a dedicated phone or tablet plugged into the venue’s audio system, in Speaker Mode for the entire competition day. Keep it on a charger — voice playback drains the battery faster than passive idle.
The app keeps the screen awake on every screen, not only Start List, so countdowns and notifications work even if you don’t touch the device. This is a global setting — it applies as soon as you open the app. Note: keep the device plugged in for full-day events; the battery will drain faster than normal.
The Judge tab shows all athletes for the current day. Tap a card to enter the result.
After saving you will see a small badge on the athlete card:
If no badge is shown, AIDA integration is not configured (no startId for that athlete) — that is normal in Mock mode.
To save the judge from working out a distance or a static average by hand, the Judge tab has small calculators built into the athlete detail sheet. They compute the RP for you and write it straight into the result.
Distance calculations need to know how long the pool is. Set it once in the event Setup as Pool Length (m). It is available for Pool and Team event types only — Depth events do not have it. Without a pool length the Distance Calc cannot run.
For the dynamic disciplines, open the athlete in Judge → detail sheet → tap the 📏 ruler button.
For static, tap the ⏱ timer button in the detail sheet. Enter the time measured by each of the two judges (mm:ss). The app averages them (rounded to the nearest whole second) and Fill RP writes the average into the RP field.
The app follows AIDA Rulebook section 17.8. Reasons are grouped by card colour.
| Discipline | Window | Within window | Past window |
|---|---|---|---|
| Pool | ±10 s | 1 pt / 5 s (Yellow Early/Late Start) | DQ Late Start (Red) for late side; Jump Start (Red, DYN only) for early-pool wall start |
| Depth | ±30 s | 1 pt / 5 s (Yellow Early/Late Start) | DQ Late Start (Red) for late side |
AIDA Rulebook 4.1.16.2 requires written reasons for every Yellow and Red. The Save button blocks the action if REMARKS is empty for a reason that requires it.
When you select a reason, the REMARKS field is pre-filled with a template (e.g. BO Surface, recovery: ___). Complete the missing detail before saving — this is the official record.
When you tap the Red card, the reason sheet shows both Red and Yellow reasons in two groups:
You can select multiple reasons across both groups in one save — for example Red Airways plus Yellow Under AP. Selected chips are colour-coded by category so you can see what is being recorded at a glance.
Yellow card on its own also supports multi-select (e.g. Early Start + Grab). Yellow cards do not show the Red group.
A protest is a formal challenge to a result, filed under AIDA Rulebook 17.8. Apnea Comp tracks the whole flow — filing, the athlete’s signature, the jury’s decision, and any change to the result.
Every protest ends with the athlete’s signature, even when a staff member starts it on the athlete’s behalf.
Organizer, Main Judge, Judge, or the athlete. Fees are not tracked in the app.
The protest status becomes Pending — waiting for the jury.
Open More → Protests (Organizer / Main Judge / Judge). The list groups protests by status (Awaiting signature / Pending / Reviewing / Accepted / Rejected / Withdrawn). Tap one to decide.
A protest cannot be decided while it is still Awaiting signature — the athlete must sign first.
The jury decides by an anonymous vote. Each Judge and Main Judge casts Accept or Reject. The vote is anonymous — who voted which way is not shown, only the running tally of each side.
If the vote is tied, the Main Judge casts the deciding (casting) vote to break it. The final decision form still requires the jury’s signature before it is recorded.
Organizer or Main Judge can delete any protest from its detail screen (🗑 trash icon) — use this to clear a test entry, or a legacy protest that is stuck waiting for a signature that will never come.
All staff and the affected athlete receive a push when a protest is filed, awaiting signature, or decided, in their chosen app language.
When a protest is accepted (or a judge calls for a re-performance), the athlete swims again. Because loading a day’s start list from AIDA replaces that day’s athletes, a re-swim is reserved in a queue first, then inserted when the target day’s list is built — so it is never wiped out by a reload.
An opener is a warm-up or demonstration entry that should not count. Organizer / Main Judge add one under Setup → Add Athlete: name, nationality, gender, discipline, AP, PB (STA uses a mm:ss time picker; other disciplines use a number). Openers are excluded from rankings and never sent to AIDA.
If the day slips — long warm-up, an incident, equipment issue — you can shift remaining OTs without rebuilding the start list.
On the Start List or Judge tab, the AppBar shows a 🕒 icon just before the role badge on the right. Visible only for Organizer and Main Judge.
Every OT from the chosen athlete onward shifts forward by that amount. The corresponding check-in / warm-up times shift too.
Apnea Comp uses push notifications for time-sensitive event updates. Notifications are delivered through OneSignal, which forwards them to APNs (iOS) and Firebase Cloud Messaging (FCM, Android). Each notification is sent in the recipient’s chosen app language.
There are two flavours: notifications you trigger manually, and ones the system sends automatically based on event state.
From the More menu, Send Push opens a small panel with three buttons. Each sends to all athletes registered for the chosen day:
Each tap shows a confirmation dialog with the recipient count before sending.
These run without staff action:
| Trigger | Recipients | When |
|---|---|---|
| OT Delay applied | Affected athletes only | Immediately when an Organizer / Main Judge applies a delay |
| Check-in deadline reminder (1 hour) | Athletes who have not checked in | 2 hours before OT (= 1 hour before check-in deadline) |
| Check-in deadline reminder (30 minutes) | Athletes who have not checked in | 1.5 hours before OT (= 30 minutes before check-in deadline) |
| Protest filed | All event staff + the athlete | When a protest is submitted |
| Protest awaiting signature | All event staff + the athlete | When staff file on the athlete’s behalf |
| Protest decided | All event staff + the athlete | When the jury accepts / rejects / withdraws |
Once an athlete checks in (or is marked DNS / Late), the reminders stop.
Only users with all of the following:
Disabling clears your push token from the server immediately.
The app is designed to keep working when the internet drops mid-day, which is common at pool / depth venues.
A red bar “You are offline” appears at the top. You can still:
When you save a result while offline, the athlete card shows a small ⛔ Offline badge instead of the AIDA sync badge. This means:
When the internet returns, the badge changes to ✅ AIDA automatically. No manual action needed.
If for some reason auto-retry has not caught up, open Results:
If anything is pending you will see an orange banner:
Offline results live in your device memory until they sync. Do not force-close the app or reboot the phone while you have offline items pending — they would be lost. Wait for the ⛔ badges to clear, or tap Sync now before quitting.
If you are unsure, open Results and look for the orange banner. No banner = nothing pending.
Log in to your AIDA International admin account at https://www.aidainternational.org. Open the competition you registered. Look for the API / Integration section to copy:
If you do not see these options, the AIDA admin who registered the event needs to share them, or your account permissions need updating.
Edit Event → paste both values → Test Connection → Save. The app caches the token securely on the server (never exposed in URLs). When you update the token, the new value is used immediately for the next save (no app restart needed).
Set the token to test or demo (or leave both fields blank) to run without AIDA. The app generates sample athletes; nothing is sent. Use this for training, dry runs, or app demos. Mock-mode events ignore real-world dates so countdown and voice prompts work immediately for testing.
For competitions spanning multiple days:
Data does not carry between days — moving an athlete in Day 2 does not affect Day 1. Total scores across days are computed in Results.
If your event is registered on AIDA with multiple days, Load Athletes pulls the per-day start lists automatically.
The Results tab shows live standings, updated as judgments come in.
The Rewards tab (also a tab in Athlete Mode) ranks athletes by points, grouped by discipline and gender.
Mark and confirm World / Continental / National record attempts.
Only white-card (valid) performances qualify. A performance with any penalty cannot be a World or Continental Record (Rulebook §10.2). The suggestion compares the realized performance (RP) to the current record; the judge makes the final decision.
Both settings live in the avatar menu (top-right), and apply instantly across the app.
Tap your avatar → Theme → choose System default, Light, or Dark.
Tap your avatar → Language → choose System default, English, 한국어, 日本語, 简体中文, or 繁體中文. The app switches immediately and remembers your choice.
Competition-standard terms stay in English in every language — OT, AP, RP, PB, discipline codes (STA, DYN, …), WHITE / YELLOW / RED, role names, and Line — so staff from different countries read the same labels.
No. As soon as they save a result, it is stored on the server (or on their device if offline). Other devices in the same event see the result immediately. Even if their phone is permanently lost, only their unsynced offline results would be at risk — and only if they had any pending at the moment of failure.
Last save wins. The app does not currently warn about concurrent edits. Coordinate verbally to avoid this — typically only one judge enters a given result.
Likely they were added in Mock mode or imported manually outside AIDA. AIDA sync requires a startId; results for those athletes will not be sent to AIDA (no badge shown). They still appear in Results.
Open Results → if the banner says “Update token & resync” → tap it. Pending items will be re-sent with the new token. The app caches credentials on the server and refreshes the cache when you save Edit Event, so no app restart is needed.
The check-in is saved locally and the athlete card shows a small ⛔ “Offline” badge. As soon as the connection comes back, the check-in syncs to the server automatically (within 5 seconds). The athlete does not need to sign again. The signature drawing itself is not stored — it is only used for visual confirmation at the moment.
Common causes:
Yes. An Organizer or Main Judge can delete an event — swipe it in the event list, or use Edit Event → Delete. Deletion is permanent and removes all of that event’s data (athletes, results, logs, check-in status, protests). Generated protest PDFs in file storage are not auto-removed on full-event deletion; contact us if you need them purged.
This happens with old protests created before the current signature flow. An Organizer or Main Judge can open More → Protests → the protest → 🗑 and delete it. See Protests → Deleting a protest.
Your installed version is below the minimum the organizer set for live use. Update to the latest version from the App Store / Play Store, then reopen — the app re-checks and lets you through.
Yes, on the device(s) used for judging or check-in. The app does not run in the background. If you switch to another app the screen state is preserved, but offline auto-retry pauses until you reopen the app.
The app prevents the screen from auto-locking on every screen, so you can leave the device on a table without it going dark. The battery drains faster than normal because of this — keep the device plugged in for full-day events.
Push notifications themselves do not require the app to be open — iOS / Android deliver them even when the app is closed, as long as you have permitted notifications.
iPhone (iOS 15+) and Android (Android 9+). Tablet works but the layout is optimised for phone.
This means the app could not even store the result locally — usually because the athlete was loaded but the local list got out of sync. Tap Reload (Setup) and try again. The error message includes the athlete ID and current count for diagnosis.
The connectivity check pings the server. If the server is briefly unreachable (rare) or your network blocks Supabase URLs (unusual on hotel / public wifi), the indicator may stay red. Try saving a result anyway — if it succeeds, the indicator clears within a few seconds.
Check:
The OT calculation runs on save. If you reordered athletes and saw the wrong OTs, scroll up and tap Save again — the times should now match the order. If not, please contact us with a screenshot.
Open Users tab → find their name → assign a role (Judge / Staff / …). They need to be approved per event; approval does not carry between events.
Pull down to refresh. If still blank, switch to another tab and back. If the issue persists, please screenshot and contact us — this should not happen.
Sign in on the new phone and launch the app once. The new device’s push token replaces the old one in your account. The old phone will no longer receive notifications.
For full details on what data the App collects, how it is processed, and your rights, see the Privacy Policy.
Quick summary:
For bugs, questions, or feedback:
When reporting a problem, please include:
Last updated: 2026-06-02.