May 14, 2026

Casino-Alert Floods, Stopped

If you have a watched sailing and Royal Caribbean published an offer that included it, the alert email pipeline had two problems.

Floods

Royal Caribbean rolls staggered variants of the same offer (e.g. Dealer's Choice as 26GRD403 through 26GRD407) to linked accounts over several minutes. Each per-account sync saw its variant as brand-new and triggered an alert email, and the alert table was tracked alert-level rather than (user, sailing, offer)-level -- so a single watched sailing fanned out across the variants and sent the same person an email per variant.

This morning that meant 9 alert emails in 18 minutes for 2 watched sailings.

There's a new casino_offer_alert_notifications table keyed on (user_id, sailing_id, casino_offer_id). Once that triple is recorded, that exact email won't go out again. Genuinely distinct offers on the same sailing -- a different casino_offer_id -- still notify. If RC later removes an offer row and re-creates it under a new id, you'll be re-notifiable for the new one.

Friends Scope

The other problem was less noisy but more important: a casino-offer alert was firing whenever any user was watching the underlying sailing, regardless of whose accounts the offer was actually on. So a stranger's offer could page everyone on the platform who happened to be watching one of the bundled sailings.

You now only get the alert when the offer is on your own linked accounts, or on a friend's account that's been shared with you. This matches the visibility rules already in place across the rest of the friend-data surfaces.

Celebrity Ships in RC Offers

Club Royale partnership campaigns (MGM Rewards, etc.) sometimes mix RC and Celebrity ships, since both are Royal Caribbean Group brands. Our matcher was hardcoded to RC ships only, so any Celebrity-fleet sailing in those offers silently dropped out. Surfaced today by a 26PLT5 offer that listed 35 Celebrity Reflection sailings; the matcher now tries RC first and falls back to Celebrity. A backfill ran against existing unmatched rows.