Guild Kiosk — Self-Serve Check-in
Concept
A self-serve kiosk at the shop entrance where members check in by tapping their physical guild membership card (NFC) or entering their phone number. The kiosk runs on a Raspberry Pi 4 with a touchscreen monitor, always on, always welcoming.
The Experience
- Member walks into Dungeon Books
- Taps their guild card on the NFC reader — or types their phone number on the touchscreen
- Wizard animation plays on screen
- Screen shows: “Welcome back, [name]! Silver Adventurer — 1,500 pts ($15.00)”
- Check-in logged, visit tracked
- After a few seconds, screen returns to idle state
Idle State
When no one is checking in, the kiosk displays:
- Guild branding / animated wizard idle loop
- “Tap your guild card or enter your phone number”
- Current shop info (hours, upcoming event, etc.)
Check-in State
After a successful check-in:
- Wizard animation (celebration/welcome)
- Member name, tier badge, points balance with dollar value
- “See you at [next event name]!” if there’s an upcoming event
- Returns to idle after ~5 seconds
Not Found State
If the identifier isn’t recognized:
- Friendly message: “Not a member yet? Ask a Guildmaster!”
- Returns to idle after ~5 seconds
Duplicate Check-in
If they already checked in within the last 4 hours:
- Still shows the welcome screen (they should feel recognized)
- No new check-in record created (deduplication)
Hardware
| Component | Model | Status | Purpose |
|---|---|---|---|
| Computer | Raspberry Pi 4 (existing) | Have | Runs the kiosk app |
| Display | Touchscreen monitor (existing) | Have | Shows UI, phone number keypad |
| NFC reader | ACS WalletMate II (ACR1552U-MW) | Purchased | Reads NFC cards + Apple/Google Wallet passes |
| NFC cards | NTAG215 PVC cards | To order | Physical guild membership cards |
| Prototyping reader | Flipper Zero | Have | Testing NFC reads before WalletMate arrives |
NFC Reader — ACS WalletMate II
- Apple VAS & Google Smart Tap certified (ECP 1.0 & 2.0)
- ISO 14443 A&B, ISO 15693, ISO 18092, MIFARE (all variants), DESFire, FeliCa, Picopass, Topaz
- Reader/Writer, Keyboard Emulation, Card Emulation modes
- USB Type-A, CCID & PC/SC compliant (plug-and-play on Linux)
- Read distance up to 70mm, read/write speed up to 848 kbps
- Private key (LTPK) stored in secure element for wallet pass auth
- Chosen over ACR1252U because it’s a superset — reads plain NFC UIDs for v1, adds Apple/Google Wallet pass support for v2 without hardware swap
NFC Cards
- NTAG215, ISO 14443A, 13.56 MHz
- Each card has a unique factory UID — we read the UID, not write data to the card
- UID is stored on the Payload member record (
nfcCardUidfield) - 504 bytes storage (unused — identification is UID-based)
- Card personalization approach: matte black PVC cards, hand-lettered with gold Posca paint markers, sealed with UV resin coat — each card is a hand-crafted guild artifact
- Staff reads the card UID (via Flipper Zero or WalletMate) and associates it with the member in Payload at signup
Tech Stack (Kiosk App)
- Frontend: React (or plain HTML/JS for simplicity) running in Chromium kiosk mode
- Animation: Lottie or Rive for the wizard animations
- NFC: Web NFC API (Chrome on Pi supports it) or a node-nfc daemon that pushes events to the web app via WebSocket
- API: Calls
POST /api/check-inon the Guild server (same network or via Tailscale) - Auth: Kiosk authenticates as a dedicated Payload staff user
API
POST /api/check-in — already built in Guild.
// Request
{ "method": "nfc" | "phone", "identifier": "...", "shopId": 1 }
// Response (success)
{
"ok": true,
"member": { "name": "...", "tier": "Silver", "loyaltyPoints": 1500, "dollarValue": 15.00 },
"checkIn": { "id": 42, "duplicate": false }
}
// Response (not found)
{ "ok": false, "error": "member_not_found" }Deduplication
4-hour window. If a member checks in twice within 4 hours, the second tap still shows the welcome screen but doesn’t create a new record. This prevents accidental double-taps and in-and-out-and-back scenarios.
Future Enhancements
- Check-in bonus points (~5 pts per visit, scaled by tier multiplier)
- Apple/Google Wallet pass — WalletMate II already supports this; needs pass provisioning pipeline (Apple Developer PassKit entitlement + Google Smart Tap 2.0 integration)
- Event mode — during events, kiosk doubles as event check-in (logs to both CheckIns and event attendance)
- Leaderboard display — show top check-in streaks, Guild Seasons team scores
- Sound effects — satisfying tap/chime sound on successful check-in
Related
- membership-platform — core loyalty engine
- membership-program — brand concept (adventurers guild)
- guild-seasons — team competition (kiosk could show team standings)