Sajjad Mahessar Good Merch Group Free audit
~/sajjad $ cat projects/event-ticketing ← cd ../projects Systems

Event ticketing with member pricing

Live · Oct 2026Built in-house

An in-house ticketing system for a members’ club venue, built instead of paying a ticketing platform. Guests buy online, members get a discount checked against the real membership list, and a PDF ticket with a QR code arrives by email only once the payment has cleared. Door staff scan tickets in the staff iPhone app.

Type
Ticketing
Category
Systems
Built with
Supabase · Edge Functions · Stripe Checkout · Cloudflare Turnstile · Webhooks · SwiftUI · Resend
Project
10 of 37
FROM BASKET TO QR CODE CHOOSEheld at checkout MEMBER?number + surname PAYprice set on server SIGNEDwebhook PDF + QR BY EMAIL QR = LONG RANDOM CODE, NOT A TICKET NUMBER REFUND OR CHARGEBACK → QR GOES DEAD
No ticket exists until the payment provider confirms the money arrived

Why build it

Ticketing platforms take a cut of every ticket, and none of them know who the venue’s members are. So a member discount means a shared code that gets posted in a group chat by the end of the week.

Building it in-house meant member prices checked against the real membership list, tickets in the same database as the rest of the venue’s systems, and no ticketing platform taking a cut of each ticket.

Rules it enforces

  • Member price needs a valid member number and surname with an unexpired membership — up to five member-price tickets per member per event, so a member can bring guests.
  • At the door, the member’s card is scanned once and unlocks their whole order. A borrowed member number gets nobody in, because the real member has to be standing there with the card.
  • Each QR scans once; a second scan shows already used, with the time and who scanned it. A two-night weekend ticket admits once per night.
  • Free tickets, like an adult at a children’s party, can only be bought alongside a paid one.
  • Refunds only if the event is cancelled; a refunded or disputed payment voids the QR automatically.

How it’s secured

  • Prices are set on the server. Anything the browser says about money is ignored.
  • Tickets are created only when the payment provider’s signed webhook confirms payment, and capacity is held during checkout so an event can’t oversell.
  • Wrong member-number attempts are rate-limited, so numbers can’t be guessed until one works. Checkout runs through Stripe with 3D Secure, and the buying page sits behind Cloudflare Turnstile bot protection, so scripts can’t hammer it to hold seats or test stolen cards.
  • Scanning is staff-only, inside the staff app behind its existing login, reusing its camera scanner rather than building a second one.

Tested with real money

Before the first event went on sale, a real ticket was bought, the PDF arrived, the payment was refunded — and the door scanner showed TICKET CANCELLED on the refunded QR, with the right sound.

Built so outside promoters can sell through it later, with the venue keeping a commission on each ticket — the platform designed in from the start, switched on only when it’s needed.
Payments platform

QR ordering, rebuilt hardened for a second venue

Second venue, rebuilt to pass 49 attacks

SupabaseNetlify FunctionsStripebcrypt
No charge

I’ll find the money before you pay me anything.

Send me your software subscriptions and I’ll come back with what’s replaceable and what it’s worth — free, and yours to keep either way. How it works →

Contact

Want the same done to your cost base?

Open to operations, automation and technical operations roles — and to talking with anyone running a multi-site business who suspects they're paying for software they could own instead.