Bouguessa
Shopify Plus luxury fashion — rebuilt for editorial publishing speed when headless was costing every campaign.

Led design and Shopify systems on a Plus rebuild so merchandising and editorial could ship campaigns in days, not release trains — with Git rollback, multi-market stores, and docs written for humans and agents alike.

Bouguessa is luxury fashion with magazine-grade publishing ambitions. When I joined as lead designer on Shopify systems, the storefront was headless, expensive to change, and slow to ship — every campaign felt like a release event.
Problem
The visible problem was velocity: editorial and merchandising could not move at the cadence the brand wanted. The deeper problem was knowledge — architecture, conventions, and “how we ship” lived in people’s heads. Onboarding a collaborator cost roughly a week before they could touch the theme safely.
Luxury commerce still needs reliability: rollback, multi-market correctness, and product data dense enough for recommendations — not just pretty grids.

Context
Business goal: publish editorial campaigns and merchandised sections at the speed of a lookbook — same-day when possible — without abandoning Shopify for ops, checkout, and regional stores (bouguessa.com globally, bouguessa.ae and related markets).
Constraints: headless had flex but punished every change; pure Liquid alone would not scale the component and data model the brand needed; AI-assisted development only helps if the repo and Notion docs are agent-legible.
What I owned: theme architecture, design direction on key commerce surfaces, workflow and documentation (Notion as canonical context), and the AI-assisted dev loop (Cursor + Shopify MCP). What I did not own: brand creative direction end-to-end, catalog buying, or Shopify platform internals — those stay with the brand and their ops; I made the substrate they publish through.
Exploration
Stay headless. Rejected for this engagement: flexibility did not pay for the publishing tax. Every section change routed through engineering; campaigns queued behind deploy anxiety.
Minimal Liquid patch on the old stack. Rejected: fast for one fix, brittle for a component library, metaobject-driven campaigns, and attribute-based recommendations — the brand was outgrowing patchwork.
Shopify Plus rebuild, theme architected like an app. Chosen: sections as components, metaobjects as data sources, JSON schemas as contracts — publishing speed on Plus with structure closer to how product teams think.

Technical decisions
Plus over headless, but not “default theme.” Context: headless punished velocity; naive Liquid punished scale. Choice: stay on Plus with a component-library theme architecture. Trade-off: some interactions are harder than in a custom Next front end; publishing speed and merchant-native ops won.
Document for agents from day one. Context: most Shopify docs are written for humans skimming. Choice: Notion conventions structured so Cursor agents and new contributors produce correct theme work on first pass. Trade-off: upfront writing cost; pays off when campaign work does not stall on Slack questions.
Three loops on one substrate — content (editorial, product, campaigns), development (theme, performance), AI (Cursor, Figma MCP for generate/refactor/review). Each loop documented end-to-end so humans and agents share the same entry point.
Git as safety net: local test, branch previews for campaigns, one-command deploy, one-command rollback. Speed without gambling the live store.
Systems and edges
Multi-market (global .com vs UAE .ae and regional stores) means the same section types must not hard-code market assumptions — currency, catalog visibility, and merchandising slots diverge; the theme has to fail visibly when a market’s data is missing, not render a silent blank.
Campaign preview on a theme branch before production publish — editorial can compose a lookbook grid or shoppable story, review on preview, then merge. Rollback stays one command if a campaign misfires after go-live.
Attribute-filtered recommendations (“More Like This”) only work when product metadata is complete — colour, pattern, neckline, sleeve, fabric. Empty or inconsistent attributes produce weak or empty rec rails; bulk tagging and schema discipline became part of the ops loop, not just a dev feature.

Collaboration
The work only lands if merchandising and editorial can compose homepage and campaign sections without waiting on a developer for every publish — the homepage edit patterns in the theme are deliberately producer-facing. Engineering reality on the other side: campaign velocity still hits theme constraints (section contracts, metaobject shapes, preview URLs); my job was to narrow that gap with documented patterns, not pretend marketing can ignore the schema.
With Guy at Sauce we shipped “See it styled” PDP galleries — product photography shown in context on the product page, distinct from complementary “Style it with” upsell galleries. That distinction matters for merchandising: one is editorial proof on the PDP, the other is cross-sell; conflating them confuses both the layout and the buyer.
Video placement was another cross-team fix: Source TV had been global and was surfacing the wrong clips on PDPs. We moved Source TV to a homepage-only block so Source Hero Videos could carry product-specific footage on the PDP — a small IA move that required alignment with how the brand uses film vs product hero.
With Faiza on brand merchandising: she had removed shop-similar when suggestions were wrong for the catalog — the right call at the time. Re-enabling similarity is on my list to revisit with her against attribute quality, not as a default toggle I override from the theme side. That’s collaboration with ops reality, not a finished “recs are back on” claim.
Outcome and evidence
Live storefront: bouguessa.com — editorial grids, shoppable stories, attribute-based recs. Deeper write-up in Notion (linked from this case study). Qualitative outcome: campaigns moved toward same-day brief-to-live for many changes; the brand can operate closer to magazine cadence on a Plus substrate.
- Products tagged with schema in one bulk operation (self-measured)
- 270+
- Deployment time (self-measured)
- Under 2 minutes
- Representative feature path, brief to live (self-measured)
- Same-day
Reconstructed velocity comparison from the engagement (not a controlled before/after study): theme changes that once sat in the 4–6 hour range for a typical feature landed closer to 30–60 minutes with the AI-assisted loop; bulk operations that were manual for hours dropped to roughly 10–15 minutes via GraphQL automation. I label these self-measured because we did not time a fixed task battery upfront.




Reflection
I would measure baseline before changing the stack — one section build, one bulk op, one deploy, timed once. The stats on this page are honest but reconstructed; an afternoon of upfront measurement would make them defensible, not merely directionally true.
We optimized for publishing velocity because it was the visible pain. Nobody agreed upfront on a business metric — campaigns per quarter, revenue per campaign — to know if faster shipping produced better outcomes. Velocity was the proxy; next time I’d name the business number with the brand before calling the engagement a win.
Open thread: agent-written Liquid needs a regression harness over time, not confidence from a good week. Extending Figma variables and Code Connect into theme contracts is the adjacent bet — same “document for agents” move, applied to the design system layer.
Live: bouguessa.com · Case notes: Notion link in project meta
Let's talk about your project.
Avnzor Pulse