Overview
This week, across every journeyThis week's read: winback-2026 is paused mid-ramp while the sending domain finishes warming, and sms-drip-2-4 is built and held with nothing sent. Three touches in winback-2026 are approved and ready; six open decisions remain in the journey file, down from eight. The figures in this card and the outcome bar below are an illustrative mock of what a weekly agent read will surface once send history exists; they are not measured.
This week, in numbers
Figures marked * are illustrative: there is no send history
yet to compare against, so the delta line is a mock of the shape, not a measurement. The
values above the delta line are read from the journey, message and audience files this
builder already loads.
Request outcomes illustrative
No journey has sent yet (0 in flight across the board), so this bar is a mock of the shape the tool will show once winback-2026 resumes, not a real send outcome.
Quick Actions
Only the verbs this tool allows. There is no "new journey" button here, or anywhere in this tool: every journey began as a clone.
Activity feed illustrative
This tool has no activity log wired yet; these rows mock the shape.
Outbound, Apollo shared, read only
The two Apollo sequences are shown on the Journeys screen, read only. This tool never controls them: open the outbound console to pause, resume or watch one.
Open in outbound console ↗Journeys
7 defined, 3 live, 1 pausedControl is per row: pause, resume, drain. There is no button here that starts a journey from nothing: every row on this screen began as a clone of another row. Only rows with a Definition file are rendered from real data; the rest are illustrative catalogue rows and are labelled as such so they cannot be mistaken for built journeys.
| Journey | Name | State | Audience | Channel | In flight | Note | Definition | Actions |
|---|---|---|---|---|---|---|---|---|
| winback-2026 | Dormant win-back | paused | 150 | 0 | ok, domain verified, warming up | campaigns/lifecycle/winback-2026.yaml | ||
| reconversion | Reconversion | live | live query | email+sms | unknown | ok | no definition file yet | |
| nurture-product | Product nurture | live | 22 lists | unknown | ok | no definition file yet | ||
| welcome-sms | Welcome SMS | live | list 68 | sms | unknown | ok, Brevo automation 55 | no definition file yet | |
| dist-receipt | Distributor receipt | built | on upload | 0 | ok | no definition file yet | ||
| sms-drip-2-4 | SMS drip 2 to 4 | built | non-converters | sms | 0 | held, nothing sent | no definition file yet | |
| c13-tradeshow | Trade show re-engage | draft | not defined | 0 | no audience | no definition file yet |
Outbound, Apollo shared, read only
Every journey above is ours to pause, resume and drain. These two rows are not: they are Apollo sequences, shown here so nothing is invisible, and the only control on either is a link out. Sequence control, including launching and pausing one, lives in the outbound console, never here.
| Journey | Name | State | Audience | Channel | In flight | Note | Definition | Actions |
|---|---|---|---|---|---|---|---|---|
| Jim Intro Sequence | - | Apollo, read only | - | Apollo email | - | illustrative, not yet read live | no definition file here | Open in outbound console ↗ |
| Industry Intro, Parks & Rec | - | Apollo, read only | - | Apollo email | - | illustrative, not yet read live | no definition file here | Open in outbound console ↗ |
Clone from template: naming is validated here, inline
Every journey clone, node tag, audience, message, module and list name is checked against a pattern THE MOMENT it is typed or cloned, not on a separate screen nobody opens before naming something.
| Thing | Pattern | Example |
|---|---|---|
| Journey | <program>-<year> | winback-2026 |
| Node tag | <journey>.<node> | winback-2026.touch-1 |
| Audience | aud.<program>.<cut> | aud.winback.gate1-pilot |
| Message | msg.<program>.<role> | msg.cart.abandoned |
| Module | <role>, never client-prefixed | hero-2 |
| Brevo list | <program>.<segment> | nurture.boat-lifts |
Inline check, live as you type
| Typed name | Result | Why |
|---|---|---|
winback-2027 | ✓ valid | lowercase, program-year, matches the journey pattern |
Winback_2027 | ✗ invalid | uppercase and an underscore; pattern is lowercase, hyphens only |
hero-2 | ✓ valid | module role name, no client prefix (correct, it is shared across clients) |
dockblocks-hero-2 | ✗ invalid | module names are never client-prefixed; this breaks sharing with every other client |
A clone inherits the template's exits, suppression and gates. There is no blank canvas: a journey that did not come from a clone does not exist in this tool.
winback-2026
paused, 150 in audience, 0 in flightActivate requires approval: it produces a diff against the journey file (see below) and a named human approves it before it is live. Save draft never does.
Node graph: entry, message, wait, decision, branch, exit
campaigns/lifecycle/winback-2026.yaml, not a hand-copied approximation.winback-2026.entrywinback-2026.suppressionwinback-2026.wait-1winback-2026.wait-2winback-2026.doneA real build wires this panel to whichever node is clicked on the
canvas. Here it shows touch-1 as a fixed example of the shape.
Decisions in this file
Launch preflight, re-run on every refresh
| Check | Now | Read |
|---|---|---|
| Audience pinned | pass | 150 rows |
| Suppression fresh | pass | 18,390, read now |
| Consent opt-in | pass | per person |
| Frequency | pass | see cap panel |
| Domain authenticated | pass | SPF via domain verification + DKIM live, DNS verified 2026-10-03 |
| Domain warm | fail | no history |
| Stranded check | missing | sensor built, needs DSN |
Frequency, both cap layers
| Cap layer | Window | Now | Read |
|---|---|---|---|
| Email, per channel | 30d promo cap | pass | 3 of 30 used |
| SMS, per channel | 7d cap | warn | 2 of 3 used |
| Combined, all channels | stricter cap, evaluated last | pass | 4 of 6 touches in 14d |
Propose an edit: agents propose, a human approves
Sample Contact
sample.contact@example.invalidillustrative, sample person No real contact is loaded here: this is one clearly-labelled sample row showing the shape of a cross-channel person view, not a real name or a real email. The fields themselves are real: Pause until and the 90-day re-approach hold are the two per-person holds this tool's own suppression model already names, surfaced here rather than only on a journey's own suppression node.
Journeys this person is in
| Journey | Current step | Last activity |
|---|---|---|
| winback-2026 | touch-2 | sent 3d ago |
| welcome-sms | touch-1 | sent 16d ago |
Audiences
6 defined| Audience | Size | Channel | Computed | Used by | Note |
|---|---|---|---|---|---|
| aud.winback.gate1-pilot | 150 | 02:30 today | winback-2026 | pinned | |
| aud.winback.gate1-rest | 1,648 | 02:30 today | wave 2 | not released | |
| aud.winback.gate2 | no size | never | nothing | no SQL exists | |
| aud.reconversion.returning | live query | email+sms | on trigger | reconversion | 90d rule |
| aud.nurture.by-product | 7 to 38 each | unknown | nurture-product | 22 lists | |
| aud.welcome.sms-opted-in | 221 | sms | on lead create | welcome-sms | Brevo list 68 |
Compose · Messages
3 from winback-2026.messages.yaml, 3 illustrativeCompose is content, not control. Nothing on this screen pauses,
resumes or drains anything: those verbs live on the journeys that use these
messages, not here. The msg.winback-* rows are loaded from
campaigns/lifecycle/winback-2026.messages.yaml: three touches, all status
approved, sourced from Njui's approved campaign copy. The open/no-open
fork and its unapproved msg.winback-touch-2b are RESOLVED (2026-10-03, Alecia's
decision) and no longer exist in this registry.
| Message | Stage | Blocks | Channel | Needs | If absent | Variants |
|---|---|---|---|---|---|---|
| msg.winback-touch-1 | approved | none | 2 attrs | abort | 1 | |
| msg.winback-touch-2 | approved | none | 2 attrs | abort | 1 | |
| msg.winback-touch-3 | approved | none | 2 attrs | abort | 1 | |
| msg.cart.abandoned | draft | 7 blocks | 3 attrs | omit | 6 | |
| msg.ambassador.invite | draft | 6 blocks | 2 attrs | refuse | 2 | |
| msg.seasonal.roundup | not started | list shape | unknown | omit | unknown |
Compose · Email builder
Email Welcome Template 101 · view only: marketers view, engineering authorsEngineering owns the gate, adapters, schema, validator and block authoring. Marketers view a block's rendered role and absent-handling and where it is used; editing a block is a code change and a review, same as the gate. These are the 8 blocks in the library, as tiles.
mastheadview onlygreetingview onlybodyview onlyitem_rowview onlyctaview onlydividerview onlysignoffview onlyfooterview onlyRecipients for this message come from an audience computed in the warehouse. The builder selects one; it does not define one.
| Audience | Size | Channel | Used by |
|---|---|---|---|
| aud.winback.gate1-pilot | 150 | winback-2026 | |
| aud.winback.gate1-rest | 1,648 | wave 2 | |
| aud.winback.gate2 | no size | nothing | |
| aud.reconversion.returning | live query | email+sms | reconversion |
| aud.nurture.by-product | 7 to 38 each | nurture-product | |
| aud.welcome.sms-opted-in | 221 | sms | welcome-sms |
Merge fields render as chips in the preview, not raw placeholder syntax, so a marketer can see which parts of the body are per-person before anything sends.
Images and files referenced by the blocks above.
| Asset | Type | Used by |
|---|---|---|
| masthead-logo.png | image | masthead block |
| brand-signoff.png | image | signoff block |
| product-roundup-hero.jpg | image | msg.seasonal.roundup (not started) |
Preview
Test and Preview
Preview renders a file for review. There is no send-test control
here: a preview is a file, not a send. See feedback_preview_not_test_sends.md.
Architecture
LimeJourney's published backend components, mapped to oursBoxes and labelled arrows, the shape of LimeJourney's own backend diagram: event sources into webhook intake, into the warehouse (bronze, silver, gold, where segments are computed), into the DBOS journey engine, through the send-time GATE before every send, out to Brevo and Mailtrap. Dashed boxes are GAPs: nothing is invented to fill them.
The table below is evidence under the diagram, not the view: each row traces to the repo doc or code line that verified it.