Standings
Confirmed points only — anything still waiting on an organizer is shown separately and doesn't count yet. Tap a name to see how their total was built.
Record points
Waiting to be confirmed
Anything a member recorded about themselves lands here first. Confirming makes it count toward the standings; declining keeps the row for the record but scores it zero.
Bring in attendance from meetings
Reads the meeting app's archived history and turns each meeting's check-ins into confirmed ledger rows — the highest-volume points, without retyping a season of headcounts.
Attendance only. Club competition placements aren't pulled in here: archived beers record the brewer as free text, not a roster id, so turning "Dave S." and "Dave Smith" into one person needs a name-matching step that doesn't exist yet. Placements stay a manual entry (
Safe to run repeatedly — each meeting is only ever added once, and re-running after someone fixes a typo in an old meeting picks up just that change.
Attendance only. Club competition placements aren't pulled in here: archived beers record the brewer as free text, not a roster id, so turning "Dave S." and "Dave Smith" into one person needs a name-matching step that doesn't exist yet. Placements stay a manual entry (
Record points \u2192 Placed in a club competition) until that's built.
Safe to run repeatedly — each meeting is only ever added once, and re-running after someone fixes a typo in an old meeting picks up just that change.
Every entry
The whole ledger, newest first. Totals on the standings board are added up from these rows — there's no stored total anywhere, so this is always the full answer to "why do I have that many points?"
Ad hoc participants
People who added themselves without being on the club roster (Record Points → Who → "Someone not on the roster…"). They score normally and show up in the ledger above tagged (ad hoc) — click that tag on any row to jump straight to that person here. Once someone's added to the real roster in the meeting app, merge them below — every point they've already earned moves over to their new roster identity in one step. This never touches the roster itself; that only ever happens in meeting.html → 👥 Roster.
Events
What a member can record, and what it's worth — every one of these, including the five your club started with, is fully editable and deletable. Nothing here is special beyond having been a starting point instead of something you added yourself. Changing a point value re-scores every entry that used it, past and future, because points are worked out from these numbers rather than copied onto each row — so "coming to a meeting is worth 2 now" means it always was, this season, not that some entries are still worth 1. Needs note requires a reason when recording it (use this for anything where "which one" matters, like an outside competition). Self-serve lets a member record it about themselves, subject to organizer confirmation; leave it off for anything only an organizer should log. Retiring hides an event from Record Points without touching anything already recorded under it; Delete removes it outright — entries already using it keep their points either way (see the Ledger, which always explains itself from real rows, never a total that could silently drift).
Season
Which year the standings board shows by default. Entries are filed by when the thing happened, not when it was typed in, so a December meeting recorded in January still counts to the right season.
Appearance
What this points competition is called, and the same six looks used across the club's other apps, so this board can match whatever's already on the projector.
Organizer PIN
Separate from the meeting's organizer PIN on purpose — that one gets passed around a room and changed most meetings, while this guards a whole season's ledger. Like every PIN in this suite it stops the wrong button being pressed, not a determined person: anyone with this page's address can still write to the database directly.
If you lose it there's no way back in from this page. Clear
If you lose it there's no way back in from this page. Clear
standings/config/pinHash in the Firebase console and this page unlocks freely again.
Where the names come from
⚕️ Setup Doctor
Checks your Firebase connection, sign-in, and PIN setup in plain terms before you rely on them for a season.
Clear a season
Removes every ledger row for one season — confirmed, pending, and declined alike. For wiping out test data or a training run, not for correcting a real mistake (use Decline or an adjustment for that instead — see the Ledger and Standings tabs). Point values, the PIN, and every other season are untouched. Any cleared row that came from Bring In Meeting Attendance becomes eligible to bring in again, next time.