A national governing body, running on spreadsheets. We replaced the lot with a single platform (public site, member portal, admin back-office) shipped for the 2026 season opener.
At launch · 2026 season
Every Monday morning, TrotBritain staff spent three or four hours typing the weekend's race results into a spreadsheet, recalculating ratings by hand, cross-checking championship points across six leaderboards, then emailing the updates to the web team to publish.
The master spreadsheet was the source of truth, and the single point of failure. It couldn't be opened on a phone at a race meeting. It had no audit trail. Two people editing it at once meant a lost afternoon.
Around it sat a separate WordPress site, manual licence applications by email, payments by bank transfer, flu vaccination dates tracked nowhere in particular, and championship tables that lagged the actual standings by a week.
The brief: replace all of it with one platform. Retire the spreadsheet permanently. Cut Monday morning to under an hour.
Three top-line targets:
One early call shaped everything: one app, one database, one login.
The old setup had a WordPress public site and a staff portal as separate systems with separate accounts. We merged them into a single Next.js application backed by Supabase Postgres.
Staff log in at the same domain the public sees. When they finalise a race, the data is already on the public site by the time the database transaction commits.
That decision killed an entire class of integration bugs (sync drift, stale caches, divergent schemas) before they could exist.
It also meant Postgres row-level security became the only authorisation model we needed, instead of duplicating permission logic across two stacks. RLS on every table; the service-role admin client used only where bypass is genuinely required.
The Monday morning bottleneck. Every horse in a race appears on a single page with two fields per row: finishing position and finishing time. Everything else (owner, trainer, driver, current rating, prize money) is pre-populated from the race card.
Clicking Finalise Race runs a single transaction that distributes prize money, updates lifetime earnings, recalculates each horse's Sulky or Monte rating, awards points across all six championships, increments seasonal run counts, and publishes the results to the public site. One click. No spreadsheets. Designed for under two minutes a race.
A Ratings Free toggle excludes individual horses from rating changes for promotional or invitational races, matching how the sport actually operates.
British trotting runs two disciplines (Sulky and Monte). Every horse holds two independent ratings, one for each.
The ratings start equal at season open and diverge through the year as horses race. The system applies the right formula to the right race type automatically; staff never pick a rating manually.
Qualifier races award no points.
End-of-season is one click: rating deduction across every horse, seasonal run counts reset, 50% of driver points carried forward, new season activated.
Licence applications happen on the website end-to-end. Application form, Stripe checkout, admin approval, sequential licence-number generation, and a one-click photo ID card PDF (@react-pdf/renderer) ready to print. Renewals and additional applications reuse the existing photo and pre-fill personal details. Driver silks replace the default icon on driver ID cards.
Licence types (prices, categories, horse-access flags) live in a database table the admin can edit at any time without a deploy. iPhone HEIC photo uploads convert to JPEG client-side via heic2any so they work in every browser.
Owners buy race-entry credits in Stripe-driven packages (5/3/1 runs at £500/£300/£100). Visiting international horses pay £250 to register and create a pending run-purchase on approval. Stripe promotion codes are enabled on every checkout. Bank details captured on each run purchase are editable inline by admin.
Every public page reads from the same live database the admins write to. Results browser, race cards, horse / driver / owner / trainer profiles with full history tables and season statistics. Crucially, historical results record the owner, trainer and driver as they were at the time of the race, so a horse changing hands doesn't rewrite history.
Licensed members get their own self-service area: apply for or renew a licence, download their photo ID, manage their horses, upload flu-vac certificates, request transfers of ownership or training, buy run packages, and enter races with a preferred driver (or a "TBC" option, for when the booking isn't done yet).
British Horseracing Authority rules say a horse with an expired flu vaccination cannot race. Under the old setup, that was enforced by a member of staff remembering. We needed it built into the platform, and built into it everywhere, not just on one form.
The fix is a three-layer defence:
Three layers because each catches a different failure mode. The UI prevents accidents, the server prevents tampering, and the admin gate catches drift.
The reactive side is matched by an active one: a cron job sends reminder emails to owners and staff at 14, 7, 1 and 0 days before expiry. Owners and trainers can upload new flu-vac certificates from their dashboard for admin review. The platform doesn't just block expired horses; it works to keep them eligible.
Phase 2 (the full platform replacing the spreadsheets) opens for the 2026 season. The 1st March licence release ran on the new system, and the platform is live and operational as the season begins.
What's true on day one:
The launch numbers above are the proof of shipped. The proof of working comes from a full season of operational use. We'll be tracking, and updating this page in autumn 2026 with:
The bespoke system that Calm Ventures have built for us has revolutionised our sport and brought it from working on spreadsheets to a modernised database.
Joseph Ripley, TrotBritain
What was a stack of spreadsheets, email chains and manual recalculations is now a single live platform, built to brief and shipped on time, open for business as the 2026 season begins. We'll update this page with season-one results in autumn.
Published April 2026 · At launch
@react-pdf/renderer, heic2any
One-click photo ID cards and horse-history exports; iPhone HEIC uploads convert client-side so they work in every browser.
We build bespoke software for businesses that need more than off-the-shelf, from governing-body platforms to scheduling SaaS. Let's talk.
Book a Consultation See More Work