REV26.01
LOCSt. Petersburg, FL
UTC--:--
ROLETechnical Solutions Consultant
STATUSAVAILABLE — MAY 2026
All projects
/ 01 · CASE STUDY

CircuitSync.

A full-stack live timing platform built for grassroots and pro motorsport venues — from hardware serial input to TV-display leaderboards.

SvelteKit PocketBase Python Serial I/O WebSockets QR Reg
RoleFounder, full-stack & product
Timeline2024 — ongoing
StatusLive at multiple venues
HardwarePolaris Multi Event Timer
LIVE LEADERBOARD · RACE 03
P1 · #44 FRENCH01:23.418
P2 · #07 NGUYEN+0.082
P3 · #19 OKONKWO+0.347
P4 · #02 RODRIGUEZ+0.612
P5 · #88 CHEN+1.044
FASTEST LAP
01:23.4
#44 · LAP 17 OF 24
SESSION
Qualifying · 18 cars
14:32 remaining
Track: Sebring Short
/ PROBLEM

The problem.

Grassroots motorsport venues were stuck between two bad options: enterprise timing software priced for F1 budgets, or paper-and-spreadsheets.

Most venues already owned timing hardware — a Polaris Multi Event Timer or similar unit that spits lap data out a serial port — but the software ecosystem around it was either ancient Windows desktop apps or six-figure enterprise stacks. Race directors were re-keying lap times into Excel between sessions.

I'd been around enough race weekends to know what the actual workflow needed: registration that didn't require a clipboard, live scoring that pushed to a big TV in the announcer's booth, leaderboards spectators could pull up on their phones, and championship math that didn't require a spreadsheet at 11pm.

/ APPROACH

Approach.

One platform that owned the whole timing-day workflow, end to end. The opinionated decision: rather than build a thin UI over a third-party scoring backend, I'd own the data path from the serial port forward.

  • Front of house: SvelteKit for the public-facing site — registration, leaderboards, schedules. Fast, server-rendered, cheap to host.
  • Backend: PocketBase for the data layer. Single-binary, embeddable, real-time subscriptions out of the box — exactly what live scoring needs.
  • Hardware bridge: A small Python daemon that reads the Polaris serial stream, normalizes the timing records, and writes them into PocketBase. Decouples the timing hardware from the rest of the stack.
  • Displays: A separate venue-display route — designed for 1080p TV bezels, big enough to read from across the paddock, auto-rotates between leaderboard, fastest lap, and session info.
/ BUILD

What I built.

  • QR-code registration — drivers scan a code at the gate, fill out the form once, and their car number plus class are linked to their profile for the rest of the season.
  • Live timing & scoring with WebSocket-driven leaderboards. Lap data lands in PocketBase, every connected client updates in under a second.
  • Venue TV displays — full-bleed, auto-rotating screens designed for the announcer's booth and the spectator areas.
  • Announcer tooling — a control surface that lets the announcer flag laps, mark protests, and queue session changes without touching the timing daemon.
  • Email results delivery — PDF results emailed to every entrant automatically when the session is finalized.
  • Season championships — per-class point tables that aggregate across the season without a single spreadsheet.
  • Event management — race directors run the day from one dashboard: sessions, entry lists, classes, late entries.

I also handled the product side: venue outreach, demo days at real race weekends, and the customer conversations that surfaced what was actually missing.

/ RESULTS

Results.

<1s
Lap-to-leaderboard latency
0
Spreadsheets at 11pm
100%
Self-service driver registration

CircuitSync replaced the paper-and-spreadsheets workflow for the venues it's deployed at. Drivers register themselves, the announcer's booth has live data, and championship standings update themselves. The rebrand from TME Live Timing to CircuitSync happened as the product matured beyond a single hardware vendor — the name had to stop being about the hardware and start being about what it does.

/ LESSONS

What I learned.

Owning the data path from the serial cable to the public leaderboard meant I could ship features that purely UI-layer competitors couldn't — like firing the email results the instant a session is finalized, or having the announcer's flag propagate to the spectator phone view in the same second.

It also meant I had to learn the operational side: what a typical race weekend looks like, where the workflow breaks down at 2pm in 95-degree heat, what the announcer actually wants their screen to look like when there are 18 cars on track. The most valuable hours weren't in the code; they were in the paddock.

Next project → FourCorners All projects → Index