← The systemsLiveBilingual ticketing + reservation system

Phoenix Live — TRI ÂN

A one-night Vietnamese live show, sold as 26 premium tables at $700–$900, to a bilingual audience, with a floor plan that stays truthful as tables sell.

phoenixlive.au
Phoenix Live — TRI ÂN — live site
Stack
React 19 · Cloudflare Pages + Worker · KV
Show
3 Oct 2026 · Cabramatta Golf Club
Inventory
26 tables · 3 tiers · $700–$900
Money
Stripe Payment Links, live
Languages
Vietnamese · English
QA
22/22 automated browser checks

01 The brief

TRI ÂN is a single night: Đinh Công Phụng live at Cabramatta Golf Club, 3 October 2026. No seat map exists for a show like this — the product is tables, in three tiers, bought by families and groups, marketed in Vietnamese and English at the same time.

The problem wasn’t presentation, it was truth: once two tables sell through Stripe, the map on the site must know — immediately, without anyone editing a page. And a paid table can never, under any race condition, be sold twice.

Đinh Công Phụng performing in a white feather costume
ĐINH CÔNG PHỤNG — THE SHOW ITSELF

02 What was built

One night, 26 tables, two languages, zero room for error.

  • Cinematic bilingual site — every string in Vietnamese and English, compiler-checked for parity
  • Artist-driven landing with an 11-portrait wall and a “revealing soon” special guest
  • Interactive floor plan: 26 tables, 3 tiers, named reservations rendered on the map
  • Pick a table → add your name → pay at Stripe — three steps, no account
  • Availability polled live every 60 seconds from the reservation store
  • Signature-verified Stripe webhook flips a table to sold the moment payment completes
  • Admin holds for VIP guests, with first-wins protection against duplicates
  • Lead capture with per-email dedupe + WhatsApp concierge
  • Revenue report rebuilt every 20 minutes from webhook-verified data only
  • Build guard: the build fails if the site’s tier map and the server’s drift apart

03 The system

The website is the surface. This is the path underneath.

Step 1 — Marketing

Bilingual hero, artist wall, real show photography. Facebook and Zalo traffic lands on one page with one job.

04 Behind the screen

Backend decisions you'll never see, and always feel.

  1. 01

    First-wins table protection

    On every webhook, if the table already has a record, the event is acknowledged and the original stands. A webhook storm cannot overwrite a paid reservation.

  2. 02

    A 287-line API with zero dependencies

    The whole reservation service — health, availability, leads, holds, webhook, admin, revenue report — is one Cloudflare Worker with a KV store. No framework, no database server, nothing to patch at 2am before a show.

  3. 03

    The build refuses to drift

    Tier prices exist on the site and in the worker. A guard script fails the build if the two copies disagree, or if an old price survives an update. Consistency is enforced, not hoped for.

  4. 04

    Honest fail-safety

    Before the first fetch, the map renders from a static snapshot of known reservations. If the API is unreachable, the show still sells from truth — never from a blank slate.

  5. 05

    Bilingual by construction

    The Vietnamese dictionary is typed against the English one. A missing translation is a compile error, not a live-page embarrassment.

05 Project screenshots

Real screenshots, no mockups.

Live — bilingual show and table-booking site

phoenixlive.au
TRI ÂN hero with artist in white feather costume and bilingual title
CINEMATIC BILINGUAL HERO
phoenixlive.au
Interactive floor plan of 26 tables in three tiers with named reservations
THE FLOOR PLAN — LIVE INVENTORY AS THE INTERFACE
TRI ÂN experience on a phone
THE WHOLE PURCHASE IN ONE THUMB
Đinh Công Phụng performing in a white feather costume
Đinh Công Phụng — the show itself
Live performance on stage
Stage, previous nights
Red-lit stage moment from a previous show
What the room feels like

06 What became reusable

Your build can reuse patterns from this project.

Webhook-first availability

Inventory that changes only on verified money events. The same pattern holds for tables, seats, stock, or appointment slots.

Tier + payment-link architecture

Pricing as dashboard objects, references carrying meaning, one Worker reconciling it all.

Config-driven events

The entire show — dates, venue, artists, tiers, FAQ — lives in one content file. Show #2 is a new file, not a rebuild.

Bilingual content discipline

Compiler-enforced language parity, ready for any audience that arrives in two languages.

· Next case study — 03

Angel Wings

A demonstration storefront for wing hire and purchase, with date selection, a basket and an owner view.