All work

03Client work, 2026

Dodo Dots Masterclass

An entire box office, built from zero.

What it is
Full-stack, Events & ticketing
Built with
Next.js, TypeScript, SQLite, Stripe / HitPay / Billplz, QR check-in
Where it lives
Built for a live event — runs locally with a mock payment provider

The best parts

  • Read, buy, pay, register, get a QR ticket, get scanned at the door: one system, end to end
  • Swap between Stripe, HitPay and Billplz without touching the checkout
  • A staff dashboard that runs check-in on the day
  • About ninety design tokens re-theme the whole site from one file

How it came together

The event site and ticketing system for a two-day social media masterclass. Not just a landing page — read, buy, pay, register, get a QR ticket and get scanned at the door, plus the staff dashboard that runs the room on the day.

  1. The problem

    An event needs more than a page that looks good. Someone has to buy a seat, get a ticket and be let in at the door — and on the day, the staff need to know who has actually turned up.

  2. The approach

    Build the whole journey as one system instead of stitching a landing page onto a third-party ticketing tool. One site owns the pitch, the payment, the registration, the ticket and the door.

  3. How it’s built

    Next.js App Router with SQLite behind it. Ticket tiers and seat counts drive a live order summary; the payment layer is provider-agnostic — mock, HitPay, Stripe or Billplz — so it can be built offline and switched over for real money. After payment each attendee registers and is issued a QR ticket, and a staff dashboard scans those at check-in.

  4. What shipped

    A complete read → buy → pay → register → ticket → scan flow, with an admin side for orders, attendees and check-in. The design system is about ninety custom properties, so the whole site re-themes from one file.

  5. What I took from it

    The unglamorous parts are the product. The landing page took a day; making sure a paid seat reliably becomes a scannable ticket is where the real work was.