Case study · Retail & Wholesale
Two storefronts, one Shopify codebase, for a Canadian soccer retailer.
A wholesale arm running on spreadsheets, email and a legacy POS export, and a retail site due for a rebuild at the same time. We put both on one Shopify Plus codebase: club-only pricing and net terms for the trade, a squad order flow that gets the sizes and the discount right, and a bilingual retail theme.
- Client
- Canadian soccer retailer(anon.)
- Industry
- Retail & Wholesale
- Duration
- Two storefronts, phased
- Team
- Senior pod, ATLAS + CANVAS
The challenge
What stood in the way.
The retailer's wholesale business ran on spreadsheets, email and a legacy point-of-sale export. Every amateur club wanted its own prices and product photos, and a coach needed to order twenty-five jerseys in mixed sizes with the right names and numbers on the back. The retail site was due a rebuild at the same time, on the same budget cycle.
- Per-club pricing and imagery with no system to hold it
- Squad orders spanning sizes, names and numbers, taken by hand
- A retail theme rebuild competing for the same delivery window
- Bilingual requirement across both storefronts
Our approach
How we framed it.
One codebase, two audiences. Shopify Plus B2B gave the wholesale side companies, locations, catalogs and net terms without a custom commerce engine; Shopify Functions handled the pricing logic a squad order needs; admin and checkout extensions kept staff inside the tools they already used.
The retail rebuild was scoped as a theme project on Shopify Horizon so it could ship on its own track, sharing product data and structured-data markup with the B2B store rather than a separate stack.
The solution
What we built.
- Branded team store per club with club-only pricing and net terms
- Team order flow: roster upload, jersey customiser for name and number
- Pricing function that pools sizes so a squad order earns the right discount
- Admin app for staff to onboard a club and print production sheets, no developer needed
- Cloudflare Worker routing club subdomains to the right store
- Retail theme rebuilt on Shopify Horizon, bilingual, with structured data
Quality was automated from the start: Playwright end-to-end tests across both storefronts, with Lighthouse and axe audits in the pipeline so performance and accessibility regressions were caught before a theme change shipped.
Results
What changed.
Twenty-two clubs are onboarded on their own team stores, 1,800 products were migrated into the shared catalog, and both storefronts meet WCAG 2.1 AA. Staff run club onboarding and production sheets themselves.
Stack
Tools used in production.
- Shopify Plus
- Shopify B2B
- Shopify Functions
- Horizon theme
- Liquid
- Node.js
- GitHub Actions
- Cloudflare Workers
- Playwright
- Lighthouse
- axe
Talk to us
Have a similar problem? Bring it to a senior engineer.
A senior engineer plus the relevant department lead joins the first call. No discovery gauntlet, no junior reps.