Shop Other Packages: From Dropdown to Grid
The package picker on /bookings/{id} used to be a Choices.js multi-select where you searched for products, picked items, and they rendered as cards in a separate zone below -- a two-step flow with no way to see what was on offer without searching first.
It's now an inline card grid, categorized into shopper-friendly buckets:
- Beverage
- Dining
- Internet
- Spa
- Photo
- Cabanas & Beach
- Decorations & Gifts
- Entertainment
- Laundry
- Shore Excursions
- Other
The catalog is the picker. A live search box filters across all sections. Each card shows the personalized price, savings vs shipboard, and a bell icon for one-click price-drop alerts -- click the bell, the alert is toggled, no round-trip through a separate "manage watches" surface.
Bell clicks update optimistically and revert on error.
A note on categorization: the new mapping overrides RC's own categorization, which is famously quirky. RC files the Unlimited Dining Package under "celebrations." Spa treatments are scattered across multiple endpoints. The new picker uses a name-pattern match first and only falls back to RC's category as a last resort.
Picker: Watching Strip + Collapsed Sections
Same picker, second iteration the same day.
- Watching strip pinned at the top. One chip per active alert across the sailing, regardless of whether the underlying product has a card in the picker grid below. So Deluxe Beverage / Unlimited Dining / VOOM (the canonicals most people actually watch) finally show up as "watching" even though they're hidden from the grid -- they're either already purchased or have no personalized data on this sailing. Click a chip to unwatch.
- Sections are collapsed by default. Headers show "(N) · K watching · from $X" so you can scan category cost and watch coverage without expanding. Sections containing a watched product auto-expand on initial render. Live search auto-expands any section with matching results.
- Watched cards are easy to spot. Thick gold left border, warm background tint, "Watching" pill in the corner, bell goes grey→amber. The faint border on the first iteration was too easy to miss.
Bell clicks and chip clicks share state-sync helpers, so toggling either surface updates everything bound to that product (chip, card border, watching pill, bell, section count).
Instant Offers: Ship-Class Filter
The monthly Instant Offers table at /instant-offers/{month} now has a ship-class filter so you can narrow to a specific class (Quantum, Oasis, Icon, etc.) without paging through everything.