Skip to main content
Back to selected work
Luxury Fashion · Shopify Plus

Bouguessa

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

Bouguessa luxury womenswear — live storefront hero from bouguessa.com
Outcome

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 — Luxury Fashion on Shopify Plus

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.

Bouguessa lookbook grid — campaign photography with the products worn in each shot pinned as thumbnails

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.

Bouguessa homepage edits — merchandised sections the team composes and publishes without a developer

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.

Document for agents from the start — Notion convention docs as the single source of context
A campaign from concept to live — brief, preview on a theme branch, then publish
Three loops, one substrate — content, development, and AI loops on the same Shopify Plus codebase

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.

Attribute-filtered recommendations on a garment page

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.

Attribute-filtered recommendations — facets drawn from the garment
Shoppable story overlay — campaign film with featured product tagged inline
Shoppable lookbook frame — garments in the shot tagged with price
Campaign grid — editorial photography as a browsable aisle

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

Want to build something like this?

Let's talk about your project.

Next case study

Avnzor Pulse