This journey’s strategy. The trip is where the Seatfrog promise is kept or broken. Make the upgrade feel real, guide them to the seat, and the moment the trip goes wrong, stop selling and start helping. The full statement and the case: the campaign brief tab.
For the CRM team and the Braze developer. The journey as it runs today and as it should run by phase, then the Phase 1 build: one row per send Braze builds, with what starts it, what stops it and what it needs. The words per version are on the Design brief; the full logic per row, and the copy of record, sit on the Decisioning matrix.
Phase 1 ships on Braze and Analytics with no app release; Phase 2 is anything that needs engineering.
| The build | Fires on | Caps, and what stops it | What it needs, and what is open |
|---|---|---|---|
| The wait email Phase 1 | Arc entry (the upgrade purchase) where the departure timestamp is seven or more days out. Date maths on the existing trip attribute, the same pattern the live webhooks already use. | Marketing layer, inside the arc's once-per-trip-per-send rule. Stops: Refund or cancel exits the arc; live disruption yields the whole arc to the service layer. | liquid The lead-time slice sizing (Analytics, go or no-go on test power); the per-operator inclusions content block (Design); the holdout (Analytics sizes). |
| The wait, with a bid pending Braze Email Phase 1 | A pending bid where the trip's departure is seven or more days out; one send per trip. Exits instantly at the auction close: a win hands to the winner arc, a loss to the in-auction journey. | One email per bid; a re-bid inside the same auction never repeats it; counts toward the pre-travel cap, inside the arc's once-per-trip-per-send rule. Stops: Suppressed inside a live disruption and for power-band customers; never sent twice for one trip. | pending-bid state at send time, sizing The long-lead slice sizing (Analytics, go or no-go before it is built: Sheran, 15 Oct 2026, her reply to Dirk's scoping assistant); the per-customer pending-bid state at send time (D9). |
| The day before Email, Push Phase 1 | Departure minus 22 hours, computed from the trip attribute at entry: the exact offset the live webhooks already fire on, console-confirmed. | Reassurance class within the arc; once per trip; one channel per customer at this beat (email where held, else push). The both-held push echo exists only inside the test arm. Stops: Refund or cancel exits; disruption yields; the episode flag stands broadcasts down. | computed trait, trip attributes sync, persona register trait The reserved coach and seat from the booking, sent to Braze with the trip (D12; Sheran, 15 Oct 2026, her reply to Dirk's scoping assistant); a counted place has no seat number, so the line names the coach alone. The persona register label (computed trait, Analytics); the non-inferiority floor on the email A/B (Analytics, the rollback trigger); the holdout sizing. |
| On board Braze Push, Email, In-App Phase 1 | Scheduled departure from the customer's boarding station plus a few minutes (Engineering confirms which station the trip's departure timestamp refers to; if the origin only, derive the boarding-station time from the reservation segment); held where the service is delayed or its running status is unknown, and skipped where the customer's trip was swapped. | One touch per trip; reassurance class inside the arc; the push counts toward the three-a-day travel cap. Stops: Refund or cancellation exits; disruption or delay on the service holds it (the message must never land on a train that has not left); the trip swapped; more than one trip on the day, send for the trip in progress or not at all; never during a live auction on the same trip. | trip attributes sync, delay state, computed trait The trip attributes in Braze with the boarding-station departure time (the trip sync, D1); the running-status or delay read (the Darwin feed row; until it lands, the send fires on the scheduled time and says nothing about being on board); the trip-by-ID deep link resolving the right trip when several are booked; the saved-amount substantiation (Analytics). |
| The day-before email family, kept as the control Phase 1 | Unchanged: purchase-triggered webhook computes departure minus exactly 22 hours. | As today. Stops: As today, plus the arc's episode exclusions as they land. | trip attributes sync, persona register trait The non-inferiority floor and reach sizing (Analytics): the +16.9% and +16.3% reads* apply to the narrow eligibility, and the claim must carry its true coverage. |
| The train-swap reminder Braze Push, In-App Phase 1 | Unchanged: ticket purchase on a swap-capable operator; T-4h computed reminder (the legacy T-2h slot is retired in the rebuild). | Commercial class. One episode per trip: the reminder exits on a swap made, the trip cancelled or refunded, or the train departed, and never re-enters on a timer (Sheran, 15 Oct 2026, to Dirk's scoping assistant); the live canvas's re-entry after two days goes. Stops: Disruption yields; loses same-window collisions to wayfinding. | The control or holdout (Analytics); the swap-eligibility defect fix (Product and Engineering) that gates the seat-swap path; the unidentified caller resolved (Row 10) so the reminder exists exactly once. |
Build paused until written sign-off. Every build carries its exit, cap and suppression; a control group is verified real, never assumed; Liquid never renders raw; a dependency that does not exist yet is flagged, not faked.
| The treatment | Who it reaches | Why it waits |
|---|---|---|
| The morning Push | Push-armed winners on travel morning whose upgrade was confirmed before the send time | Waits on a backend release. |
| The live pin on the lock screen In-App | iOS winners from T-2h | Waits on an app release. |
| On board Braze Push, Email, In-App | Winners on a non-disrupted trip, shortly after the train leaves their boarding station | Waits on a backend release. |
| The persistent trip state In-App | Every winner, the whole window | Waits on an app release. |