← StrategyJourney 10 campaign brief
Journey 10, Engineering briefPack version: 14 Oct 2026, 13:07 (London)
Leave feedback
The Engineering brief

What Journey 10 needs, and who owns it: almost nothing now, a render-path build later

🔧 Open the marketing to engineering board
The board is the system of record: live rows, owners, status, and each row's today-vs-to-be.
The hard rules: one state, one slot, never two; the product answers first. A live trip outranks an open episode, an open episode outranks recognition; a deep link renders only if a live auction on the route is confirmed at render; power returners get utility and the standing card, never a welcome speech or a sell; and the journey's only outbound act is a suppression.
1The requirements

No send in this journey is fired natively by the app itself, so there is no native-to-Braze migration roster here: everything that sends today already lives in the messaging platform or an external one, and each row’s call sits on the As-is tab.

9 rows: 4 data points and 5 computed traits (Analytics builds, no engineering hours). The D badge is the walkthrough pin number. Delivery fixes and app defects follow in their own sections.

Events, feeds and data points

The render-path data the phase 2 build needs. Each row is the contract; all of it is scoped at the Product session.

The data pointWhat exists todayThe workWhat it must carryPhase · status · depends on
D6Live auction availability at render
route_auction_live, at render
Expose the live-auction check so a deep link never lands on a dead auction.
DOES NOT EXIST YET
Does not exist in the render path.
Render-path buildThe card's deep link renders only on a confirmed live auction; without the check the card cannot link.
Used where: The recognition card's deep link
PHASE 2
gated
Scoped at the Product session
The scoping session.
D7Bid state at render
in_lead, at render
Expose whether the customer is in the lead on a live bid: a suppression input at render.
DOES NOT EXIST YET
Not readable at render.
Render-path buildIn-lead bidders see the live auction's state, never a recognition card.
Used where: The card's eligibility
PHASE 2
gated
Scoped at the Product session
The scoping session.
D8Card impression and click events
card_impression · card_click
The shared estate fix: make the surface measurable.
DOES NOT EXIST YET
Zero recorded across 11 live cards.
Front-end instrumentationEvery read this journey proposes rides it.
Used where: Reading anything on this surface
PHASE 1
ships now
The shared fix, already on the estate record
Nothing.
D1The ownership flag at render
journey_state, render-readable
Make the shared episode flag readable by the home surface.
DOES NOT EXIST YET
The flag convention exists across the journeys; render readability does not.
Braze configurationThe state model's arbitration: trip, then episode, then recognition.
Used where: State resolution, every open
PHASE 1
ships now
With the shared-flag build
The owning journeys' canvas builds.
▸ The 5 computed traits this journey reads: Analytics builds them, no engineering hours; and what is not listed, and why

Computed traits this journey reads · Analytics builds, no engineering hours

Named here so the full picture is one table. The contract is the row.

The computed traitWhat exists todayThe workWhat it must carryPhase · status · depends on
D2The usual route
usual_route, nightly
The standing pattern: most travelled over a year, ties broken by the most recent.
BUILDABLE TODAY
Derivable; the same trait other journeys consume.
Computed traitThe card's anchor: their route, not a route.
Used where: The recognition card
PHASE 1
ships now
With Analytics
The CDI payload extension.
D3The persona classifier
persona_register, nightly
Sync the classifier; unclassified customers get neutral copy rather than a guess.
EXISTS, NOT IN BRAZE
The model exists; it does not reach the sender.
Sync payload extensionThe register picker: commuter, leisure, or the neutral no-guess register.
Used where: The card's register
PHASE 1
ships now
With Analytics
The CDI payload extension.
D4The transacted flag and lifecycle band
transacted · lifecycle_band, daily
Eligibility's spine: which recognition, and whether any.
DOES NOT EXIST YET
Derivable; not in the render path.
Computed traitsEntry (previously transacted, Active or Reactivated) and the register.
Used where: Eligibility at render
PHASE 1
ships now
With Analytics
The CDI payload extension.
D5Booking history and home station
booking_anchor, nightly
The anchor that makes the card personal rather than generic.
EXISTS, NOT IN BRAZE
Held in the warehouse; not synced.
Sync payload extensionThe card's specifics: the trip, the station, the real figures.
Used where: The recognition card
PHASE 1
ships now
With Analytics
The CDI payload extension.
D9The savings percentile
savings_percentile, nightly
Rank each customer’s upgrade savings in the last 12 months among customers who transacted in that window, nightly, and sync the percentile to Braze as an attribute. Journey 6’s anniversary tile shares it.
DOES NOT EXIST YET
Not computed anywhere; the per-trip saving it ranks is Journey 6’s open requirement.
Computed traitThe power user’s standing card: top N percent of Seatfrog savers this year, with their saved total. It ranks savings, never bids, and names no other customer.
Used where: The standing card on the tile rail (a test: card against no card)
PHASE 1
ships now
On the board
Journey 6’s savings figures; the sync payload extension.

Not listed because there is nothing to build: session recency (Braze-native, the suppression's whole trigger) and the For-you carousel the phase 1 card ships in.

Four changes the customer never sees: what is broken today, the fix we are asking Engineering for, and why it belongs in this journey rather than a general engineering backlog. None is a comm and none needs a decision from Marketing. Each one either loses a message this journey depends on, or decides whether something else can be built at all.

2Two delivery fixes

One shared fix carries the journey's readability: card impression and click events, zero today across 11 live cards.

The delivery fixThe fix we are asking forWho does itPhase
The journey ownership flag (journey_state): the shared buildBuild journey_state once, estate-wide: one attribute carrying the owning journey, the episode id and the entry time. Every owning canvas writes it at entry and clears it at exit; every broadcast and wave segment excludes on it; it is mirrored nightly to the warehouse and readable at render by the home surface. The Braze developer wires the canvases and the exclusion segments, Engineering mirrors it to the warehouse and exposes the render read, Analytics keeps the state history. One board row carries it for all ten journeys.BACKEND ENGPHASE 1
ships now
▸ The problem today, and why it sits here
The problem today
Every journey's stand-down and hand-off assumes one owner per customer, and the flag those rules read is campaign-written today: invisible to broadcast segments, the warehouse and the app, so the rule cannot be enforced. Two live journeys can reach one customer in one week with clashing messages.
Why it sits in this journey
Here it is read at render: live trip, then open episode, then recognition, in that order.
Card impression and click eventsFix the shared content-card instrumentation so the surface becomes measurable.BACKEND ENGPHASE 1
ships now
▸ The problem today, and why it sits here
The problem today
Zero impressions or clicks are recorded across all 11 live content cards: nothing on the surface can be read.
Why it sits in this journey
The recognition card cannot be read, tested or ranked until this lands; it is the estate-wide fix this journey needs most.
3Two defects in the app itself

One live defect class: the surface is unreadable, and the slot is unfiltered.

The defectThe fix we are asking for
The surface is unreadableThe shared instrumentation fix.
▸ The problem today, and why it matters here
The problem today
Impression and click measurement registers zero across 11 live cards.
Why it matters here
Nothing on the home surface can be measured, ranked or tested until it lands.
The slot is unfilteredThe slot map at the scoping session; the recognition card ships with the cap and rotation the pile lacks.
▸ The problem today, and why it matters here
The problem today
The live cards fire for anyone registered over 30 days: no segment filter, no frequency cap, no transaction-state read.
Why it matters here
A returning customer's first impression is an unfiltered cross-sell pile.

Source: the 20 Aug 2026 evidence refresh, the pins record, and the estate instrumentation audit. Board rows are raised after the scoping session.

Working detailPack version: 14 Oct 2026, 13:07 (London)