Weekend Golf Warrior
Live scoring, matchups and side games for a golf trip, built for phones with one bar of signal.
- Role
- Sole engineer
- Year
- 2026
- Stack
- React 19, Vite, Firebase Firestore, Auth and Storage, Security rules, Firebase Emulator Suite, Vitest, Vercel
- simulated phones play a full weekend against the real rulesCounted in the repo · source
- 19
- security-rule tests asserting allows and deniesCounted in the repo · source
- 100
- unit test cases across 37 filesCounted in the repo · source
- 590
The problem
It was built for a 19-player, three-round weekend where everyone scores on their own phone on a course with bad signal. Every phone is a writer, so lost updates, stale app versions and a reload in a dead zone are the normal case.
What I built
- 01A 19-phone weekend simulator: each phone is a separate process running the real client data layer against the real security rules through a proxy that adds latency and dead zones.
- 02A rollout test that builds the previous production client and runs old and new phones on the same weekend to prove the stale-build guard.
- 03Scores written one field per hole with merge, which ended lost updates between scorers in the same group and queues offline.
- 04A server-side stale-build guard: the rules only accept a change to the old score arrays if the write also stamps a revision only the current build knows.
- 05A new-version banner that checks for signal and pre-downloads the bundle before a user-initiated reload, so a reload never happens mid-hole.
- 06All money math in one pure module, so the leaderboard and the ceremony can never disagree and settlement always sums to zero.
More screens






Decisions
Test the network, not just the code
Unit tests cannot show what happens when a phone holds bytes in a dead zone. The simulator can, so it runs the real client through a faulty network.
One handicap module
Stroke math had been copied into 27 call sites that truncated indexes and gave plus handicaps 18 extra strokes. It now lives in one tested place.
Not claimed
- Money features only track side games. The app never holds or moves funds.
- AI features are off in production, and there is no App Store release yet.
- Every screen here is a simulated weekend on the Firebase emulator running the real security rules. The players and courses are the simulator's.