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?
Calculates placings for every runner by age group, gender, and distance — automatically.
Every runner's head start time updates after each race, using the same formula as the old DOS program.
Photographs of paper scribe sheets are read automatically — no more typing results in by hand.
Volunteers can tap entries on a phone as runners cross the line instead of writing on paper.
Members sign up for volunteer roles online. The roster is visible to committee at any time.
All results, handicaps, and member records are stored securely. Nothing depends on one laptop.
How long did it take?
To put 170 hours in perspective — that is more than four full working weeks, all done voluntarily.
How it was built
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
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
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
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
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
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
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