← Back to work

full-stack

Burratix

Ethical Australian music ticketing — no scalpers, no hidden fees, artists get 90%

Australian music fans are gouged by Ticketmaster and Moshtix — hidden fees, scalper markups, and artists taking home a fraction of face value. No platform existed that put artists and fans first.

Full-stack ticketing platform built on Next.js 15 + Supabase + Stripe. End-to-end purchase flow with JWT-signed QR tickets, one-scan invalidation, and anti-scalping by design. Pay Your Way instalment system via Stripe Subscription Schedules — 25% deposit, remainder spread to event date. Magic-link + phone OTP auth. Multi-tenant schema for organisers, venues, and fans.

How It Works

Fair-trade ticketing for Australian live music, where the artist keeps 90% and scalping is designed out in code.

Booking a gig in Australia is a bad deal for everyone but the middleman. Independent artists and promoters lose 15 to 30 percent of the gate to platform and booking fees. Fans get scalped, with tickets to the shows they want resold at three to five times face value by bots running thousands of throwaway accounts. Ticketek, Moshtix and Eventbrite treat both as the cost of doing business. I built Burratix to fix both at once. It's a production ticketing platform for the Australian live-music market, and it's live at burratix.com.

It's a real two-sided marketplace with two complete journeys. A fan signs in with no password, browses live events, and buys a ticket three ways. On payment they get a signed, per-seat QR ticket and a dashboard that tracks their orders, their lay-by progress, and the mates they've brought along. On the other side, any signed-in user can become a seller. They connect a bank through Stripe, create an event, publish it, and start selling. The money splits on its own and pays straight out.

The fairness is in the code, not the marketing. Every ticket splits the same way: 90 percent to the artist, 5 percent to the venue, and a flat 5 percent to Burratix. That split is hardcoded and checked against Stripe's own API. A twenty-dollar charge lands as a 100-cent platform fee and 1,900 cents to the organiser, every time. There's no resale market where a ticket can be flipped above face value. One account is allowed per verified Australian mobile. And every ticket is cryptographically signed, so a screenshot can't be turned into a second valid entry. There's an opt-in identity-bound mode too, where the buyer's verified name is snapshotted onto the ticket and signed into the QR for an ID check at the gate.

The headline feature is Pay Your Way. A fan pays with a card, with Afterpay or Klarna, or on a lay-by that splits the ticket into four fortnightly payments. The lay-by is the part I'm proudest of. It's built on Stripe Subscription Schedules, and the ticket is withheld until the final payment clears. I designed it around Australia's 2024 Responsible BNPL reforms. The lay-by carve-out, where the goods are held until they're paid for in full, is what keeps it compliant without a credit licence.

The hard part was the money. A single Stripe webhook verifies against both the platform and the Connect signing secrets, then handles checkout, lay-by instalments, lay-by failures, and Connect onboarding. It issues the per-seat tickets, decrements inventory, and records referral attribution inside one Postgres transaction. Ticket issuance reports whether it actually fired, so a webhook retry on an already-paid order is a clean no-op and the confirmation email goes out exactly once. The marketplace fee propagates correctly onto both one-off charges and the lay-by subscription, and a failed buy-now-pay-later payment reverses itself, so there's no clawback to chase.

Under the hood it's Next.js 15 on the App Router with React 19. Server Components handle the read paths and SEO, and every write goes through a server action with shared Zod validation. Data sits in Supabase Postgres with row-level security for tenant isolation, through Drizzle and postgres-js. Auth is Supabase, passwordless, with magic-link email and Google sign-in, and custom SMTP through Resend. Payments are Stripe Connect with destination charges and subscription schedules, with Turnstile and Stripe Radar covering bots. It's strict TypeScript with zero any, from the database schema all the way to the form, and tsc, ESLint and the production build stay clean on every ship.

It's in production on a custom domain, and it was built depth-first. One complete, believable money flow that works end to end, rather than ten features that gesture at it, because the point is to show an investor one thing working completely. Both sides run: sign in, browse, buy on card or buy-now-pay-later or lay-by, get a signed ticket, see it in a real dashboard; and onboard, create an event, publish, get paid 90 percent. It's the whole arc of a two-sided marketplace, built and deployed solo, with the fairness enforced in the architecture instead of the copy.

The pitch: fair ticketing for Australian music, no scalpers, no hidden fees.

The pitch: fair ticketing for Australian music, no scalpers, no hidden fees.

Pay Your Way at checkout: card, Afterpay, or a four-payment lay-by, with the 90/5/5 split shown.

Pay Your Way at checkout: card, Afterpay, or a four-payment lay-by, with the 90/5/5 split shown.

The signed per-seat QR ticket, and a fan dashboard tracking lay-by progress and referrals.

The signed per-seat QR ticket, and a fan dashboard tracking lay-by progress and referrals.

The seller side: a Host dashboard with Stripe payouts, live sales, and full event control.

The seller side: a Host dashboard with Stripe payouts, live sales, and full event control.

Anti-scalping by design: one account per mobile, no markup resale, signed tickets.

Anti-scalping by design: one account per mobile, no markup resale, signed tickets.

The Results

90% Artist cut
Face value only Resale price
Phone-verified Auth
Stripe lay-by Payments

Tech Stack

Next.js 15TypeScriptSupabaseDrizzleStripeshadcn/uiTailwindVercel

Need something similar?

Let's talk about your project.

Get in touch