User guide
HELP
& HOW-TO
Everything you need to use Run RTM — whether you're a runner checking a finish time, a race organizer setting up an event, or race-day staff running a check-in or finish-line station.
Runners & spectators
Race organizers
/admin console: set up categories, import participants, print bibs, manage devices and operators, and publish results.Race-day staff
Public site
For runners & spectators
Anyone can browse results — no sign-in is required. These are the public pages and what each one is for.
Home
/<event> or /Run RTM can host more than one race. Visiting / takes you to that event directly if there's only one live, or to a list of events to pick from once there's more than one. Every other public page below lives under that event's own /<event>/... address, so links you share always point back to the right race.
Once you're on an event's home page: if the race hasn't started, you'll see a countdown to each category's gun time; once it has, jump straight into the search box or a category leaderboard.
Search
/<event>/searchType a bib number or a name into the search box (on the home page or the search page itself) to find a runner. An exact bib number matches immediately; a name does a partial match against first and last name.
Leaderboard
/<event>/leaderboard/[category]Live standings for one category (e.g. 6K or 12K), ranked by finish time. Use the Overall / Male / Female tabs to switch views. Standings are recalculated automatically every time new finish scans are synced from race day, so refresh the page to see the latest order.
A leaderboard shows a runner's bib, name, finish time, and rank. If the event hasn't published official results yet, ranks are provisional and can still change.
Your result page
/<event>/r/[bib]Open this from search, the leaderboard, or the roster to see one runner's full card: name, bib, category, gender, team, status (Finished / DNF / Did Not Start / Disqualified / Registered), finish time, and overall / category / gender rank.
- ☆ Add to Favorites — saves this runner to your device so you can check back on them from that event's Favorites page without searching again.
- Share on Facebook — posts a link to this exact result page, so whoever clicks it lands on the same runner's card, however you got here yourself.
- A QR code on the card is the same signed code printed on that runner's bib — anyone can scan it to jump straight to this page.
- “Official Result” vs “Unofficial Result” tells you whether the race organizer has reviewed and published this result yet — see the FAQ below for what that means.
Scan a bib QR code
/b/[code]This is the link printed as a QR code on every runner's bib (and shown on their result card) — the same short link works no matter which event a bib belongs to. Scanning it with any phone camera verifies the code and redirects straight to that runner's result page. You don't need to type this URL yourself — it's only ever reached by scanning.
Full runner list
/<event>/rosterA paginated list of every registered participant, regardless of status or whether they've finished — unlike search or the leaderboard, nobody is filtered out here. Use the category pills at the top to narrow it down, and tap any name to open their result page.
Favorites
/<event>/favouritesRunners you've starred with ☆ Add to Favorites, listed together for quick re-checking during the race. This list lives only in your current browser (via local storage) — it isn't tied to an account, so it won't follow you to another device or browser, and clearing your browser data clears it too.
Admin console
For race organizers
Everything below lives at /admin and requires an admin sign-in. This is a quick tour of each screen in the order it appears in the admin navigation bar.
Signing in
/admin/loginSign in with the username and password your race organizer account was set up with. There's no self-service sign-up — an existing admin creates further admin accounts directly in the database, or shares credentials for a shared organizer login.
Once signed in, the admin nav bar (Dashboard, Participants, Import, Categories, Bibs & QR, Devices, Operators, Scans, Results, Logos, Account) stays across every admin page. Use Account in the top-right to change your password, and Sign out to end the session.
Dashboard
/adminThe race-day overview: how many runners are registered, checked in and finished; a per-category breakdown with gun times; which scanning devices are online; and a live feed of the most recent check-ins and finishes. Good page to keep open on race day.
Categories & gun times
/admin/categoriesEach category (e.g. 6K, 12K) has its own distance, gun (start) time, an optional cutoff, and a color used around the site. Gun time is a wall-clock time in the event's timezone and is the same for every runner in that category — there's no per-runner start.
Changing a gun time recomputes every finish time and ranking in that category immediately, since elapsed time = finish instant − gun time.
Import participants
/admin/importBulk-load your start list from a CSV or Excel file. Recognized columns (any order, flexible header names): bib, first_name, last_name (or a single name column), sex, age, category, team, shirt, email, phone.
- The
categoryvalue must match an existing category name exactly (create the category first if it's missing). - A bib already in the system is updated; a new bib is inserted.
- The form reports success or a specific validation error after upload.
Participants
/admin/participantsSearch, filter by category, and page through every participant. Add a runner one at a time here, or open an existing one to edit their name, bib, category, sex, age, team, and contact details.
The edit form shows a green confirmation banner on save, or a red one with the specific problem (e.g. a duplicate bib) — nothing is silently lost.
Bibs & QR codes
/admin/bibsEvery bib carries a signed QR code pointing at /b/<code>, which the operator app can also verify offline. From here you can:
- Regenerate all QR codes — re-signs every bib's QR (use this if bib numbers changed, or if the signing secret rotated). Old printed bibs referencing the old codes stop verifying, so reprint after doing this.
- Printable sheet per category — opens a print-ready page of bib+QR labels.
- Vendor CSV — a bib-printing-ready export, per category or for everyone.
Devices
/admin/devicesEach phone running the operator app is a “device” that must be enrolled before it can sync. Add a device with a label (e.g. “Finish line #1”) to generate a one-time enrollment code, which whoever is setting up that phone enters into the app.
- Reset clears the device's stored credentials and issues a fresh enrollment code — use this for a lost/replaced phone, since there's no self-service re-enroll.
- Active/inactive toggles whether the device is allowed to sync at all.
Operators
/admin/operatorsStaff accounts for the operator app — a name, a username, a PIN (at least 4 digits), and a role: checkin, finish, or admin. An operator can only use the station type that matches their role (an admin operator can use either). Saving with an existing username updates that operator instead of creating a duplicate.
Scans
/admin/scansA live feed of the most recent finishes and check-ins as they sync in from devices, each tagged with which device and operator recorded it. Use this to spot problems as they happen rather than waiting for results review.
- Record a finish manually for a runner the scanners missed.
- Void an incorrect finish — a runner can only have one active finish at a time, so correcting a mis-scan is void, then record the right one.
Results
/admin/resultsRace-day reconciliation and publishing, all in one place:
- Recompute standings — manually rebuilds ranks; normally happens automatically after every accepted finish batch, so you'll rarely need this.
- Publish as OFFICIAL / Revert to unofficial — the switch the public leaderboard and result pages read to show “Official Result” vs. provisional ranks.
- Checked in, no finish — likely DNFs; mark them directly from this list.
- Finished, no check-in — worth a manual look (finish scan without a matching check-in scan).
- Voided finishes — an audit log of corrected finish records.
Logos
/admin/logosUpload sponsor/partner logos (PNG, JPG, WebP or SVG, up to 5MB) with a label and sort order. These appear in the site footer/banner strip on the public pages, and take effect immediately without a server restart.
Account
/admin/accountChange your own admin password. You'll need your current password, plus a new one of at least 8 characters, entered twice.
Operator app
For race-day staff
Check-in and finish-line marshals use a companion Android app to scan bib QR codes. It's a separate download from the results site — runners and spectators don't need it.
Get the app
/downloadsDownload the app on the phone that will run the station — full install instructions, requirements (Android 8+, a camera, an enrollment code) and the current build's version are on the Downloads page. The rest of this section is the short version.
First run at a station
- 1Enroll the device. Enter the one-time enrollment code an admin generated for this device on the Devices page. This ties the phone to the event and only needs doing once per phone.
- 2Sign in. Enter the operator username and PIN an admin set up on the Operators page.
- 3Pick a station. Check-in, Finish line, or Lookup — only the stations matching your operator role are available. Check-in opens the runner list: tap CHECK IN next to a name. Finish line and Lookup open the camera: point it at the bib as runners pass.
How scanning works
Point the camera at a runner's bib. It reads the bib QR (or the same code shown on their result page) and, when there's no QR, the printed bib number itself. A number only counts if it matches a runner in this event, and the runner's name is shown so the operator can see it's right. Bib reading can be switched off in the app's Settings. You can also search by bib or name instead of scanning. At check-in, the default is just a runner list with a one-tap CHECK IN button, no camera needed.
Works without signal
Every scan is queued on the phone first and synced to the server in the background as soon as there's a connection — staff are never blocked waiting for signal. Retried syncs never double-count the same scan, so it's safe to let the app retry on its own.
Duplicate & already-finished scans
If a bib is scanned twice, or a finish is scanned for a runner who already has one, the app flags it rather than recording a second time — a runner can only have one active finish. If that's wrong (e.g. the first scan was a mistake), an admin corrects it from /admin/scans in the admin console (see Race Organizers above).
Lost or swapped phone
There's no self-service re-enrollment. Ask an admin to reset that device on the Devices page — this issues a fresh enrollment code for the replacement phone.
Troubleshooting
Frequently asked questions
Common questions from runners, spectators, and race-day staff.