May 3, 2026

Cabanas and Photo Packages Are Not Per-Day

A small fix with a fairly long blast radius.

Some Cruise Planner products are billed once -- a cabana for a day, a photo package, a multi-night dining package, decorations for your stateroom, a 25th-anniversary cake. Others are billed per day -- the Deluxe Beverage Package, Surf+Stream Internet, etc. Royal Caribbean exposes which is which via a salesUnit code on each product (PERDAY, PERPACKAGE, PERSEAT, PERUNIT), but their endpoints aren't consistent about the spelling -- some endpoints underscore it, some don't -- and we had two separate normalizers that didn't agree on the variants. Result: a Couples Swedish Massage was rendering as "$313.99/day" on the bookings page instead of a one-time per-couple charge. Same shape applied to:

  • Photo Packages
  • Cabanas and beach club
  • Cakes
  • Decorations
  • Multi-night Dining Packages

These all now render correctly as one-time charges, and the "per ticket" tag has been dropped from anything that isn't actually a ticket (cabanas aren't tickets). The purchased-package row on the sailing page also now shows " total" where it used to show "/ticket."

Same product can have different cadences on different sailings, by the way. RC tags the Deluxe Beverage Package as PERDAY on a 7-night Caribbean and PERPACKAGE on a 16-night Anthem transatlantic. Each row stores its own salesUnit, so each sailing displays the right shape without any special-case logic.

Small Things

  • Sailing pages with empty itineraries no longer crash with a port-rendering error (a handful of placeholder sailings RC publishes with no itinerary data yet were taking the page down).