Campaign builder and reporting for a cart-recovery platform by Zach SmythCampaign builder and reporting for a cart-recovery platform by Zach Smyth

Campaign builder and reporting for a cart-recovery platform

Zach Smyth

Zach Smyth

Overview

CartStack recovers revenue that e-commerce stores would otherwise lose to abandoned carts. I designed the product — the campaign builder that decides who gets contacted and when, the email editor that composes what they get, and the reporting that proves the whole thing paid for itself. Alongside those sit contacts, onboarding, billing, install and upgrade flows.
The campaign canvas — the recovery sequence starts as a trigger and builds out as nodes, not as a settings form
The campaign canvas — the recovery sequence starts as a trigger and builds out as nodes, not as a settings form

The challenge

A recovery campaign is a branching, time-delayed system — trigger, wait, send, split, measure — and most tools express that as a settings form, which hides the shape of the thing being built. It also has to be legible to a store owner who is not a marketing operations specialist. And because the product's entire promise is recovered revenue, the reporting can't be a generic email dashboard: it has to lead with money.
The campaign report — recovered revenue first, then offer and email performance as labelled rates rather than raw counts
The campaign report — recovered revenue first, then offer and email performance as labelled rates rather than raw counts

Approach

Designed the campaign as a canvas rather than a form — trigger, delay and send become nodes on a visual flow, so the sequence is something you look at instead of something you reconstruct in your head.
Put performance on the nodes themselves — each email in the flow carries its own sent / opened / clicked numbers, so reading the campaign and reading its results are the same act.
Designed A/B testing into the canvas as a split with both arms side by side — opens, clicks, conversions, recovered orders and recovered revenue per variant, and a single Declare Winner control.
Built a drag-and-drop email editor with a content-block palette and a live preview, plus an HTML editor tab for the people who want to write it themselves.
Led the campaign report with revenue — recovered revenue, average order value, assisted revenue and share of total — then delivery, opens, clicks and conversion as labelled rates rather than raw counts.
Designed the surrounding product on a shadcn-based component system so signup, onboarding, contacts, billing, install and upgrade all read as one application.

The solution

A product where the campaign is visible. The builder shows the whole recovery sequence as a flow, with live performance on each step and A/B splits compared in place. The email editor composes the message without leaving the system, in drag-and-drop or raw HTML. The report opens with recovered revenue rather than open rates. And the rest of the application — contacts, onboarding, billing, install, upgrade, toasts — is built from one shared component system, so the product feels like a product rather than a set of screens.
Contacts — the captured visitors behind the campaign, filterable and exportable
Contacts — the captured visitors behind the campaign, filterable and exportable
Like this project

Posted Sep 28, 2026

Designed a visual campaign builder, an email editor and reporting built around the only question the buyer asks: how much revenue did this recover?