2026-04-08

Summary

Jimmy Lee (mana.inc) liked the kiosk demo post on Twitter. Members board game night tonight — demoing the kiosk feature to members. Early fundraising signal-building.

Notes

  • Jimmy’s like on the kiosk post is encouraging; mana.inc is top VC pick
  • Not ready to pitch yet — need 2-3 businesses on the platform first
  • Fundraising math: pitch 30 businesses, 10% conversion (3 sign-ups) = high signal for investors
  • Set up Raspberry Pi 4 Model B as dedicated kiosk hardware — flashed Raspberry Pi OS Bookworm 64-bit, configured Chromium kiosk mode, portrait screen rotation, Tailscale for remote access, SSH key auth (password disabled), overlay filesystem for SD card protection
  • Remote kiosk refresh: ssh panat@dungeonbooks "DISPLAY=:0 wtype -M ctrl -P r -p r"
  • Old Pi was running Raspbian 10 (Buster) with Chromium 88 — too old for Tailwind v4 CSS
  • Created “First Assembly” buff (3x XP, 4 hours) for the inaugural member hangout
  • Copilot review on #81 suggested centralizing NFC normalization — moved .toUpperCase() into processCheckIn instead of duplicating at each call site

Sales strategy notes (from watching Kunal / Jordan Belfort)

Kunal’s approach: jump straight into a demo. Prime the customer by saying “I’m going to show you this, and at the end you tell me what you think and if you want to move forward.” This forces a decision frame — the prospect is primed to make a choice rather than passively observe. Relates to Jordan Belfort’s “straight line sales” — rooted in psychology of commitment.

PRs shipped

  • #70 — staff award endpoint + CLI — POST /api/award for staff to give points/XP to members, plus interactive CLI for batch awards. Built for the April 9 member hangout since Hi.Events isn’t set up yet.
  • #72 — kiosk BBS terminal redesign — full redesign with Flare theme, weather (PirateWeather), Hi.Events upcoming events, leaderboard, supporters, guild activity, bracket-corner cards, glitch-text check-in animation, responsive portrait/landscape layout.
  • #74 — guard BETTER_AUTH_SECRET during build — prevents Better Auth from falling back to insecure default secret during Next.js build phase. Closes #71.
  • #75 — member settings page with kiosk privacy controls — privacy.showOnKiosk opt-in field, settings page for nickname/phone/class/birthday/visibility, wired kiosk leaderboard and supporters with real privacy-filtered data. Partially addresses #46.
  • #81 — normalize NFC card UIDs to uppercase — fixes case mismatch across platforms (macOS lowercase, Windows uppercase) with beforeValidate hook.
  • #82 — kiosk layout tweaks and optimistic visits count — reordered portrait layout, date before time in header, full event cards with images, optimistic visits increment after check-in.

Issues opened

  • #73 — configure S3 storage adapter for media uploads — Railway filesystem is ephemeral, need Railway Storage Buckets for QR codes and future uploads.
  • #76 — change password from settings
  • #77 — Discord link/unlink in settings
  • #78 — change email from settings
  • #79 — phone number verification for check-in
  • #80 — kiosk leaderboard should rank by XP, not loyalty points

Evening session — leaderboard and privacy rework

PRs opened

  • #83 — fix(kiosk): rank leaderboard by XP with class and level — sort by XP instead of spendable points, show “Lv 6 Rogue” on each entry, XP column header, cap nickname to 20 chars. Closes #80.
  • #84 — feat: guild hall leaderboard and supporters with privacy rework (stacked on #83) — real leaderboard + supporters on Guild Hall page replacing Hall of Heroes placeholder, privacy model reworked so everyone appears (toggle controls nickname visibility only, anonymous = “Lv 6 Rogue”), rename showOnKioskshowNickname with migration, query lowest-ranked class as fallback on guild page, level + class shown on supporters too.

Design decisions

  • “Lv” not “Lvl” — FF9-style “Lv 6 Rogue” over D&D-style “Lvl”. Final Fantasy has wider appeal; BECMI inspiration is in the XP tables, not the UI chrome.
  • Privacy model: show everyone, hide nickname — members always appear on leaderboard/supporters as their level + class. The toggle only controls whether their nickname is visible. “Who is this Lv 35 Rogue?” is the hook.
  • Freelancer as fallback class — lowest sortOrder class from seed data. Guild page queries it dynamically; kiosk/components hardcode “Freelancer” for now.
  • Nickname capped at 20 characters — enforced at Payload collection level (maxLength) and HTML input (maxLength attribute). MMO-style limit.

Withfriends — closing the loop with James Steinberg

Messaged James Steinberg on Twitter DM to let him know the cofounder work trial with Kunal ended (as of March 31). Kept it brief — mentioned ethical/values misalignment without details, and noted that none of Kunal’s former cofounders or collaborators could give a straight answer about working with him. No ask, just transparency. James never responded to the March 21 due diligence message, so this was a low-pressure close-the-loop follow-up.

James responded — said he never actually worked with Kunal and took over Pools after the split, so he wouldn’t have been helpful anyway. This clarifies the relationship: James joined Joe’s side post-split, not a former Kunal collaborator. Joe (pools.events / Better Network, Inc.) remains the only person who’d have direct experience working with Kunal.

Action Items

  • Demo kiosk feature at tonight’s board game night
  • Gauge member reactions as early signal
  • Merge #83 and #84 after CI passes
  • Set up kiosk refresh alias on Mac (kiosk-refresh → SSH + wtype Ctrl+R)
  • Configure Hi.Events webhook integration (attendance tracking for events like tonight)
  • Discord OIDC + role management (#77 and beyond)
  • Start thinking about OAuth into self-hosted apps (Nextcloud, etc.)