tired.
door · moonlight sessions · vol ix · fri apr 24 · 9pm
● online · sync ok
live · door a · cam rear
q 0 · buffer ok torch off

validation state machine

  1. decode
  2. event match
  3. status check
  4. entries left
  5. commit scan

every code is a signed token. decode fails → invalid. event mismatch → wrong event. status ∈ {refunded, transferred_out, canceled} → void. entries_used ≥ max_entries → already scanned. else → commit, decrement, vibrate + tone, log to device and queue for sync.

the door.

281 scanned · 19 left · 94%
281
in
19
left
6
dup
2
void
94% of 300 · 47 scans in last 10 min · p95 scan 420ms
maya chen · ga
t-2041 · 1/1 entries · door a
21:41:04
you · ios
jules park · vip · +2 guests
t-2039 · 3/3 entries · door a
21:40:51
you · ios
river ng · ga
t-2038 · 1/1 entries · door b
21:40:38
sam · ios
avery quinn · already in
t-2012 · 1/1 · scanned 21:12 door a
21:40:19
sam · ios
leo mendez · ga
t-2031 · 1/1 entries · door a
21:39:54
you · ios
code t-1907 · refunded
order refunded mar 30 · do not admit
21:39:28
you · ios
priya saul · ga · earlybird
t-1902 · 1/1 entries · door b
21:38:40
sam · ios
code t-8810 · wrong event
belongs to “late bird · warehouse set”
21:37:12
you · ios

offline & conflicts.

● online · sync real-time queue · 0 · last sync 0.4s ago
local queue · will upload on reconnect
— queue is empty —synced
multi-door conflict test
press simulate. two door phones try to scan t-2077 within 900ms while offline; the winner is decided on the server by earlier scanned_at, the loser gets a reversal push.
scan rules
· each ticket = signed token + max_entries (usually 1, vip bundles = 2–4)
· once entries_used ≥ max, further scans are logged as already scanned — door can still manually admit
· refunds, transfers out, and cancellations void the token immediately
· volunteer accounts can scan + check-in by name, can’t refund or see revenue
· offline scans queue locally and reconcile on next sync