How a small frontend team rebuilt a multi-region eCommerce surface on Shopware 6 — cutting time-to-interactive by ~40%, ditching the legacy theme, and giving merchandisers a dashboard they actually wanted to use.
Horizon Plus is a multi-region fashion brand selling across the EU, UK, and the Middle East. Their existing storefront — built on a heavily customised Shopware 5 theme — was slow to load, difficult to update, and locked their merchandising team into a CMS none of them enjoyed using.
I joined to lead the frontend rebuild on Shopware 6, with a brief to modernise the storefront, move marketing surfaces to Next.js, and ship a merchandising dashboard the ops team could actually drive without help.
Token-driven theme on Shopware 6 + a matching Tailwind layer on Next.js — one source of truth for spacing, type, and color across every surface.
Per-route JS budget enforced in CI. Route-level code splitting, image presets, and a thin Twig layer — no shipping until the page hits its target on a throttled 4G run.
A dashboard built for merchandisers — drop scheduling, hero swaps, region overrides — with role-based access, audit logs, and a friendly Twig-free editor.
Walked the legacy storefront screen by screen. Mapped every CMS field, every regional override, every emergency hack. Wrote the deletion list before writing the build list.
Shipped a token layer (typography, spacing, color, motion) that compiles to both the Shopware Twig theme and a Tailwind preset for the Next.js head. Built 22 base components.
Re-implemented the product, category, and checkout flows. Replaced the regional overrides with a feature-flag store. Each route shipped behind a perf budget enforced in CI.
Built the ops dashboard in parallel — drop scheduling, hero swaps, region overrides, audit log. Spent two afternoons sitting next to the merchandising lead instead of guessing.
Rolled out region by region behind a feature flag. Watched the dashboards. Fixed the long tail. Killed the legacy theme. Went home and slept.
Shopware 6 as the commerce core, a custom Twig theme for the transactional flows, a Next.js head for marketing surfaces, and a typed component library that compiles to both.
Two things, in order. One — I'd ship the dashboard first, even before the storefront rebuild. The merchandising team was the bottleneck for everything else; unblocking them sooner would have compounded.
Two — I'd be more aggressive about deleting legacy regional overrides on day one. We kept a few “in case”, and every one of them came back to haunt us during launch. Old code is rarely as innocent as it looks.