Skip to main content

Journey Builder

The journey builder is a visual editor for designing the structure of a journey. It uses a drag-and-drop canvas where each node represents a step and connections define the execution order.

Builder Interface

The builder consists of three areas:

  • Node palette (left) -- Drag step types onto the canvas.
  • Visual canvas (center) -- Arrange and connect steps. Supports zoom, pan, and auto-layout.
  • Properties panel (right) -- Configure the selected step's settings.

Node Types

Each node in a journey graph serves a specific role:

Node TypeDescription
TRIGGEREntry point of the journey. Defines when and how users enter (URL match, custom event, element click, or manual). See "Configuring Triggers".
CONTENTRenders a content item (tooltip, beacon, announcement, survey, task list) or launches an existing flow. The journey advances when it finishes.
WAITPauses the journey for a fixed duration or until a specific calendar date.
WAIT_FOR_EVENTPauses until the user performs a specific action. Supports a timeout for users who never perform the action.
CONDITIONBranches into two or more paths based on user traits or past actions.
SPLITDistributes users across two or more branches by percentage for A/B experimentation within a journey.
GOAL_CHECKEvaluates whether the user has achieved a goal. Routes to a success or fallback path accordingly.
EXITEnds the journey. Every path must terminate at an EXIT node. Multiple EXIT nodes represent different outcomes.

Configuring Triggers

A TRIGGER node's config carries two fields: triggerType (one of the values below) and triggerConfig (the matching payload, validated as a discriminated union).

triggerTypeFires whentriggerConfig shape
URL_MATCHThe user lands on a URL matching the pattern.{ "matchType": "exact"|"contains"|"startsWith"|"endsWith"|"regex", "pattern": string }
CUSTOM_EVENTA track() call with the configured event name fires.{ "eventName": string }
ELEMENT_CLICKThe user clicks an element matching the CSS selector.{ "selector": string }
MANUALThe journey is enrolled programmatically via the SDK/API.{}

Configuring CONTENT Nodes

A CONTENT node references the artifact it renders via contentId. To launch an existing flow from a journey, set config.contentType: "flow" (or another content type slug like "tooltip", "announcement") so the runtime knows which collection to look the ID up in.

Configuring Wait Delays

WAIT steps accept the following delay options:

  • Fixed duration -- Pause for a set number of hours or days (e.g., wait 3 days before the next step).
  • Until date -- Pause until a specific calendar date and time.
  • Until event -- Pause until the user performs a specific action (e.g., logs in again, visits a page).

Configuring Wait For Event

WAIT_FOR_EVENT nodes pause the journey until the user performs a specific action:

  • Event name — The custom event name to wait for (e.g., "user:feature_used").
  • Timeout — Maximum number of minutes to wait. If the event is not received in time, the user continues down the timeout branch.

Every WAIT_FOR_EVENT node has two outgoing connections: event received and timed out.

Configuring Splits

SPLIT nodes distribute users across branches by percentage:

  • Define two or more outgoing connections from the SPLIT node.
  • Assign a percentage weight to each connection (weights must sum to 100).
  • Assignment is deterministic: a user always takes the same branch across sessions.

Use SPLIT to run A/B tests within a journey — for example, showing different onboarding flows to 50% of new users each.

Configuring Goal Checks

GOAL_CHECK nodes evaluate whether a user has achieved a defined goal:

Goal TypeFires When
eventThe user has tracked a specific custom event
page_visitThe user has visited a specific URL pattern
attribute_matchA user trait matches a condition (e.g., plan === "enterprise")
flow_completedThe user has completed a specific flow

Configure an optional deadline (in days from enrollment). Users who miss the deadline route to the fallback branch.

Condition Branching

CONDITION steps evaluate a rule and route the user down one of two or more paths:

  • User trait conditions -- Branch based on attributes like role, plan, signup date, or custom properties (e.g., if role equals "admin", take path A; otherwise, take path B).
  • Action conditions -- Branch based on whether the user has performed a specific action (e.g., completed a flow, visited a page, clicked a button).
  • Default branch -- Every condition step requires a default (else) branch for users who do not match any defined rule.

Step Ordering and Connections

  1. Hover over a step node to reveal its connection handle.
  2. Drag from the handle to another step to create a connection.
  3. Label connections to describe the transition (e.g., "Flow Completed", "Score >= 8").
  4. Reorder steps by dragging them on the canvas. The builder validates that no steps are orphaned and no infinite loops exist.

Testing Journeys

Before activating a journey, use the built-in test mode:

  1. Click Test Journey in the builder toolbar.
  2. Select a test user or enter a user ID.
  3. Step through the journey manually, verifying that each step renders correctly and transitions fire as expected.
  4. Review the test log for any configuration warnings or errors.