Oscar Hoang
Projects

2024 · Built end to end

Latin Bangkok Fiesta

Festival platform for passes, merch and QR tickets, with tools for organizers, event staff, judges and emcees.

Role
Built end to end
Stack
Next.js · React · Supabase · Stripe · i18next · QR codes

What I did

  • Built the in-app Stripe checkout for passes and merch, with prices shown in 11 currencies and charged in THB.
  • Moved ticket sales off Zipevent onto the platform and built the import for manual and past orders.
  • Built the dancer experience — QR tickets, a weekend hub, People's Choice voting, and surveys.
  • Built staff tools for orders, refunds, manual orders, sale limits, promo codes, and check-in.
  • Built judging from a personal link with no account, plus a full-screen emcee view for live results.

Key decisions

  • Inventory and promo codes are claimed before the Stripe session exists, and webhooks only confirm, so retries and races can't oversell.
  • Every staff action passes two locks, a role check in code and Postgres row-level security, so one bug can't expose orders.
  • Judging scores were verified by replaying 10 real Jack & Jill finals. The replay caught 2 wrong placements in the first version.

Outcome

Moved the festival's ticket sales off Zipevent into its own Stripe checkout and shipped live judging.

What it is

Latin Bangkok Fiesta is the ticketing and event platform for the festival, live for about two years. Sales moved off Zipevent into its own Stripe checkout, which shows prices in 11 currencies and charges in THB.

Who it serves

  • Dancers: find the festival, buy passes and merch, get QR tickets, use the weekend hub (today's workshops and DJ sets), vote for People's Choice and answer surveys.
  • Organizers: connect Stripe, turn sales on and manage staff.
  • Event staff: handle orders and refunds, add orders by hand, set sale limits and promo codes, run check-in and send surveys.
  • Judges and emcees: judges score from a personal link with no account to create, and the emcee gets a full-screen view for announcing results live.