The flow
- Compose. Brand → Campaigns → New. Pick a template or start blank. Visual + HTML modes side-by-side.
- Pick recipients. Filter by tag, manual list, or "all subscribed contacts".
- Schedule or send. Send now (immediate) or pick a UTC datetime for the cron to release later.
- Watch the send. Real-time per-contact status: queued → sent → opened → clicked.
Editor modes
- Visual: Tiptap-based rich editor. Block dropdown, color + highlight, alignment, links, resizable images. Outputs clean inline HTML suitable for every email client.
- HTML: CodeMirror-based syntax-highlighted editor for hand-crafting templates. Useful for porting designs from React Email or MJML output.
- Toggle between them at any time — your edits survive the round-trip.
Variables
Reference contact fields with double curly braces:
Hi {{first_name}},
Thanks for trying our beta. We're shipping {{custom_field.next_feature}}
next week.{{email}},{{first_name}},{{last_name}}— built-in.{{custom_field.<key>}}— anything you set on the contact.- Missing values render as empty string (won't break the send).
Tracking
- Opens: tracked via a 1×1 pixel served from
/api/e/o/<token>. - Clicks: rewritten through
/api/e/c/<token>with original URL preserved. - Geo: IPs lookup against the bundled MaxMind DB. Country + city per click.
Unsubscribe is automatic
Every campaign includes the RFC 8058 List-Unsubscribe header and a footer link. Gmail and Apple Mail render the one-click button natively.
Analytics
Each campaign gets its own analytics page: time-series, top links, recipient table with per-row event timeline, geo map. Public API for programmatic access.