A walker in a rust beanie and oatmeal scarf sitting on a dry stone wall above the sea

Wrenfold

The operations and data behind the storefront.

A fictional British accessories brand with lots of small SKUs. I built it on Shopify to show master data, SKU generation, 3PL stock reconciliation, Shopify Flow automation and a weekly trading dashboard.

Visit the live store wrenfold.dev.jiggyjaw.comPassword-protected development store · password on request

Focus
Operations and data
Platform
Shopify Plus dev store
Theme
Horizon 4.3.0, extended
Paid apps
None (Flow is free)
Built
Oct 2026, Hugo King

Why this store exists

Most of an e-commerce job happens after the theme is finished.

Socks, hats and scarves come in many colours and sizes, so a small range quickly becomes dozens of SKUs. Each one needs a barcode, a cost, a weight and customs data, and has to match what the warehouse holds.

Wrenfold asks how a small team keeps that under control: one source of truth for product data, checks that stop bad data before it reaches Shopify or the 3PL, automations that flag problems, and one weekly view of how trading went and what to do about it.

Most of my Shopify work is for clients, so I built this brand myself to show the skills without anything confidential. Products, customers and marketing figures are illustrative.

What it covers
Master data and SKU generation01
Customs, cost and weight on every SKU02
3PL stock reconciliation03
Weekly trading dashboard04
Shopify Flow automations05
Stock and dispatch on the product page06

The brand

Good kit for grey days.

Wool socks, beanies, scarves, a waxed cap and a canvas tote, made in Britain and Portugal. The identity borrows from shipping labels and warehouse tape: plain, sturdy, and clear about the numbers.

Limestone#F3F1EC
Stone#E4E0D6
Grit#CFC9BC
Slate#2E3A46
Rust#B5532E
Moss#4F6B3A
Display and body · Archivo

Order by 2pm.

Data · IBM Plex Mono

WF-SK01-RST-M
2000000000084

Merino rib socks in four colours
Merino Rib Sock£16 · 12 SKUs
Cushioned walking socks
Walking Sock£18 · 6 SKUs
Sock gift box
Sock Gift Box£45 · 3 SKUs
Lambswool beanies
Lambswool Beanie£32 · 4 SKUs
Waxed cotton cap
Waxed Cotton Cap£35 · 2 SKUs
Fisherman rib scarf
Fisherman Scarf£58 · 2 SKUs
Canvas tote bag
Canvas Tote£45 · 1 SKU
01 / Master data

One sheet is the source of truth, and it checks itself.

What
A Google Sheet holds every style: colours, sizes, price, unit cost, packed weight, HS code, country of origin and status. A script turns 8 styles into 32 SKUs, one per style, colour and size, each with a GTIN-13 barcode.
Why
Bad data is cheapest to fix while someone is typing it. The sheet flags duplicates, unknown colours, missing customs data and thin margins with live formulas, and the loader refuses to publish a style with a blocking problem.
How
A Python loader reads the sheet, generates and validates SKUs, and pushes each passing style with one productSet call. Barcodes already issued never change, and a retired SKU's barcode is never reused.

The SKUs tab as it stood before the first run. Red cells are blockers; amber is a margin warning that still publishes.

Run 1

4 of 7 styles published

  • Two styles shared one style code, so two SKUs clashed
  • Colour code NAV isn't in the colour list
  • Gift box had no HS code
  • Scarf had no weight
Run 2

7 of 7 styles, 30 SKUs live

  • Fixed in the sheet, re-run
  • Every barcode already issued kept
  • 3 new barcodes, above the high-water mark
  • 1 margin warning left open on purpose
02 / Shopify

Customs, cost and weight on every variant, from day one.

What
Each variant in Shopify carries its SKU, barcode, unit cost, packed weight, HS code and country of origin, straight from the sheet.
Why
Duty is calculated correctly for EU and US orders, shipping rates use real weights, and margin reports work without anyone typing costs in later.
Stock
The loader sets stock only when a product is first created. After that, stock belongs to the warehouse feed and the reconciliation, so a data push can never overwrite a real count.

Product variant

Merino Rib Sock · Rust / M (UK 6-8)

£16.00 · Tracked · Deny overselling

SKU
WF-SK01-RST-M
Barcode
2000000000084
Unit cost
£4.20
Weight
60 g
HS code
611594
Origin
PT

Values as returned by the Shopify Admin API for one variant.

03 / 3PL

The warehouse file and Shopify, compared SKU by SKU.

What
A script compares the 3PL's stock export with Shopify and gives every mismatch a reason, an action and a priority.
Why
If Shopify thinks it has more than the warehouse, the store oversells. If the warehouse holds stock Shopify doesn't know about, sales are lost. Barcode mismatches break goods-in.
Data
The 3PL file is a sample in a standard warehouse export layout, built from the store's real stock with seeded problems for the check to find. A real feed drops in without code changes.
SKUPriorityIssueShopify3PLAction
WF-SK01-OAT-MHighShopify over 3PL by 42723Set Shopify to the 3PL figure now, then ask for a cycle count.
WF-SC01-SLT-OSHighBarcode mismatch2121Update the EAN at the 3PL from the master data sheet.
WF-CP01-NVY-OSHighMissing at 3PL23–Send the product master to the 3PL and book in stock.
WF-BN01-SLT-OSMedium3PL over Shopify by 66167Confirm the goods-in with the 3PL and adjust Shopify up.
WF-CP01-NAV-OSMediumUnknown to Shopify–40Re-label to the current SKU or retire it at the 3PL.
WF-SK02-HTH-LLowOut by 12625Include in the next cycle count.
WF-TB01-NAT-OSLow3 units quarantined5151Agree a write-off or return to supplier.

The two cap SKUs connect back to feature 01: NAV is the colour code the sheet rejected, and NVY is its corrected replacement that was never sent to the warehouse.

04 / Reporting

A weekly trading view across Shopify, GA4, email and paid social.

What
A script pulls Shopify orders and stock, joins GA4 sessions, Meta and TikTok spend and Omnisend campaign results, and produces conversion rate, AOV, repeat rate, email share, blended CAC, ROAS and weeks of stock cover, with a ranked list of actions.
Data
183 Shopify orders over eight weeks are real store data. GA4, Meta, TikTok and Omnisend are sample exports in each tool's own column format, since a fictional brand can't connect them.
Inbox · Wrenfold new-order notifications
An email inbox listing Wrenfold new-order notifications, such as Order #1164 placed by Ewan Pearce and Order #1030 placed by Ewan Walker
Proof the orders are real Shopify orders: the order history was loaded through the Admin API, and Shopify sent its standard new-order notification, just as it would for a real sale. The customers are fictional.
Revenue£1,936+3% wk
Orders31−9% wk
AOV£62.46+13% wk
Conversion0.87%−0.1 pts
Repeat rate13%+1 pt
Blended CAC£15.93+2% wk

Weekly revenue, 31 Aug to 24 Oct

0 £500 £1,000 £1,500 £2,000 766 31 Aug 1,009 7 Sep 923 14 Sep 951 21 Sep 1,350 28 Sep 1,545 5 Oct 1,880 12 Oct 1,936 19 Oct

Revenue inc. VAT and shipping. The email campaign landed in w/c 5 Oct; Meta prospecting started w/c 12 Oct.

Return on ad spend, w/c 19 Oct

Meta, Shopify1.29x
Meta, reported1.76x
TikTok, Shopify1.48x
TikTok, reported2.73x

Platforms claim more sales than Shopify can tie to them. Spend decisions use the Shopify figure, with the platform's beside it.

Top sellers, last 4 weeks

  1. Merino Rib Sock80
  2. Lambswool Beanie55
  3. Cushioned Walking Sock39
  4. Merino Sock Gift Box20
  5. Canvas Tote17

Open the interactive dashboard →

Top actions the pack raised for the week: fix three high-priority 3PL issues before Monday's pick, raise a PO for the out-of-stock Charcoal walking sock in L, reorder the Rust beanie (one week of cover), and cap Meta prospecting until it returns more than 2x on Shopify-attributed revenue.

05 / Automation

Shopify Flow does the watching.

Three workflows, live on the store. Two started from Shopify's templates and were edited; the third I described to Flow's built-in assistant, then checked against a real order before turning it on.

Inventory quantity changed

Low stock

When a variant drops to 5 or fewer, email the ops inbox and tag the product low-stock. The threshold matches the theme setting and the master sheet.

Order created

First and repeat orders

Tag a customer's first order, and tag returning customers repeat-customer for email segments.

Order created

High-value order

Orders of £150 or more get a high-value tag and an email to ops to add a handwritten note and check the address.

Flow · High-value order
Flow editor showing the high-value order workflow
Flow · Low stock
Flow editor showing the low stock workflow: trigger, condition, email to ops and product tag
06 / Storefront

Stock and dispatch, told honestly on the product page.

Stock
"In stock", "Only 3 left" or "Sold out" for the colour and size the shopper has picked, updating as they switch options.
Dispatch
"Order in the next 2 hrs 14 mins for dispatch today", worked out in UK time. It skips weekends and listed bank holidays, and hides when the option is sold out.
How
Two theme blocks. A small custom element re-renders them from the HTML Horizon already fetches on a variant change, so there are no extra requests, and the countdown runs in the browser so cached pages stay right.
wrenfold.dev.jiggyjaw.com/products/merino-rib-sock
Merino Rib Sock product page with In stock message and dispatch notice

Captured on a Sunday, so the notice reads "Order now for dispatch tomorrow".

How it fits together

One loop from spreadsheet to Monday's actions.

Master data sheet styles · checks master_data.py SKUs · validate Shopify products · orders Shopify Flow alerts · tags 3PL · GA4 · Meta TikTok · Omnisend weekly_kpis.py reconcile · KPIs Trading dashboard KPIs · actions sample exports today, APIs later Issues found in the dashboard are fixed in the sheet, and the loop runs again.

By the numbers

Small brand, real operational load.

32SKUs generated from 8 styles
4data problems stopped before Shopify
183orders over 8 weeks
73PL mismatches found
3Flow workflows live
0paid apps

Master data and SKUs

One source of truth, SKU and barcode generation, and checks that keep Shopify and the 3PL consistent.

Stock and fulfilment

Reconciliation with a recommended action for every mismatch, low-stock alerts and honest stock messages.

Reporting and automation

A weekly trading pack across Shopify, GA4, email and paid social, and Flow automations that cut manual checks.