Why This Matters
This is the core commercial decision of the booking. The experience type a guest selects — Ticket Only, Dinner Show, or VIP — determines the entire pricing structure, what add-ons are available, and what the guest can expect on the night. Getting this step right is critical because it shapes every subsequent choice and the final total on the invoice.How It Works
The step presents three mutually exclusive experience paths through a tabbed interface: Ticket Only, Dinner Show, and VIP. Each tab reveals a different set of offers tailored to the guest’s party size and the event they have chosen. The guest must make a selection in order to proceed. The active tab is determined by the selected experience type. Switching tabs is possible when the event supports the target path, but the guest must land on a valid offer before continuing.Ticket Only
Ticket Only bundles are fixed-price group add-ons — the stated bundle price is added once for the whole party, not per person. Ticket admission is still charged per guest. For each guest count tier, the guest is presented with exactly four options:| Option | Description |
|---|---|
| Bundle A | First tier bundle (e.g., Essentials) |
| Bundle B | Second tier bundle (e.g., Comfort) |
| Bundle C | Third tier bundle (e.g., Premium) |
| No Extra Bundle | Show admission only — guest can pre-order add-ons after Menu Review when add-on offers exist |
ticket-only(showSlug) × guest count + selected bundle price. “No Extra Bundle” is a valid selection that allows the guest to skip bundle inclusions and instead browse available add-ons after Menu Review when add-on offers exist. This path is useful for guests who want show admission only or who prefer to build their own experience through add-ons.
For groups of exactly 5, a special upsell appears below the four options: the 5-Guest Upgrade Options. This is a two-path decision:
- Option A — 5-Seat A La Carte: Each guest pays individually at the per-person rate. No table hold is reserved.
- Option B — 6-Seat Table Hold: The group secures a table for 6, with the 6th seat held as a placeholder. This option may be disabled if the venue has no remaining 6-seat capacity.
Dinner Show
Dinner Show starts with the show-specific base dinner ticket:ticket-with-dinner(showSlug) x guest count. Packs are optional fixed-price group add-ons on top of that base dinner ticket. When a pack is selected, the backend adds pack(packSlug) once and returns the final estimate; the frontend displays that backend estimate instead of recalculating Dinner Show totals.
Guests select one pack based on their group size:
| Group Size | Pack | Includes | Price |
|---|---|---|---|
| Solo (1) | The Solo Toast | 1x Signature Cocktail | 200,000 |
| Duo (2) | The Romantic Pack | 1x Single Rose, 1x George XV Brut | 840,000 |
| Trio (3) | The Trio Pack | 1x Wine Bottle, 1x Souvenir Polaroid | 850,000 |
| Table of 4 | The Celebration Pack | 1x George XV Brut, 1x Souvenir Polaroid | 960,000 |
| Group of 5 | The Grand Pack | 2x Wine Bottles, 1x Souvenir Polaroid | 1,520,000 |
| Group of 6 | The Legend Pack | 1x Wine Bottle, 1x George XV Brut, 1x Polaroid | 1,630,000 |
isRecommended flag) and is pre-selected by default (using the isDefault flag) set by the admin in the bundle configuration. Both flags are independent — pre-selection can be removed with one click.
VIP
VIP represents a premium seating tier above the standard Ticket Only or Dinner Show experience. When VIP is available for the selected event, the tab shows the VIP offer with its price and included fulfillments. If VIP is sold out, the tab is disabled and shows a “Sold Out” badge. VIP pricing and inclusions are defined at the show level and override any standard bundle or pack selection.Special Occasion
Below the offer cards, a Special Occasion section lets the guest mark the nature of their visit. Five occasion types are available:- Birthday
- Date Night
- Special Occasion
- Business
- Other
Key Concepts
Bundle vs. Pack distinction: A bundle is a Ticket Only offer. A pack is a Dinner Show offer. These are never interchangeable — the system filters which type appears based on the selected booking path and offer conditions. No Extra Bundle path: When a guest selects “No Extra Bundle” on the Ticket Only path, they skip bundle inclusions and can proceed to Add-ons after Menu Review when add-on offers exist. This is a valid commercial path — not an error state. Default pre-selection: For Dinner Show, the Romantic Pack is pre-selected by default using theisDefault flag. This is an admin-controlled flag, not a hard rule — if isDefault is false for all packs, no pack is pre-selected.
5-Guest Upgrade: This option appears only when guestCount === 5 and selectedType === "TICKETS_ONLY". Option B (6-seat table hold) internally increments the capacity-tracked guest count to 6 while keeping reservation.guests = 5.
Technical Details
The step state is built inbuildBookingExperienceStepState (booking-context.selectors.ts). Key state fields driving the UI:
| Field | Type | Purpose |
|---|---|---|
selectedType | BookingSelectedType | Active experience type: TICKETS_ONLY, DINNER_SHOW, or VIP |
activeExperienceTab | BookingExperienceTab | Which tab is currently displayed in the UI |
experienceStep.ticketOnly.bundles | BookingTicketOnlyBundleCard[] | Filtered to exactly 3 cards matching the guest tier |
experienceStep.dinnerPacks | BookingDinnerPackCard[] | Packs filtered by guest count — one pack selected per group size |
experienceStep.vip | BookingVipPackageCard | VIP offer built from vipPackageOffer or show-level defaultVipPrice |
fiveGuestOption | "A" | "B" | undefined | Controls 5-guest upsell pathway selection |
occasionOptions | OccasionOption[] | Available occasion types with isSelected state |
occasionMessage | string | Free-text message, max 500 characters |
buildTicketOnlyOffers filters offers by BookingPath.TicketsOnly. buildDinnerPackOffers filters packs by guest count — one pack is shown per group size.
The continue button is disabled when selectedType === null, forcing the guest to pick an experience before advancing.
See also: Offer concept — the unified offer model that underlies bundles, packs, and add-ons. Pricing model — the full pricing decision matrix. Ticket Only Bundles — all bundle tiers and prices. Dinner Show Packs — all pack types and upgrade options.