FIG.1
DECKLE / AUTOMATE
AUTOMATE · 02

Workflows that actually branch.

Six composable step types, fail-closed if/else lanes and wait-for-event with a timeout. Author from the visual builder, an AI prompt, the API or an MCP agent — every path runs the same validation.

THE CANVAS

A flow is a graph, not a list.

Drop steps onto the canvas, wire them together and let contacts move through in real time. Every trigger enrolls a contact and walks them node by node until they finish or exit — no black boxes, no guesswork.

  • Two triggers — a new subscriber, or a custom event like order.created or trial.started.
  • Six step types — Email, Delay, Branch, Wait-for-event, Action and Condition.
  • Live position — see exactly where every enrolled contact sits on the graph.
Open the builder
FIG.2
trigger · trial.started
custom event
send · welcome
template · onboarding
wait · project.created
timeout 3d
branch · activated?
two-way if / else
Yes
send · pro tips
No
send · nudge + demo
STEP TYPES

Six primitives, every workflow.

Each step does one thing and composes cleanly with the rest — enough grammar to model onboarding, retention, dunning or a product tour.

Email

Send a designed template with merge tags resolved per contact. Every send tracks opens and clicks at the step level.

Delay

Pause the contact for a fixed duration — minutes, hours or days — before the next step fires. Perfect for pacing a sequence.

Branch

Split the flow two ways on a rule. Yes and No lanes run side by side so both outcomes are always visible.

Wait-for-event

Hold until a custom event arrives — or move on when a timeout expires. Great for "did they finish setup?" gates.

Action

Mutate the contact inline — unsubscribe, set a custom field or add a tag — without leaving the flow.

Condition

Gate the path on the contact's current state. Only matching contacts continue; the rest exit cleanly.

FAIL-CLOSED

Branches that never guess.

When a branch can't evaluate — a missing field, an event that never fired — the contact takes the No lane by default. No silent sends to people who don't qualify, no accidental blasts down the wrong path.

  • Two-way if / else — every branch has an explicit Yes and No lane.
  • Fail-closed default — unresolved conditions route to No, never Yes.
  • Side-by-side lanes — both outcomes stay on-canvas so nothing hides.
How branching resolves
FIG.3
branch · plan == pro?
two-way if / else
Yes
send · advanced tips
action · tag "pro"
No · default
send · upgrade nudge
wait · upgrade.done
WAIT-FOR-EVENT

Pause on real behavior, not the clock alone.

Hold a contact at a step until they do the thing you care about — create a project, place an order, invite a teammate. Set a timeout so no one waits forever, and the flow keeps moving when the deadline passes.

  • Any custom event — the same events you send to the API resume the flow.
  • Timeout escape — set a window; a no-show follows the timeout path.
  • Behavior-driven — pair with a branch to reward the ones who converted.
Send an event
FIG.4
resume.ts
// contact is paused at wait · project.created
await deckle.events.track({
  email: 'ada@acme.com',
  event: 'project.created',
  properties: { template: 'starter' },
})
// → flow resumes; otherwise timeout 3d fires
ANALYTICS

See where every contact stands.

An enrollment funnel counts contacts through Enrolled → In progress → Completed → Exited with a live completion rate. Every Email step reports its own open and click rate, and a live view pins exactly where contacts are right now.

  • Enrollment funnel — Enrolled, In progress, Completed, Exited + completion rate.
  • Per-step engagement — open and click rate on each Email step.
  • Live positions — a running tally of where contacts are on the graph.
Read the analytics guide
FIG.5
automation / onboarding-v2
completion_rate 0.62 0.00
enrolled
1,248
in_progress
311
completed
774
exited
163
LIBRARY

61 prebuilt flows across 8 categories.

Start from a proven pattern and rewire it to your product. Every template opens straight into the builder — clone, tweak, ship.

deckle/onboarding
activation-nudge
Welcome, wait for the first key action, then branch on it.
onboardingbranch
deckle/retention
win-back-lapsed
Re-engage quiet contacts with a timed nudge and an offer.
retentionwait
deckle/ecommerce
abandoned-checkout
Wait for order.created; on timeout, remind with the cart.
ecommercetimeout
deckle/billing
trial-dunning
Sequence reminders before trial end, branch on upgrade.
billingdelay
deckle/product
feature-adoption
Nudge toward a new feature, tag contacts who try it.
productaction
deckle/events
webinar-followup
Wait for attended, else send the recording, then a survey.
eventscondition
FOUR WAYS IN

Author however you work.

Draw a flow on the canvas, describe it to the AI, POST it through the REST API, or let an MCP agent build it for you. However it's created, the same validation runs before a single contact enrolls.

  • Visual builder — drag, wire and configure steps on the canvas.
  • AI prompt — describe the flow in a sentence and edit the result.
  • REST API + MCP — programmatic authoring from your stack or an agent.
Automations API
FIG.6
create-flow.ts
await deckle.automations.create({
  name: 'trial-onboarding',
  trigger: { type: 'event', event: 'trial.started' },
  steps: [
    { type: 'email', template: 'welcome' },
    { type: 'wait', event: 'project.created', timeout: '3d' },
    { type: 'branch', on: 'activated' },
  ],
})
// validated identically to the visual builder
Get started

Own your sending.

Free to start, no credit card. Send from your verified domain.