Luxury Escapes POC — Internal Explainer

One content library, every combination

How LE's tour-option × tier matrix maps onto Kaptio content and renders as LE-branded documents. Verified live against the luxgroup sandbox, 11 July 2026.

The problem

One tour is a matrix, not a product

Two independent dimensions per tour: Tour Options (Base / Extended / Extended Alternative) and Package Tiers (Regular / Platinum / VIP — LE calls these "packages"). Only some combinations sell. Content must live once.

Regular
Platinum
VIP
Base
Sellable
Extended
Sellable
Sellable
Ext. Alt
Sellable

Valid combinations exist by omission: no configuration record, never bookable.

Each Tour Option = its own GroupTravel__c, joined by shared PackageCode. Tiers = PriceCategory__c. Package__c is the listing anchor and content container — never sellable.
The model

Four typed dimensions, one library

Content articles live on the Package and carry four selector fields. Selection is code-driven — titles are display-only and safe to rename.

DimensionValuesMeaning
Kind__cVariation · Upsell · Optional Experience · Itinerary DayRole in composition
Variation__cBase · Extended · Extended AlternativeTour option(s)
Upsell__cRegular · Platinum · VIPTier(s)
Day__c1..nItinerary day

Singletons (highlights, inclusions, not-included) select by APIName = <package-code>.<selector>, e.g. china-highlights.tour_highlights.

Composition

Base days, ordered by Day.
Option overlay — same Day replaces, new Day extends (Extended adds days 13–15).
Tier inclusions appended for the selected tier.
Opted-in optionals, via passenger configuration assignments.
Departures

Departure variation, three layers

LayerMechanismStatus
StructuralThe four dimensionsLive
SeasonalValidFrom/To on the article, filtered against the departure date. Re-version a day with the same Day + a bounded window.Live, functionally verified
Per-departureDeparture__c lookup as a fifth dimensionDesigned, not built
Hard rule: close the superseded article's ValidTo when re-versioning — queries don't dedupe by Day, so a leftover renders as a duplicate day block.

Imagery is the same pattern: Image__c records with LE CDN URLs — hero tagged hero on the Package, day images via FeaturedImage. Records, not config changes.

The result

Rendered live from the sandbox

All from real org data, 13 Mar 2027 China Highlights departure: published from-price A$19,939.92, 12-day duration from the Package, nine travellers with real selections. Zero query errors.

Tour itinerary hero — Great Wall, China Highlights, 13 March 2027, 12 days, A$19,939.92 from-price

Tour Itinerary — hero and booking strip, all fields resolved from org data.

Day cards with Terracotta Warriors and Shanghai Bund imagery

Day cards with per-day imagery.

Travel documentation with confirmed selections per traveller

Travel Documentation — confirmed selections per traveller.

Full documents: Tour Itinerary · Travel Documentation (live staging renders).

Links

Where everything lives

Not yet shared with LE. Before UAT: PDF exports, LE logo asset, template-qa manifest, SIT docs.