Why This Matters

The Confirmation step is the end of the booking journey. At this point the reservation is committed, payment has settled, and the guest has everything they need to attend the show. The guest leaves with a confirmed booking reference they can use to check in, a QR code tied to their reservation, and a summary of what they booked. This is the only step that is purely a receipt. No further action is required from the guest.

What the Guest Sees

A full-width confirmation screen shows a large green check mark and the heading “Booking Confirmed!” with a sub-line noting that a confirmation email has been sent. Below the header the guest sees:
  • Booking QR code — a scannable 2D barcode rendered at 128 x 128 px, centered in a bordered box
  • Booking reference — displayed in monospace gold text, for example RSV_260528_0001
  • Date & Time — the scheduled show date and start time
  • Booking Path — labelled as either Dinner Show or Tickets Only
  • Guests — the number of guests in the reservation
  • Total Paid — the final settled amount in VND
The guest’s full name, email address, and phone number are also displayed as a record check. Below the summary card a “What’s Next” panel lists three checkmarked actions:
  1. Check your email for the ticket confirmation and payment receipt
  2. Arrive at least 20 minutes before the show
  3. Present your QR code at the entrance
A Back to Home button returns the guest to the public homepage.

Booking Reference

The booking reference follows the format RSV_YYMMDD_NNNN, for example RSV_260528_0001. It encodes the record type (RSV), the event date (260528), and a sequence number allocated at the time of reservation creation. The reference is the primary identifier for:
  • Check-in — staff look up the reservation by reference at the door
  • Support — guests quote the reference when contacting House of Legends via email or WhatsApp
  • Email lookup — staff can trace a reservation using the reference alone if the guest cannot access their confirmation email
The reference is generated by the backend and stored in the database. It is never derived from or derived from the guest at render time.

QR Code

The QR code encodes the booking reference only. It is generated server-side as a data URL using the qrcode library with error correction level M, rendered at 300 x 300 px, and displayed at 128 x 128 px. The guest email is validated before QR generation but is not encoded in the QR payload itself. Staff scan the QR at the venue entrance to retrieve the reservation; the reference embedded in the QR is the key that resolves the booking.

Next Steps

After the confirmation screen:
  • Email — a reservation confirmation email and a payment receipt email are sent automatically to the guest’s registered address
  • Check-in — the guest presents the QR code on their phone at the venue entrance; staff scan it to locate the reservation
  • Support — for any changes, cancellations, or questions, the guest contacts House of Legends via WhatsApp or email and includes the booking reference so the team can trace the record quickly
  • Staff alerting — if either guest email fails after payment, staff receive a high-priority dashboard notification so the issue is visible without checking logs

Key Concepts

  • Immutable — once the confirmation step is reached, the reservation is committed. Any modifications require contacting support before the event.
  • Check-in derives from reference — the check-in state is not pre-stamped on the confirmation page. Staff update the check-in status at the door by scanning the QR or looking up the reference.
  • Automatic guest emails — no action is required from the guest after leaving the confirmation screen. The reservation confirmation and payment receipt emails are sent via the payment callback pipeline immediately after payment settlement.
  • Developer/staff awareness — failed post-payment email sends create high-priority in-app ALERT notifications with the reservation, recipient, message kind, and Cloudflare delivery error. If ntfy or Telegram alert secrets are configured, the same failure is also pushed to those developer channels.

Technical Details

The confirmationSummary object in BookingContext has the following shape:
dateTimeLabel     string   — formatted date and time, e.g. "Friday, 28 May 2026 at 7:00 PM"
bookingPathLabel   string   — "Dinner Show" | "Tickets Only"
guestLabel        string   — formatted guest count, e.g. "2 Guests"
totalPaidLabel    string   — formatted total, e.g. "2,400,000 VND"
The bookingReference is a top-level string field on the context, stored as RSV_YYMMDD_NNNN.The guest contact fields (fullName, email, phone) live in detailsSummary.
generateBookingQR(reservationReference, guestEmail) in lib/services/qr.ts:
  1. Validates that both reservationReference and guestEmail are non-empty
  2. Calls QRCode.toDataURL(reservationReference, { width: 300, margin: 2, errorCorrectionLevel: 'M' })
  3. Returns a base-64 data URL (data:image/png;base64,...)
  4. The hook useReservationQR fetches this URL and renders it via Next.js Image
Only the reservation reference is encoded. The email is used only as an input guard.See also: Reservation concept — the confirmed reservation record and its identifiers. Event concept — the showEvent the guest booked. Payment concept — the payment that confirmed this booking.