2026-03-30

Call with Leonard Scheidemantel (Sequa)

Caught up with Leonard, founder of Sequa. Reached out to him earlier about customer service pain points for Withfriends.

Sequa status

Not going well. They had a good product and competitors raised a strong seed, but cofounder breakups derailed everything — team is splitting up. Leonard has investor meetings lined up but the company is winding down. He’s possibly exploring customer service next, pivoting his context engine from engineering teams to customer service.

Memberships/loyalty/personalization platform

Walked Leonard through the platform vision. He independently derived the cross-shop customer intelligence concept — walk into a bookstore and the owner knows you’re a regular at the record store next door. He doesn’t know retail but validated the idea instantly.

Go-to-market signal

  • Canvass ~30 shops that use Square, get 3 to sign up — that’s enough traction to raise
  • The ideal shop profile: already hosting events or wants to run events
  • Leonard also identified the space-booking angle — customers wanting to book shop space for their own events. Told him that’s basically our model: people pay to use our space for book clubs / D&D games and we handle the logistics

Fundraising advice

  • A 500K raise is realistic
  • Prioritize runway
  • We both align on bootstrapping and solo founder mentality
  • Leonard offered to be a resource for startup/fundraising advice going forward

Web3 / decentralization

Both share a strong distaste for new-wave web3 — scummy cryptobros who only care about money. We’re both more interested in ownership and decentralization as principles.

Pitched the idea that we’re decentralizing commercial relationships. Told him about mana-inc and how we plan to pitch to them. Leonard is open to reviewing the Mana application — he has experience working with web3 founders/investors.


Guild — big build session

Massive session. Hi.Events integration, Square security fix, NFC check-in proof of concept, staging environment, prod deployment, and first real member signup with live purchase data.

Hi.Events webhook integration

  • PR #8 — merged
  • Investigated Hi.Events webhook system by reading their open source repo — docs were too bare
  • Webhook handler for checkin.created — matches attendee email to Guild member, creates check-in with 4-hour dedup
  • Processing logic is platform-agnostic (event-check-in.ts) so future event platforms (Eventbrite, Luma, etc.) just need a new route adapter
  • Added externalEventId to check-ins — tracks which Hi.Events event a check-in belongs to, enables per-event dedup so same member can attend multiple events in one day
  • Removed hiEventsAttendeeId from Members — Hi.Events creates a new attendee ID per event registration, so it’s not a stable identifier. Email is the real join key
  • Signature verification is optional for now — Hi.Events cloud doesn’t expose the signing secret. Filed issue #1136
  • Also filed issue #1135 — duplicating a duplicated event returns 500 (Carrie ran into this)
  • Tested E2E on prod: registered for event, checked in, verified check-in records with correct externalEventId for multiple events
  • Docs: integration plan, testing guide

Square webhook security fix

  • PR #9 — merged
  • Added JSON parse guard with proper TypeScript typing
  • Found critical bug: WebhooksHelper.verifySignature() is async but was called without await — signature verification was never actually running. Any request got through regardless of signature. Fixed with one await
  • Verified on prod: bad signatures now properly return 401

NFC check-in

  • On branch feat/nfc-checkin (not merged, waiting for WalletMate II reader in ~3 days)
  • Used Flipper Zero to read NTAG215 card UID
  • Tested full flow: card UID → /api/check-in → member lookup → check-in record created on prod
  • Added UID normalization to uppercase (NFC standard is uppercase hex)
  • Decided on uppercase hex format with no separators (e.g. 0450CF01635713)

Purchase line items in activity feed

  • Backfill was missing line items — Square orders.search() response includes lineItems but we weren’t extracting them (b4ead23)
  • Activity feed now shows item names instead of just dollar amounts (b03eabe)
  • Real data looks great: “Purchase — Blessed Is the Rot by Sheri Singerling (Paperback)” instead of “Purchase — $12.78”

Infrastructure

  • Staging environment — set up on Railway with separate Postgres, seeded with org/shop/tiers, webhook endpoints configured for Stripe/Square/Hi.Events sandbox
  • Database migrations — created initial migration file (3c27001), ran against staging. Future schema changes will use pnpm payload migrate
  • Prod deployment — live at dungeon.club with production Stripe/Square keys, new PAYLOAD_SECRET
  • Promotion codes — enabled allow_promotion_codes on Stripe Checkout (a6f9935)
  • Auto-deploy: staging auto-deploys on push to main, prod is manual deploy from Railway dashboard

First real member signup

  • Signed up on prod with Mithril tier + 100% off promo code
  • Backfill pulled 12 real Square purchases with line items — 107 points at 1x base rate
  • Activity feed shows full purchase history with item names
  • Decision: backfill always uses 1x multiplier regardless of tier to prevent gaming

Competitive research

  • Researched INFI (self-ordering kiosk company, used by UniUni boba shop nearby)
  • $29.99/month per kiosk, POS-agnostic, basic loyalty
  • They solve double-entry but their kiosk is the product. Guild’s kiosk is one surface of a larger membership platform
  • Docs: research notes

Decisions made

  • Customer flow: Square POS first → Guild → Stripe. Guild doesn’t create Square customers
  • Hi.Events cloud vs self-host: staying on cloud for now. Platform fees are minimal (0.75% + $0.40), saves hosting headaches. Self-host when we need kiosk → Hi.Events API or when fees matter at scale
  • dungeon.club as the member-facing domain, separate from dungeonbooks.com (retail)
  • Staging: Railway URL only, no custom DNS. Custom domains are for prod

Backlog items documented

  • Check-in points — daily check-in 5pts, free event 10pts, paid event 0pts
  • Auto-apply discounts — Square customer groups + catalog discounts, Hi.Events promo codes per tier
  • Kiosk UI — main blocker for in-store experience, planning to be a route group (kiosk) in the existing Next.js app
  • WithFriends migration — 4 members, manual process, not blocking go-live