The Club Handicap turns the data your club already keeps into a transparent, defensible Fair Play Score — so your committee can act on evidence instead of hunches, and settle the question without the politics.
Four CSVs in. A ranked review list and a committee PDF out. The decision stays human.
| Member | Index | FPS | Tier |
|---|---|---|---|
R. Mercer Beats index by 5.8 strokes in events | 8.4 | 41 | Priority Review |
T. Halloran 62% of rounds posted (8 missed pre-event) | 12.1 | 58 | Committee Review |
J. Okafor Competitive rounds outperform casual | 5.9 | 67 | Committee Review |
D. Whitlock Index rose +2.1 before member-guest | 15.3 | 78 | Monitor |
to go from raw exports to a ranked review list.
weighted into one score — each with a plain-English reason.
no black box; the committee sees every input and decides.
No integration project, no new software for members to learn. Export, upload, and let the engine do the sorting.
Members, rounds, index history, and tournaments — straight from the systems your club already runs. No new data entry.
Files land in a private, per-club storage folder. One club can never see another's data — enforced in the database, not just the UI.
The engine reduces each member's record to a transparent Fair Play Score and sorts the whole field by who most warrants a look.
Get a ranked review list on screen and a committee-ready PDF — every flag carries the number behind it. The humans still decide.
Each member's behavior is reduced to seven risk factors on a 0–100 scale, combined with weights you can see and tune. Fair Play Score = 100 − risk. Higher is cleaner.
Rounds played but never posted, with extra weight on missed posts right before an event.
Event scores landing materially better than the member's handicap index would predict.
Competitive rounds that consistently beat the same player's casual rounds.
Away or competitive scores running stronger than scores posted at home.
A handicap index drifting upward in the weeks just before an event.
An elevated rate of top-10% net finishes across the season's events.
Scores seven or more strokes better than index — a review trigger, never a verdict.
Row-level security in Postgres means one club physically cannot read another's rows. It's enforced in the database, not promised by the UI.
Uploads and committee PDFs live in a private bucket and are served only through short-lived signed links — never a public URL.
The scoring service holds no data of its own. It scores the files passed to it and forgets them — gated by a shared secret key.
Member names and handicap history are personal data, handled that way — with a simple data-processing agreement ready for your pilot.
Start a pilot with your own season's data. Talk to us once you're ready to run it every event.
Bring one season of data and see your own field scored.
Run integrity checks before every event, all season.
Multiple clubs under one governing body.
No. It surfaces records that warrant a human look and shows exactly why. Every flag is a reason code with the underlying number attached. Your committee makes every decision.
Four CSV exports you already have access to: a member list, posted rounds, index history, and tournament results. There's no integration project and no new data entry.
No. Tenant isolation is enforced by Postgres row-level security and a private, per-club storage bucket — at the database and file layers, not just the interface.
Yes. Every weight, threshold, and band lives in plain configuration. A committee can adjust how strict the score is without touching any logic.
The score down-weights members with few rounds or events, pulling them toward neutral. Confidence is shown alongside every result so nobody is flagged on a handful of cards.
Create a club account, upload a season, and get a review list your committee can actually defend — in an afternoon.
Start with your club