garden growth 0
BS-01 ▪ SN e1419d9

~/work/stagepass

StagePass

ROLE: Full-stackSTACK: Next.js / Drizzle / SolidityYEAR: 2026

01 ▪ THE PROBLEM

Event ticketing is rough on fans: tickets get duplicated, scalped and lost in email. StagePass is a two-sided ticketing product where organizers create events and sell tickets, and attendees buy with a normal card checkout, get a QR ticket, and get scanned in at the door.

Every ticket is an ERC-721 on Base Sepolia and every ownership change is an on-chain transfer. Attendees never see that: nobody connects a wallet or reads crypto language. The chain is there for the guarantees a plain database can't give: supply caps enforced at the ledger and an append-only ownership history.

02 ▪ ARCHITECTURE

Postgres is the source of truth for everything the UI renders. The chain is an ownership ledger written asynchronously by a worker through a job-queue table. The UI never waits on an RPC call, so chain latency or a failed RPC degrades the ledger's freshness, never the user's experience.

Turborepo monorepo: a Next.js app holds the storefront, organizer dashboard and API; a shared Drizzle package owns the schema and migrations; a shared zod package holds status enums, request schemas and wallet derivation. Stripe runs in test mode, and its webhooks drive the order state machine.

03 ▪ DECISIONS

Database-first, chain second. A ticket's status in Postgres is what the door trusts. The queue of chain jobs is how the database converges with the chain, and a failed mint refunds automatically instead of leaving a fan holding nothing.

Custodial wallets derived per user. Attendees never manage keys. Each user gets a wallet derived from a master mnemonic, so transfers are just in-app actions that happen to land on-chain.

Rotating QR secret. Each ticket carries its own random secret in the database, separate from the token id. The door scans the secret, not the chain, so a screenshot of an old ticket doesn't get anyone in.

Status: foundations merged (schema, auth, wallet derivation). Contracts and the checkout flow are in progress.

DISK BAY ▪ INSERT MEDIAREADY