
Engagement
Reach customers across channels
Journeys
Journeys are visual, multi-step flows that react to customer behaviour in near-real-time. Each journey is a directed graph of nodes connected by edges; customers enter at the top and traverse nodes until they hit an exit.
Node types
| Node | Purpose |
|---|---|
| Entry | How customers enter: on event, on segment entry, on schedule, or manual list enrollment. |
| Send | Send a template on a chosen channel. |
| Wait | Delay for a fixed duration, until a specific time, or until an event. |
| Condition | Branch based on attribute or event properties. |
| A/B split | Probabilistic split into variants for experimentation. |
| Webhook | Fire an outbound webhook (e.g. to Slack, HubSpot, or your backend). |
| Update attribute | Set or increment a customer attribute inline. |
| Exit | End the run. |
Canvas UX
- Drag nodes from the palette; snap to an 8px grid.
- Click an edge to toggle condition (yes / no).
- Hold Space + drag to pan; scroll to zoom.
- Toggle Show stats to overlay per-node entered / completed / drop% numbers and A/B variant breakdowns.
Example: abandoned cart
- Entry: event
item_added_to_cart. - Wait: 1 hour.
- Condition: did the customer fire
purchase_completed? If yes โ exit. - Send: email โ "Still thinking about it?"
- Wait: 24 hours, with exit condition
purchase_completed. - A/B split: 50% get an SMS reminder, 50% skip.
Safety rails
- One active run per customer per journey unless you explicitly enable re-entry.
- Frequency cap (see Safeguards) applies across all journeys and campaigns.
- Sending paused flag immediately halts all journey sends.
Analytics
The per-node stats overlay reads from journey_node_stats (entered / completed / exited) and journey_variant_stats (per-variant conversions). These tables are updated as runs progress, so the canvas reflects live performance, not a snapshot.