Help & how to run a race
The one thing worth getting straight first: Category, Wave, Heat, and Laps are four different things. Not sure how to combine them for your race? The setup wizard (the "Set up my race" button on any event) asks a few questions and builds it for you.
The words
How a rider is scored and placed, e.g. "Men 40-49" or "Cat 3". It comes from your roster or sign-up form. A rider has exactly one, and it never changes during the race. Think: the result sheet.
A group of riders who START together. A wave can be a single category, several small categories ganged together, or a slice of one big category. Waves are optional, a small race can just use its categories as-is. Turn them on or off per event under Roster → Numbers & waves.
A timing session, the screen you open to actually time people. A heat holds one or more waves, and waves can hold categories with different lap counts. Run one heat for the whole field, or several (say one per round, or when the course can't hold everyone at once). On the Timing tab, each thing in the list is a heat.
How many times around a rider goes. Lap count is set on the CATEGORY, not the heat: juniors can race fewer laps than seniors in the very same start. Set them on the Roster tab → Laps. The timer finishes each rider when they hit their own category's count, so different-lap categories can share one gun and just trickle in over a slightly wider window. The number on a heat is only the fallback for categories you haven't set.
Score by Category · count Laps by category · start by Wave · time in a Heat. A small race never needs waves: its categories go straight to the timer as the groups you start and time.
How they fit together
Category = how you score. Wave = who starts together. Heat = what you run the clock on. In a simple race your categories ARE your waves ARE your one heat, you don't have to touch waves at all. Reach for waves only when you want to combine small categories onto one start, or split a 100-rider category into manageable groups.
Seeing who is in what
On the Roster tab, riders are grouped by category and each shows its wave. On the timer, riders are grouped by their start group (their wave, or their category if you are not using waves); the group header shows the name and a count.
The picture
Where everything lives
Laps hang off the category, so a heat can hold several categories that race different distances.
Event
└─ Heat a timing session you open and run (default laps: 3)
└─ Wave one gun / start group, its own clock
└─ Category ← laps are set HERE Jr Men: 2 · Sr Men: 4
└─ Rider optional personal overrideDifferent laps, one start
Send the longer-lap group first; the app finishes each rider at their own lap count, so they all converge at the line within a tidy window.
gun
0:00 ──▶ Sr Men ▸ ▸ ▸ ▸ (4 laps) done ~0:48
0:04 ──▶ Jr Men ▸ ▸ ▸ (3 laps) done ~0:46
▲ everyone converges at the lineOne heat. Two waves (two guns). Laps set per category. No separate "extra-lap heat" needed.
A second heat is only for when you genuinely can't have everyone on course at once (too many riders for the loop). Everything else, different laps, staggered starts, combined categories, lives inside one heat as waves plus per-category laps.
Before the race
Import your roster
Roster tab → Import roster. Paste a CSV or copy cells straight out of Excel / Google Sheets (tabs are handled), or pull a BikeReg "Who's Registered" link or promoter login. Headers like First, Last, Email, Team, Category, Wave, Bib are matched automatically. Or build a sign-up form and let entries land on the roster themselves.
Number bibs & build waves
Roster → Numbers & waves. Auto-number by category or wave (one number per rider even if they entered twice). Combine small categories into one wave, or split a big one into evenly-sized waves with a live preview before you apply.
Set laps per category
Roster → Laps. Give each category its own lap count, e.g. juniors 2, seniors 4, masters 50+ back down to 3. The timer finishes each rider when they hit their own count, so categories with different laps can all share one gun. Categories you don't set fall back to the heat's default number.
Or let the wizard do it
On the event page, "Set up my race" walks you through a few questions (same or different laps? one gun or staggered? does everyone fit on course?) and then builds the laps, start groups, and heats for you. You can change anything afterward.
Check-in
The ✓ Check-in tab is your start-line list: big numbers, tap a rider to mark them present, with a live "X / Y present" count and a "Not in" filter to see who is still missing. Type or say a number to spotlight a called-out rider. Separate from adding riders to a heat.
During the race
Heats & start styles
Open a heat (Timing tab) to time it. Before it starts, pick a Start style: Mass start (everyone, or each wave, on one gun), Time trial — interval (riders sent every X seconds), or Time trial — tap to start (a 5s countdown per rider). These lock once the race starts so nothing can reset a running clock.
Adding riders to a heat
On the timer, "Add riders" gives a dropdown of roster riders not already in (or add a whole wave, or everyone). Added the wrong one? An Undo appears for about ten seconds. For someone not on the roster, use "add a walk-up".
"Who's coming next"
Set the Show control to "Coming now" or "Due next". Lapdog predicts each rider's next crossing from their own lap times (average lap added to when they last crossed) and floats whoever is due to the top. Needs at least one completed lap; riders still on lap 1 show "lap 1".
Timekeeper link
Hand a helper a phone to tap riders as they FINISH each lap. Several timekeepers can tap at once and their taps merge into one live result. One click on the timer generates AND copies the link; it is the same stable link every time (one per heat), so share it once.
Spotter link
Hand someone up-course a phone to tap riders as they are APPROACHING the line. The timekeepers' phones buzz and the rider appears under "Spotted — inbound", so nobody is caught off guard in a bunch finish. The flag clears itself when they cross. Same one-click, one-stable-link-per-heat as the timekeeper link.
DNF / DNS / DSQ
On a heat's live-results table, set a rider to DNF (did not finish), DNS (did not start) or DSQ (disqualified); they drop out of the ranking. A heat finishes itself automatically once every rider is either done or in one of these states (you can still hit Finish early or Reopen).
Around the race
Public results & who's-racing
Every event has a public link (shown on the event page, and on every sign-up form). Before the race it is the start list / who's-registered; during and after it is live results, filterable by heat, category, wave and sex. It auto-refreshes, no login needed.
Try it out first
From the dashboard, "Try a demo race" spins up your own throwaway event, Small (24 riders) or Big (60), dropped straight into the timer. To practise importing, the Roster → Import → Paste CSV screen has "Small / Large" sample-roster buttons that drop a registration-style CSV in for you to import, number, and wave up.
Quick tips
- ▸New to this? "Set up my race" on the event page asks a few questions and builds your laps, starts, and heats in one go.
- ▸Different laps per category (juniors short, seniors long): set them on Roster → Laps, then run them in one heat. Send the long-lap group first; the app finishes each rider at their own count.
- ▸Mass start: build your waves (optional), open a heat, "Add all from roster" or add one wave, hit Start, then tap each rider as they cross until they reach their lap count.
- ▸Time trial: set the heat's Start style to interval or tap to start, set the order (by bib, name, or previous times), then send the field.
- ▸Big field: turn on a Spotter and switch the list to "Coming now" so whoever is about to arrive is always at the top.
- ▸Hand out timekeeper links so each helper times their own wave; every tap merges into one leaderboard.
- ▸Share the public results link so racers and spectators can watch live and see who is registered.
Lapdog