The problem
The store had grown for years through "just add another app" decisions — every new requirement bolted on a new dependency, and the theme had been patched directly so many times that no two pages rendered the same header the same way. Klaviyo had two overlapping lists, three welcome series, and no segmentation between people who'd bought a $90,000 vehicle and people who'd looked at a t-shirt.
The marketing team's frustration wasn't with any single thing. It was that they couldn't make a confident change without breaking something they didn't know about.
The approach
Theme on a clean foundation. We rebuilt the storefront on a current, maintained Shopify base theme and ported only the sections that actually appeared on a live page. Anything that hadn't shipped in six months was left out. Sections were turned into a small, reusable kit so future requirements compose instead of patch.
Klaviyo lifecycle audit + rewrite. Every flow was inventoried before anything was written. The new lifecycle splits prospects, vehicle owners, and accessory-only buyers into distinct paths — and uses metadata from Shopify to suppress the welcome series for people who'd already converted.
n8n as the integration glue. Rather than buy a paid ETL or stand up a custom backend, we used n8n on the EMB instance to bridge Shopify webhooks into Klaviyo segmentation updates. The n8n workflows are version-controlled in the EMB repo so the integration isn't a black box for whoever maintains it next.
The outcome
The marketing team stopped writing apologies for double-sending welcome emails. The home page LCP dropped meaningfully on mobile after the theme cleanup. The lifecycle flows are now documented in plain English next to the n8n diagrams, so the next person who has to touch this — internal hire, external freelancer, whoever — has a chance.
The actual win wasn't the metric; it was that the team trusted their stack again.
A clean theme rebuild on a maintained Shopify base, a Klaviyo lifecycle that respects purchase history, and an n8n bridge that keeps the two in sync without a paid ETL middle layer.