Ballina Athletics Club

Cross-Country Handicap System
โ€” App Guide

Everything you need to know about using the app, from race day timing to checking the standings.

๐Ÿ“‹ App Guide ๐Ÿ“‹ Processor Guide ๐Ÿ“ Logic Reference
๐Ÿ“Š

Public Results Page Open โ€” no login

The results page is public and doesn't require a PIN. Anyone can view weekly results, current handicaps, season standings, and monthly prize winners.

๐Ÿ“‹ Weekly Results

Placings, points, and finish times for each week. Grouped by distance, gender, and age group.

๐Ÿ… Season Standings

Accumulated points per runner across all weeks. Updates immediately after each week is processed.

๐Ÿ• Current Handicaps

Each runner's current handicap for each distance. Updated after every race.

๐ŸŽ Monthly Prizes

Prize winners per month (blocks of 4 weeks). Each runner can only win once per season.

๐Ÿ’ก
This page can be embedded directly into the BAC WordPress website using an iframe โ€” no login or extra steps needed for visitors.

๐Ÿ™‹

Volunteer Portal Open โ€” no login

Members use this page to sign up as a volunteer for a race week, or to remove their signup if plans change. No PIN required โ€” it's designed to be shared directly with club members.

Signing up

  1. Choose the week Select the Sunday race week you want to help with. Past weeks are greyed out and can't be selected.
  2. Choose a task Pick the volunteer role from the Task dropdown โ€” Finish, Marshal, Numbers / Tokens, or General.
  3. Enter your name Type your full name as it appears in the club register.
  4. Save Tap Save Volunteer. Your signup is saved directly to the club's volunteer roster.

Cancelling a signup

If you can no longer volunteer, use the "Can't make it anymore?" section at the bottom of the page. Select the week and enter the name you signed up with, then tap Remove my signup.

Checking the roster

The current week's volunteer assignments are shown at the bottom of the page. The next three upcoming weeks are also shown so you can see where help is still needed.

๐Ÿ†
Volunteers earn 8 points towards the season standings for each week they help โ€” even if they don't run. Points are assigned to your preferred distance.

Volunteer roles

RoleWhat you do
FinishRecord finish order and confirm runners through the line.
MarshalGuide runners safely around the course and key turn points.
Numbers / TokensHand out tokens or record bib numbers at the finish.
GeneralFlexible help โ€” setup, pack-up, or wherever needed on the day.

โฑ๏ธ

Race-Day Stopwatch Open โ€” no login

A phone-friendly stopwatch for the finish line volunteer. Records a lap time for each finisher โ€” no bib entry needed here, that's the scribe's job on the paper sheet. Works offline.

Using it on race day

  1. Open the page on a phone The stopwatch auto-detects the current week number from the season start date. No setup needed.
  2. Start the timer Tap Start when the first runner sets off (or at the gun). The clock runs from zero.
  3. Tap LAP for each finisher Each tap records the clock time at that moment. One tap per finisher, in order. No bibs โ€” just times.
  4. Sync Once the race is done, tap Sync. The lap times push directly to the app for the coordinator to review.
โš ๏ธ
Use Reset All to clear between distances (1K, 3K, 6K). Each distance is a separate race โ€” don't carry laps over.
๐Ÿ’ก
If the Sync button fails (no internet at the course), use Download CSV or Copy to Clipboard as a backup. The times can be imported manually from the main app later.

๐Ÿ–ฅ๏ธ

Main App PIN required

The coordinator's hub for entering and processing weekly results. Requires the shared app PIN. Contains multiple tabs covering the full race-day workflow.

Sections inside the main app

Dashboard Season overview โ€” week count, participation summary, and quick links to the current week's data.
Timesheet Enter race results by typing bib numbers and clock finish times. Supports manual entry, single-file CSV import, two-file CSV import, and OCR scan input. The distance is assigned per runner here based on their bib.
Results Review processed results for any saved week โ€” placings, points, handicap adjustments, and flags (Wrong Hcp, Time Trial, DNF).
Standings Full season standings. Grouped by distance ร— gender ร— age group. Updates live after each save.
Runners Registered runner list with bibs, DOBs, distances, and handicaps. Shows PENDING status for runners awaiting a bib assignment.
Register Manually register a walk-up or late entrant. Syncs with the Google Form responses to pull in new members who filled in the registration form.
Archive Historical data from the 2025 season for reference.

Typical post-race workflow

  1. Enter results on the Timesheet Type bibs + clock times, import the stopwatch CSV, or โ€” if using the scan station โ€” review the scan data that was submitted directly after the race. Mark any Wrong Hcp or Time Trial entries.
  2. Click Review Results The app runs sanity checks โ€” duplicates, missing entries, suspicious times, age group issues. Fix anything flagged before proceeding.
  3. Click Confirm & Save Writes the week's results, updates each runner's handicap, and recalculates the standings. Creates a per-week backup tab automatically.

Data import options

MethodWhen to use
Manual entrySmall fields or corrections โ€” type bib and time directly.
Single-file CSVOne file with bib, distance, finish time columns. Most common import method.
Two-file CSVSeparate bibs file and times file โ€” useful when the scribe and timer work independently.
OCR ScannerPhoto of the handwritten race sheet โ€” the app reads it automatically. See OCR section below.
Scan stationAfter a scan station session โ€” tap Submit on the scan screen to push data directly to the app, or import the exported JSON file manually via the Timesheet import button.

๐Ÿ“ท

OCR Scanner PIN required

Upload a photo of the handwritten race sheet and the app will read it automatically using AI. Extracts bib numbers, distances, start times, finish times, and the handicap flag (normal, wrong hcp, or time trial).

  1. Take a clear photo of the sheet Good lighting, flat on a table, no shadows across the columns. The clearer the photo, the better the read.
  2. Upload on the OCR page Select the image file. The scanner sends it to the AI and returns a parsed table of results.
  3. Review the output Check the extracted values against the original sheet โ€” especially any ambiguous handwriting. Correct anything that looks wrong before importing.
  4. Import to the Timesheet Once reviewed, the OCR output feeds directly into the main app's Timesheet for processing.
โš ๏ธ
The paper sheet uses the opposite H/cap flag convention to the app โ€” on paper, Y means the runner used their correct handicap (normal), and N means wrong handicap. The OCR scanner translates this automatically โ€” you don't need to flip the values manually.

โš™๏ธ

Admin Panel Admin password

The admin panel uses a separate password from the main app PIN. It's for coordinator-level corrections and maintenance โ€” not needed for normal weekly processing.

โœ๏ธ Correct results

Fix an individual result after a week has been saved โ€” change a time, swap a bib, or adjust a flag.

๐Ÿ”„ Recalculate standings

Rebuild the full season standings from scratch after making corrections. Use this after any result change.

๐Ÿ‘Ÿ Register a runner

Manually add a walk-up entrant who didn't fill in the Google Form before race day.

๐Ÿท๏ธ Assign bibs

Assign bib numbers to PENDING runners who registered but didn't get an auto-assigned bib.

๐Ÿงน Clean blank rows

Remove empty rows from the Google Sheet that can sometimes appear after bulk operations.

๐Ÿ† Monthly prizes

Compute and publish the monthly prize winners for a given block of weeks.

โš ๏ธ
After correcting any result, always run Recalculate Standings โ€” the standings don't update automatically from admin edits.

๐Ÿ†

Scoring & Handicap Rules

How points, placings, and handicap adjustments work each week.

Points per position

PositionPoints
1st place20
2nd place15
3rd place10
4th place8
5th and beyond5
Volunteer (didn't run)8 (assigned to preferred distance)
๐Ÿ’ก
Placings are determined by clock finish time โ€” the earliest finisher in your group wins. Your run time (clock minus handicap) is only used to calculate your next handicap, not your placing.

Placing groups

Each runner competes within their distance ร— gender ร— age group. Age is calculated as the age you turn in the current calendar year โ€” not your age on race day.

Handicap adjustments

After each race, your handicap is updated based on how your run time compared to the target finish time for your distance (1K = 26:00, 3K = 38:00, 6K = 44:00).

How you ran vs targetHandicap change
Finished early (faster than target)Increased by seconds early, rounded up to nearest 10s
0โ€“60 seconds lateNo change
61โ€“120 seconds lateโˆ’10 seconds
More than 120 seconds lateโˆ’20 seconds

Special entry types

TypeEligible for placing?PointsHandicap adjusted?
Normal runnerYesPer positionYes
Wrong hcp โ€” started lateYesPer positionYes (adjusted formula)
Wrong hcp โ€” started earlyNo5Yes (adjusted formula)
Time TrialNo5Yes
Early runnerYesPer positionYes
Early runner + volunteerYesHigher of position points or 8Yes
DNFNo8 (if also volunteering)No

Monthly prizes

The season is divided into 6 monthly blocks of 4 weeks each. A prize winner is determined per age group ร— gender ร— distance for each block. Once a runner wins a monthly prize, they are excluded from winning again in future months that season.

๐Ÿ“ฑ

Parkrun-Style Scanning Live

The parkrun-style scanning system is live. It replaces manual scribing with QR bib labels and finish position tokens. Access it via the app's navigation menu.

How it works

  1. The race Runs as it does now, with staggered handicap starts.
  2. Finish funnel The timer records a time for each finishing position. Each runner collects a position token as they exit.
  3. Scan station A separate volunteer, away from the funnel, scans the runner's token (position) then their personal barcode (identity), and notes the start time, whether it was their correct handicap, and the distance.
  4. Early runners Members who do an early start get a manual entry at the scan station: barcode, start time, watch time, distance, and handicap flag. They are placed and scored like any other finisher.
  5. Volunteers and DNFs Recorded separately so they still earn their points.
  6. Results The app joins the timing and scan streams automatically and runs the handicap engine.
๐Ÿ’ก
Early runners who also volunteer get the higher of their position points or the volunteer floor of 8 โ€” so nobody loses out by helping.

QR labels โ€” setup (not race day)

QR bib labels are printed once per member when they join, or reprinted if a label is lost or damaged. They do not need to be reprinted each week. Position tokens are kept by the club and reused every race.

  1. Open ๐Ÿ–จ๏ธ Print QR Labels from the menu Generates bib labels for all registered runners and a full set of finish position tokens.
  2. Print and prepare Print the bib labels and laminate or attach them to each runner's bib card. Print one set of position tokens (1โ€“300) and laminate for reuse.

Using the scan station on race day

  1. Open ๐Ÿ“ฑ Scan Station from the menu The scan station volunteer opens this on their phone at the finish area. It works offline โ€” no internet required during scanning.
  2. Scan each finisher For each finisher: scan the position token first, then the runner's QR bib label. Early runners and DNFs are recorded in the Early and Vol/DNF tabs.
  3. Submit after the race Tap Submit to send all scan data directly to the app. Tap Export JSON as a failsafe backup โ€” if Submit fails, the JSON can be imported into the Timesheet manually.
  4. Coordinator reviews and saves Open the main app Timesheet, review the imported entries, click Review Results, resolve any flags, then Confirm & Save as normal.
โš ๏ธ
Always tap Export JSON as well as Submit on race day. If Submit succeeds and Export is also saved, you have two copies of the data.