Reads your store, once.
The brand-extraction agent crawls your storefront and samples your typography, colors, voice, logo, and catalog into a single profile every email uses forever.
Woven Reach reads your storefront — colors, copy, catalog, the way you actually sound — and sends abandoned-cart emails that are unmistakably yours. No templates. No campaign builder. No drag-and-drop.
Your Stormframe is still here
The Crag Bib 3L is running low in your size.
You left the Stormframe Mid and the Crag Bib 3L in your cart. Both are built for actual storms — and both are running low in your sizes. If they're still on your list, this is a good moment.
— The Glacier Goods team
Features
Generic timer apps blast templated guilt-trips. Enterprise platforms demand a copywriter on call. Woven Reach is what fits in the middle — simple to install, actually smart about how it recovers carts.
The brand-extraction agent crawls your storefront and samples your typography, colors, voice, logo, and catalog into a single profile every email uses forever.
A senior brand-copywriter agent generates each email from your profile and the cart contents. Measured for outdoor gear, warm for bakeries, technical for tools.
A four-touch sequence at 30 min, 4 hr, 24 hr, and 72 hr — visible as a flowchart from day one. Every step is a typed contract, durable across deploys.
Suppression lists, bounce handling, and quiet-hours are first-class. Verified sender domain through Resend — no DNS surgery, no SMTP keys.
Every send, suppression, click, and conversion is recorded against the workflow step that produced it. The graph you watch is the graph that runs.
workflow.sleep(72h) survives every release, every restart, every Friday afternoon. Your three-day touchpoint will fire.
Under the hood
A graph-based workflow runs your recovery — each step a typed Zod contract, each edge an observable transition. The graph below is real. It's the same one executing in production right now.
// app/contracts/campaign.ts export const CampaignNode = z.object({ id: z.string(), position: z.object({ x: z.number(), y: z.number() }), data: z.object({ label: z.string(), type: z.enum(["trigger", "wait", "check", "action", "end"]), waitDuration: z.number().optional(), templateKey: z.string().optional(), }), }); // Every step is a typed contract. Drift is impossible. const step: WorkflowStep<CampaignNode> = ...
workflow.sleep(72h) survives deploys, restarts, and Friday afternoons. Your three-day touchpoint will fire.
Voice gallery
Same trigger — a forgotten cart, 4 hours in. Three real merchant brand profiles. Three emails no template engine would have produced. That's the difference between "AI email" and the email that sounds like you.
You left the Stormframe Mid and the Crag Bib 3L in your cart. Both are built for actual storms — and both are running low in your sizes. If they're still on your list, this is a good moment.
We hand-grind a small batch of the Nakiri 165 each month. The one you had in your cart is still on the bench — I haven't oiled it yet. If you'd like it, it'll be in the post tomorrow.
…you actually want the country loaf and the brioche knots you left in the basket. We only bake what's pre-ordered by 6am — so this is your friendly nudge. The dough is waiting.
"It's the first recovery tool that didn't make our brand sound like an apology. The emails read like our team actually wrote them — because in every way that matters, they did."
Pilot results · 12 weeks · n = 23 shops
How it works
One click from the Shopify App Store. We install inside your Admin — no DNS, no SMTP keys. Sender domain verified automatically through Resend.
Under 60 secondsThe brand-extraction agent crawls your storefront, samples typography, colors, voice, logo, and catalog into a single profile your emails will use forever. You watch it happen, stage by stage.
30–90 secondsFour-touch sequence at 30 min, 4 hr, 24 hr, and 72 hr — visible as a flowchart from day one. Every step is durable. Your three-day touchpoint will fire whether we ship a release or not.
Then automatic, foreverInstall
Three clicks from the Shopify App Store to a live recovery campaign in your brand voice. Free up to 50 recoveries / month — pay only on revenue you make back.