What is this app?

This website replaced a very old computer program that only ran on one committee member's personal laptop. If that laptop wasn't available, nothing worked and there was no backup.

Now everything lives on the internet. Any committee member can access it from any device. Results are published automatically after each race, and all records are safely stored in the cloud.

What does it do?

Works out who won

Calculates placings for every runner by age group, gender, and distance — automatically.

Keeps handicaps up to date

Every runner's head start time updates after each race, using the same formula as the old DOS program.

Reads handwritten sheets

Photographs of paper scribe sheets are read automatically — no more typing results in by hand.

Digital scribing on race day

Volunteers can tap entries on a phone as runners cross the line instead of writing on paper.

Volunteer roster

Members sign up for volunteer roles online. The roster is visible to committee at any time.

Automatic backups

All results, handicaps, and member records are stored securely. Nothing depends on one laptop.

How long did it take?

~170 hours of work
4 months to build
160+ updates and fixes
312 members in the system

To put 170 hours in perspective — that is more than four full working weeks, all done voluntarily.

How it was built

18hrs
Phase 1 — The foundations Feb – Mar 2026

Built the core website from scratch: member registration, handicap lookups, and the race day timesheet. Tested everything thoroughly before the season started.

Registration sync, Sheets backend, Vercel deploy, test mode

18hrs
Phase 2 — Race day tools March 2026

Added the stopwatch importer, handwriting scanner, and volunteer portal. Wrote a 108-step checklist to make sure everything worked correctly.

Stopwatch CSV, OCR scanner, volunteer portal, placing logic, bib pool

30hrs
Phase 3 — Getting the maths right April 2026

The hardest part. Reverse-engineered the old DOS program's handicap formula by comparing hundreds of results side by side until the app matched it at 95% accuracy. Also fixed two serious bugs where bib numbers were incorrectly overwritten.

DOS parity fix, 269 tests, wrong-hcp/TT/DNF logic, 2 production incidents resolved

28hrs
Phase 4 — Moving to a proper database Apr – May 2026

Moved all 312 member records and 12 weeks of results from a spreadsheet into a secure online database. The app became much faster and more reliable as a result.

Supabase schema, seed script, read layer swap, registration pipeline, parity harness

18hrs
Phase 5 — Digital scribing and UX May 2026

Designed and built the phone-based digital scribe to replace paper sheets on race day. Went through six rounds of design to make it simple enough for any volunteer to use.

6-round UX iteration, scribe Code brief, stopwatch sync, 16-item audit

13hrs
Phase 6 — Season results and public site June 2026

Published all results and standings online for members to see. Fixed a bug where only the first 1,000 race entries were showing. Added the contact form and monthly prize winners.

Results feed fixes, contact form, monthly prizes, BAC public website

7hrs
Phase 7 — AGM documentation June 2026

Used live data from the system to produce the Secretary's Report for the AGM. Converted the AGM transcript into formal minutes and added them to the club website.

Secretary's Report with live data pull, AGM minutes, committee minutes