Shopify, Engineering case study

Made-to-Measure
Shopify Platform.

A body-measurement pattern-fitting system built into a Shopify theme, plus a full email-automation program that replaced every default transactional email with ten custom, on-brand flows.

Role
Shopify theme dev + email automation
Client
AU made-to-measure fashion brand
Platform
Shopify · Liquid (live)
Tools
Liquid, JS, Klaviyo API, Shopify CLI

Scroll to watch it work. Or hold.

Feature 01Fit data
01 / Two systems02 / Bridge03 / Measure04 / Save As New
Shopify: 0 fit fields

Fit data lives outside the shop.

Measurements sit in a separate pattern service, and Shopify knows nothing about them.

The theme talks to it directly.

Plain Liquid and vanilla JavaScript read and write through a REST API the theme does not control.

Values are checked as you type.

Each measurement has a valid range, so a bad value is caught on the spot.

Only a valid pattern is stored.

A fully valid set becomes a saved pattern, ready for the cart.

Feature 02Pattern editor
01 / Library02 / Edit03 / Save As New04 / Filter

Saved patterns, one tap away.

A returning customer reopens a pattern instead of measuring again.

Tweak it on the product page.

The editor opens inline, so nothing sends the customer away.

Clone, never overwrite.

The copy is date-stamped and numbered, and the original stays exactly as it was.

Filtered, but never blocked.

The list narrows to the product gender and falls back to everything when nothing matches.

Feature 03Cart gating
01 / Locked02 / Pick03 / Switch04 / Safe
locked

No fit, no cart.

Add to cart stays locked until valid fit data stands behind the choice.

Choose a saved pattern.

Selecting a saved pattern unlocks the button.

Or start a fresh fitting.

Switching clears the old choice, so the two never mix. A sleeve of 112 is refused until it reads 64.

Never a broken state.

Cancel an edit half way and the button goes back to locked.

Feature 04Theme debugging
01 / Login02 / Menu03 / Bytes04 / Ship
helper copies 3

One login redirect, not three.

The layout carries the same function three times, each fighting the others.

Blank store menu, then a fallback.

The store menu reads a metafield only, so it goes blank whenever that is empty.

Trust the deployed bytes.

A font size looks stuck, so the live theme and CDN bytes are read directly.

Backup and tag before every push.

Every push goes out behind a full backup and a git tag.

Feature 05Email flows
01 / Defaults02 / Trigger03 / Merge04 / Live
branded 0/10

Ten stock emails, replaced.

Every default Shopify email is swapped for an on-brand flow.

An event starts each flow.

Orders, shipping, pickup, sign-ups and appointments each fire their own flow.

Templates fill from real data.

Line items, addresses, payment method and options like collar and cuff are mapped in.

All ten are live.

Confirmation, shipping, delivery, pickup, welcome, account and appointment emails.

Feature 06On the phone
01 / Desk02 / Reflow03 / Phone

Built at a desk first.

The collection grid and the fitting form sit side by side.

One column, same logic.

The grid and the configurator stack, and the gating stays underneath.

Fitted from a phone.

Most customers start the fitting flow on mobile.

ProofThe live storefront
Live storefront home page: full-bleed hero and stacked collection tiles, brand marks removed
The live storefront, captured from production and cropped to the first screen. The client is shown anonymously: the wordmark is hidden and the collection codes are blurred out.
Live collection grid: product cards with variant swatches and prices, collection codes removed
The production collection grid the fitting flow starts from. Collection codes blurred, the rest is the live theme.
storefront
ShopGet fittedCollectionsAccount
Made to measure.
Fitted, not sized.
fitted in 10 minutes
delivered in 2 weeks
The collection grid a customer lands on, with the fitting entry point sitting on the product itself rather than in a separate flow.
get fitted
ShopGet fittedCollectionsAccount
Fine cotton · Men
Color
Collar
Tuck
get fitted in store
order before 12pm · ship in 2 weeks
The measurement step: values validated as they are entered, so a bad pattern never reaches the cart.
saved patterns
ShopGet fittedCollectionsAccount
Your saved patterns
Fitted 12 Jun
36/C · 172cm · slv 61 · col 39
Fitted 3 Mar (2)
36/C · 172cm · slv 60 · col 39
save as new, never overwrite
A returning customer reopens, renames or clones a saved pattern instead of measuring again.
pattern editor
ShopGet fittedCollectionsAccount
Core twill
in stock
Oxford weave
in stock
Brushed flannel
in stock
Cloning date-stamps a new pattern rather than silently overwriting the original submission.

An illustrated recreation of the editor, not a screenshot. It sits behind a customer login and holds real fit data, so the flow is redrawn rather than captured. The screens follow the real layout so the work is legible, while no client name, logo or customer data is reproduced anywhere.

Read the full write-up
01Problem

A generic theme can't fit a made-to-measure product.

The brand sells made-to-measure shirts and suits. A customer's fit data (band, cup, height, sleeve, collar, and more) lives in a separate pattern-matching service, not in Shopify. The stock theme had no concept of it: no way to show a customer their saved patterns, edit one, or stop an add-to-cart that had no valid fit data behind it.

The constraint

Every read and write had to go through an external REST API the theme didn't control, inside a pure Liquid + vanilla-JS theme with no build pipeline. No React, no bundler, no shortcuts.

02Goal

Turn a stock theme into a fitting workstation.

The editor had to live inline on the product page, not in a separate app tab, and had to survive real customer behaviour: renaming a pattern, cloning one instead of overwriting it, bailing out mid-edit, and switching between a saved pattern and a fresh fitting without ever showing a broken state.

03Editor

An inline pattern editor, wired to an external API.

The flow below is the spine of the feature: a customer gets fitted once, then can reopen, tweak, rename, or clone that pattern straight from the product page.

Get Fitted
Edit Pattern
Save As New
Select Other
Add to Cart
Save As New, not overwrite

Cloning a pattern auto-renames it (date-stamped, with an incrementing suffix) instead of silently overwriting the original submission.

Gender filter that never blocks

Patterns are filtered to the product's gender when a match exists, but fall back to showing everything rather than hiding the editor when the account has none. A stricter version shipped first and was rolled back after it hid the dropdown too aggressively.

04Debugging

The theme bugs were in the small print.

A login redirect bug traced back to three copies of the same broken helper function layered on top of each other in the theme layout, each fighting the others with !important overrides. A "preferred store" menu going blank turned out to be a metafield-only lookup with no fallback, fixed with a local-storage read the profile page was already writing to.

Trust the deployed bytes, not your browser

A font-size change looked stuck at 12px in the browser no matter what shipped. Rather than chase a phantom CSS bug, the fix was verified against a raw pull of the live theme and the CDN asset bytes directly. It was rendering correctly. The browser's local rendering was the outlier, not the deploy.

05Email automation

Ten Klaviyo flows replaced Shopify's defaults.

Order confirmation, shipping, delivery, in-store collection, store pickup ready, password reset, welcome, account activation, and two appointment flows, all rebuilt as dynamic templates mapped to real Shopify order and customer data: line items, addresses, payment method, and per-item variant options like collar and cuff style.

Order Confirmationlive
Shipping Notificationlive
Delivery Confirmationlive
Order Collectedlive
Store Collection Readylive
Welcome Emaillive
Account Activationlive
Password Resetlive
Appointment Confirmationlive
Appointment Reminderlive
06On the phone

Get fitted from a phone, not just a desk.

Most customers start the fitting flow on mobile. The configurator and collection grid both reflow to a single column, with the same add-to-cart gating logic underneath.

Made to measure.
view collection
The collection grid, single column.
your patterns
Fitted 12 Jun
36/C · 172cm · slv 61
Fitted 3 Mar (2)
36/C · 172cm · slv 60
save as new
The configurator, with the same add-to-cart gating.
configure
price
$189
ready
2wk
add to cart
Product detail with the fitting entry point.
07Outcome

Shipped, live, and still evolving.

The fitting editor and all ten email flows are live in production. Every theme push went out behind a full backup and a git tag, so every round of client feedback could ship the same day without risking the storefront. It's an ongoing engagement: new rounds of fixes and refinements still come in and go out the same way.

Outcome in numbers: 10 Klaviyo flows live, replacing every default transactional email, 3 stacked copies of one broken login helper, untangled.

Next case study
Spotter ELD