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
- Check your email for the ticket confirmation and payment receipt
- Arrive at least 20 minutes before the show
- Present your QR code at the entrance
Booking Reference
The booking reference follows the formatRSV_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
QR Code
The QR code encodes the booking reference only. It is generated server-side as a data URL using theqrcode 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
ALERTnotifications 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
Confirmation context shape
Confirmation context shape
The The
confirmationSummary object in BookingContext has the following shape: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.QR encoding logic
QR encoding logic
generateBookingQR(reservationReference, guestEmail) in lib/services/qr.ts:- Validates that both
reservationReferenceandguestEmailare non-empty - Calls
QRCode.toDataURL(reservationReference, { width: 300, margin: 2, errorCorrectionLevel: 'M' }) - Returns a base-64 data URL (
data:image/png;base64,...) - The hook
useReservationQRfetches this URL and renders it via Next.jsImage
