[{"data":1,"prerenderedAt":566},["ShallowReactive",2],{"case-studies":3},[4,136,232,307,390,470],{"id":5,"title":6,"author":7,"body":10,"client":93,"country":94,"countryCode":95,"coverImage":96,"date":97,"description":83,"draft":98,"engagement":99,"extension":100,"featured":101,"industry":102,"meta":103,"navigation":101,"path":104,"quote":105,"results":106,"seo":119,"seoDescription":120,"services":121,"stem":123,"summary":124,"tags":125,"tldr":130,"updated":134,"__hash__":135},"caseStudies\u002Fcase-studies\u002Flemkus-replatform.md","2,500 sneakers, one product template",{"name":8,"role":9},"Cameron Rudolph","Co-founder",{"type":11,"value":12,"toc":82},"minimark",[13,18,22,25,29,35,38,41,45,48,51,55,58,61,65,69,73,76,79],[14,15,17],"h2",{"id":16},"the-brief","The brief",[19,20,21],"p",{},"Lemkus is one of South Africa's most established sneaker retailers, with a\ncatalogue of roughly 2,500 products.",[19,23,24],{},"The requirement that shaped everything else wasn't a design one. It was that\nafter launch, the Lemkus team had to be able to run the store themselves —\nwithout calling a developer to change a layout, and without inheriting a\nstorefront only the person who built it could edit.",[14,26,28],{"id":27},"the-template-problem","The template problem",[30,31,32],"statement",{},[19,33,34],{},"At 2,500 products, the obvious approach — a template per product type, then\nanother for the exceptions — produces a store nobody can maintain. It solves\ntoday's layout and creates a permanent tax on every future change.",[19,36,37],{},"So there is one product template. Everything that varies between products —\nspecifications, colourways, copy, supporting content — lives in Shopify\nmetafields and renders dynamically into shared sections. Layout structures stay\ninside theme-native settings and sections wherever possible, so the team can\nchange the store from the admin rather than from a code editor.",[19,39,40],{},"That decision creates a different problem, which is that a metafield structure\nis only as good as the data in it. Populating structured data across thousands\nof SKUs is the kind of work that quietly kills a migration.",[14,42,44],{"id":43},"the-catalogue-build","The catalogue build",[19,46,47],{},"Rather than manually researching and writing product information across\nthousands of SKUs, the Lemkus team used Claude to help find, structure and\nprepare that information for the relevant Shopify metafields.",[19,49,50],{},"Worth being precise about who did what: we built the structure, they filled it.\nThat split is the point. A metafield architecture the client can populate\nthemselves is a different asset to one that depends on us for every new season.",[14,52,54],{"id":53},"what-changed-after-sign-off","What changed after sign-off",[19,56,57],{},"The initial mobile navigation worked. There was nothing technically wrong with\nit. But once the developed site was in front of the Lemkus team and being used\nproperly, it didn't match the quality of the rest of the experience. So we\nrevisited it.",[19,59,60],{},"That happened because the client was able to experience a working product rather\nthan predict every interaction from a static design. It's an argument for\nbuilding in a way that keeps things editable after sign-off, rather than\ntreating a signed design as final.",[14,62,64],{"id":63},"what-shipped","What shipped",[66,67],"shipped",{":items":68},"[{\"label\":\"Shopify Online Store 2.0 build on a premium theme framework\",\"note\":\"Foundation\"},{\"label\":\"Single dynamic product template driven by metafields\",\"note\":\"The architecture decision\"},{\"label\":\"Responsive mega-menu, multi-column visual system, hover mechanics\",\"note\":\"Navigation\"},{\"label\":\"Mobile navigation rebuilt post-sign-off on client feedback\",\"note\":\"Late change, made anyway\"},{\"label\":\"Product and BreadcrumbList JSON-LD schema markup\",\"note\":\"Live 15 Jul 2026\"},{\"label\":\"Native blog on the chosen theme, with design direction\",\"note\":\"Content\"}]",[14,70,72],{"id":71},"the-boundary","The boundary",[19,74,75],{},"The project ran against a fixed 100-hour boundary and a frozen design. Both\nexisted so the scope conversation happened once, at the start, rather than\ncontinuously.",[19,77,78],{},"It landed on schedule and was paid in full before launch. Some things were\ndeliberately pushed out rather than squeezed in — a live shopping and launches\nsection was scoped as a V2 rather than allowed to expand the build.",[19,80,81],{},"Knowing what to leave until later is most of what a fixed boundary buys you.",{"title":83,"searchDepth":84,"depth":84,"links":85},"",3,[86,88,89,90,91,92],{"id":16,"depth":87,"text":17},2,{"id":27,"depth":87,"text":28},{"id":43,"depth":87,"text":44},{"id":53,"depth":87,"text":54},{"id":63,"depth":87,"text":64},{"id":71,"depth":87,"text":72},"Lemkus","South Africa","ZA",null,"2026-08-06",false,"growth-build","md",true,"Footwear & apparel",{},"\u002Fcase-studies\u002Flemkus-replatform","Digital products are editable. The mobile navigation changed after sign-off because the client could finally use the thing.",[107,110,113,116],{"value":108,"label":109},"~2,500","products",{"value":111,"label":112},"100 hrs","fixed project boundary",{"value":114,"label":115},"1","dynamic product template",{"value":117,"label":118},"OS 2.0","Shopify Online Store 2.0",{"title":6,"description":83},"How Lemkus moved to Shopify Online Store 2.0 with a single dynamic product template, an AI-assisted catalogue build, and a fixed 100-hour boundary.",[122],"Growth Build","case-studies\u002Flemkus-replatform","One of South Africa's most established sneaker retailers, a catalogue of around 2,500 products, and a hard requirement that the team could run the store themselves afterwards. We built it on a single dynamic product template inside a fixed 100-hour boundary, and hit the date.",[126,127,128,129],"Replatform","Online Store 2.0","Metafields","AI-assisted",[131,132,133],"~2,500 products, rebuilt on Shopify Online Store 2.0 without a template per product — everything variable lives in metafields.","The Lemkus team used Claude to research and structure product data into those metafields, which is what made a catalogue that size tractable.","Fixed 100-hour boundary, hit on schedule, paid in full before launch. The mobile nav was rebuilt late on client feedback, not on a metric.","2026-08","MXVgxWWbBURb9u-32l_-ceT1UYus6m1in-i2zzarsLs",{"id":137,"title":138,"author":139,"body":140,"client":200,"country":94,"countryCode":95,"coverImage":96,"date":201,"description":83,"draft":98,"engagement":202,"extension":100,"featured":101,"industry":203,"meta":204,"navigation":101,"path":205,"quote":206,"results":207,"seo":217,"seoDescription":218,"services":219,"stem":221,"summary":222,"tags":223,"tldr":227,"updated":134,"__hash__":231},"caseStudies\u002Fcase-studies\u002Fapparel-retailer-bfcm.md","The Sunday before Black Friday",{"name":8,"role":9},{"type":11,"value":141,"toc":194},[142,144,147,150,154,159,162,165,168,172,175,178,181,185,188,191],[14,143,17],{"id":16},[19,145,146],{},"At this retailer's scale, Black Friday planning starts months out. Campaign\nconcepts, discounts, bundles, landing pages, email, inventory, launch\nsequencing. By about day three the ideas start multiplying — one promotion\nbecomes four, a landing page becomes a custom experience, someone suggests a\ncountdown and someone else wants early access.",[19,148,149],{},"Cutting that list down is the visible part of the job. It isn't the important\npart.",[14,151,153],{"id":152},"what-the-last-fortnight-actually-looks-like","What the last fortnight actually looks like",[30,155,156],{},[19,157,158],{},"Campaigns don't fail on the big idea. They fail on the payment method that\nstopped completing checkouts eleven days out, on a shipping rule that\ncalculates free when it shouldn't, on a search button that quietly disappeared.",[19,160,161],{},"In the two weeks before Black Friday 2025, working through a live store under\ncampaign load, we found and resolved:",[66,163],{":items":164},"[{\"label\":\"Apple Pay checkout error with the Stitch integration\",\"note\":\"Payment\"},{\"label\":\"Address validation fault with the 2Ship integration\",\"note\":\"Fulfilment\"},{\"label\":\"Sitewide search button disappearing\",\"note\":\"Navigation\"},{\"label\":\"Free shipping calculation returning the wrong result\",\"note\":\"Pricing\"},{\"label\":\"Order confirmation failures on specific orders\",\"note\":\"Post-purchase\"}]",[19,166,167],{},"None of these were on the plan. Every one of them would have cost real money\nover the weekend, and three of them sit directly on the path between a customer\ndeciding to buy and the order actually landing.",[14,169,171],{"id":170},"the-sunday","The Sunday",[19,173,174],{},"On Sunday 23 November, with the campaign already scheduled, the store needed a\nchange that wasn't in the plan: campaign shipping timelines communicated\ndirectly on the product page, below the add-to-cart button, across every live\nproduct template. Plus footer FAQ changes and a new checkout image widget.",[19,176,177],{},"That is exactly the kind of request that goes wrong — a sitewide template change,\nmade under time pressure, days before the highest-traffic weekend of the year.",[19,179,180],{},"It went out cleanly because there was somewhere to put it: a team already inside\nthe store, a testing routine already running, and a priority path for anything\nstore-breaking with a 48-hour commitment behind it.",[14,182,184],{"id":183},"why-this-is-the-case-study","Why this is the case study",[19,186,187],{},"The version of this article we could have written describes our Black Friday\nprocess. Every agency has that page.",[19,189,190],{},"This is more useful: on a large Shopify Plus store, in the two weeks before\nBlack Friday, four things broke on the checkout path and one unplanned sitewide\nchange had to ship on a Sunday. The campaign ran.",[19,192,193],{},"A good Black Friday launch isn't the one with the most features. It's the one\nwhere nothing you didn't plan for reaches a customer.",{"title":83,"searchDepth":84,"depth":84,"links":195},[196,197,198,199],{"id":16,"depth":87,"text":17},{"id":152,"depth":87,"text":153},{"id":170,"depth":87,"text":171},{"id":183,"depth":87,"text":184},"SA Apparel Retailer","2026-08-04","support-plan","Apparel",{},"\u002Fcase-studies\u002Fapparel-retailer-bfcm","A campaign doesn't fail on the big idea. It fails on the payment method that quietly stopped working eleven days out.",[208,211,214],{"value":209,"label":210},"2 weeks","intensive pre-BFCM window",{"value":212,"label":213},"4","checkout-critical faults resolved",{"value":215,"label":216},"48 hrs","priority SLA on store-breaking bugs",{"title":138,"description":83},"What actually happens in the last two weeks before Black Friday on a large Shopify Plus store — the failures, the emergency launches, and why none of it reached customers.",[220],"Support Plan","case-studies\u002Fapparel-retailer-bfcm","Two weeks before Black Friday 2025, Apple Pay stopped completing checkouts, address validation started rejecting valid addresses, the sitewide search button vanished, and shipping was calculating free when it shouldn't. All of it was found and fixed before the weekend. That is the actual job.",[224,225,226],"BFCM","Campaign delivery","Shopify Plus",[228,229,230],"Black Friday planning is mostly triage — deciding what to cut so the things that matter get tested properly.","In the fortnight before BFCM 2025 we resolved an Apple Pay checkout failure, an address validation fault, a missing search button and a shipping calculation bug.","On the Sunday before the weekend we shipped an unplanned change across every live product template. It went out clean because there was a process to put it through.","MJujqalK4OI5FryjRzA5LkbMsQIzGwH764h9Xac8GV0",{"id":233,"title":234,"author":235,"body":236,"client":200,"country":94,"countryCode":95,"coverImage":96,"date":279,"description":83,"draft":98,"engagement":202,"extension":100,"featured":98,"industry":203,"meta":280,"navigation":101,"path":281,"quote":282,"results":283,"seo":293,"seoDescription":294,"services":295,"stem":296,"summary":297,"tags":298,"tldr":302,"updated":134,"__hash__":306},"caseStudies\u002Fcase-studies\u002Fshopify-pos-partner-access.md","The Shopify POS setting your agency isn't allowed to press",{"name":8,"role":9},{"type":11,"value":237,"toc":274},[238,240,243,246,251,255,258,261,265,268,271],[14,239,17],{"id":16},[19,241,242],{},"The retailer's Shopify Plus store is supported by a growing network of physical\nstores. As the POS footprint grew, we were asked to add locations, configure\nfulfilment and make sure what happened in-store matched what happened online.",[19,244,245],{},"Then we hit Shopify's permission model.",[30,247,248],{},[19,249,250],{},"Shopify restricts parts of POS to staff-level accounts. Collaborator access —\nthe access agencies are given — doesn't reach them. This is a platform rule, not\na client permissions oversight, and no amount of asking changes it.",[14,252,254],{"id":253},"what-an-agency-can-actually-do","What an agency can actually do",[19,256,257],{},"Most of it. The restriction is narrow, and it tends to get treated as a reason to\nhand the whole job back to the client. The work we did here covered:",[66,259],{":items":260},"[{\"label\":\"Creating and configuring retail locations\",\"note\":\"Structure\"},{\"label\":\"Inventory mapping and location-level fulfilment rules\",\"note\":\"Which store ships what\"},{\"label\":\"Shopify POS Pro configuration\",\"note\":\"Setup\"},{\"label\":\"Staff roles, permissions and channel-level product availability\",\"note\":\"Access\"},{\"label\":\"In-store collections, customer capture, payment and checkout review\",\"note\":\"Retail experience\"},{\"label\":\"Order, refund and exchange testing\",\"note\":\"QA\"},{\"label\":\"Hardware recommendations, setup guides, SOPs, team training\",\"note\":\"Handover\"}]",[14,262,264],{"id":263},"the-workaround","The workaround",[19,266,267],{},"Where a restricted setting was in the way, we used one of two routes.",[19,269,270],{},"A temporary staff account, scoped to only the permissions the task required and\nremoved once setup and testing were signed off. Or, where temporary access wasn't\nappropriate, we prepared the configuration in advance and ran a booked session\nwith an authorised staff member, who pressed the button while we drove.",[19,272,273],{},"Either way, the client didn't have to become a Shopify POS expert to open a\nstore. Shopify's permissions limit the access an agency gets. They don't limit\nthe support an agency can give.",{"title":83,"searchDepth":84,"depth":84,"links":275},[276,277,278],{"id":16,"depth":87,"text":17},{"id":253,"depth":87,"text":254},{"id":263,"depth":87,"text":264},"2026-07-28",{},"\u002Fcase-studies\u002Fshopify-pos-partner-access","Your development partner may understand exactly what needs to be done and still be unable to press the final button.",[284,287,290],{"value":285,"label":286},"Under 40","retail locations nationwide",{"value":288,"label":289},"POS Pro","configuration",{"value":291,"label":292},"Multi-location","inventory and fulfilment mapping",{"title":234,"description":83},"Shopify restricts what development partners can access in POS. Here's what an agency can still do, and how we work around the parts we can't touch.",[220],"case-studies\u002Fshopify-pos-partner-access","Shopify limits what collaborator accounts can reach inside POS. Some settings need staff-level access, which means your development partner can know exactly what to do and still be unable to do it. We built a controlled process around that limit rather than handing the client a list of instructions.",[299,300,301],"Shopify POS","Retail","Operations",[303,304,305],"Certain Shopify POS settings require staff access, not the collaborator access agencies normally hold.","Almost everything else — locations, inventory mapping, fulfilment rules, POS Pro, staff permissions, hardware, training — an agency can do in full.","For the restricted steps we use scoped temporary staff accounts, or run a booked session and walk an authorised staff member through it.","T8XeSkzWS_6RBrxdjJOkIaoaDdXKq3Gu2UgqRR6R7wM",{"id":308,"title":309,"author":310,"body":311,"client":200,"country":94,"countryCode":95,"coverImage":96,"date":362,"description":83,"draft":98,"engagement":99,"extension":100,"featured":101,"industry":203,"meta":363,"navigation":101,"path":364,"quote":365,"results":366,"seo":376,"seoDescription":377,"services":378,"stem":379,"summary":380,"tags":381,"tldr":385,"updated":134,"__hash__":389},"caseStudies\u002Fcase-studies\u002Fapparel-retailer-b2b.md","Wholesale ordering that doesn't go through a salesperson",{"name":8,"role":9},{"type":11,"value":312,"toc":356},[313,315,318,321,325,330,333,337,340,343,346,350,353],[14,314,17],{"id":16},[19,316,317],{},"The retailer runs one of the larger Shopify Plus stores in the country, selling\ndirect to consumers and supplying organisations that buy in volume.",[19,319,320],{},"The wholesale side worked. That was never in question. The problem was that it\nworked through people: a buyer emailed or phoned the sales team to ask what was\nin stock, what their price was and whether an order could be placed. For the\naccounts that need a relationship, that attention is the product. For everything\nelse, it was the same conversation repeated, and it was consuming the time of\nthe people best placed to grow the accounts that mattered.",[14,322,324],{"id":323},"what-we-found","What we found",[30,326,327],{},[19,328,329],{},"Wholesale is not a price list. Every order carries rules about who the customer\nis, what they're allowed to see, what they pay and what terms they're on — and\nalmost none of those rules existed anywhere except in the sales team's heads.",[19,331,332],{},"That was the real work. Before anything could be built, the rules had to be\nwritten down: which organisations are approved, what each of them can access,\nwhich products are available wholesale at all, how pricing and minimums apply,\nand where Shopify Plus hands off to Sage Intacct.",[14,334,336],{"id":335},"what-we-built","What we built",[19,338,339],{},"Native Shopify B2B on Plus, rather than a bolted-on wholesale app or a second\nstorefront to maintain.",[66,341],{":items":342},"[{\"label\":\"Company accounts, buyer permissions and approval flow\",\"note\":\"Who gets in\"},{\"label\":\"Wholesale catalogues and price lists per account\",\"note\":\"Who sees what, at what price\"},{\"label\":\"Ordering rules — minimums, terms, payment methods\",\"note\":\"Encoded, not explained\"},{\"label\":\"Shopify Plus ↔ Sage Intacct data flow\",\"note\":\"Inventory and financial handoff\"},{\"label\":\"Self-service ordering journey\",\"note\":\"No assistance required\"}]",[19,344,345],{},"The B2B store now serves institutional buyers, including several large schools,\nplacing orders directly against their own catalogue and terms.",[14,347,349],{"id":348},"where-it-lands","Where it lands",[19,351,352],{},"The point was never to replace the sales team. It was to take the repetitive\npart of their week off them, so the accounts that need a relationship get one\nand the rest can simply order.",[19,354,355],{},"For a retailer at this scale, B2B isn't a website feature. It's the difference\nbetween growing the customer base and growing the sales team.",{"title":83,"searchDepth":84,"depth":84,"links":357},[358,359,360,361],{"id":16,"depth":87,"text":17},{"id":323,"depth":87,"text":324},{"id":335,"depth":87,"text":336},{"id":348,"depth":87,"text":349},"2026-07-21",{},"\u002Fcase-studies\u002Fapparel-retailer-b2b","The wholesale operation was already working. The opportunity was to make it easier to manage.",[367,370,373],{"value":368,"label":369},"Shopify B2B","on Shopify Plus",{"value":371,"label":372},"Sage Intacct","system of record",{"value":374,"label":375},"B2B + DTC","one store, two audiences",{"title":309,"description":83},"How a South African apparel retailer moved wholesale ordering onto Shopify B2B, alongside an existing DTC store on Shopify Plus.",[122],"case-studies\u002Fapparel-retailer-b2b","A large South African apparel retailer ran a serious wholesale operation entirely through its sales team — organisations emailed or phoned to ask what was available, what it cost and whether they could have it. We built a Shopify B2B store alongside the existing DTC business so those accounts could order for themselves.",[382,226,383,384],"B2B","Wholesale","ERP",[386,387,388],"Wholesale ordering ran on email and phone calls into the internal sales team, with the rules held in people's heads rather than in a system.","We built on native Shopify B2B — company accounts, catalogue access, price lists and payment terms — sitting alongside the existing DTC storefront.","The store now serves institutional accounts, including several large schools, without a salesperson in the middle of every order.","k7sOq_f4XQOaZEyNpWV6xV4kHFuK35V-MTLvToePgxg",{"id":391,"title":392,"author":393,"body":394,"client":200,"country":94,"countryCode":95,"coverImage":96,"date":446,"description":83,"draft":98,"engagement":202,"extension":100,"featured":101,"industry":203,"meta":447,"navigation":101,"path":448,"quote":449,"results":450,"seo":458,"seoDescription":459,"services":460,"stem":461,"summary":462,"tags":463,"tldr":465,"updated":134,"__hash__":469},"caseStudies\u002Fcase-studies\u002Fapparel-retailer-support-plan.md","The Shopify to-do list that never got shorter",{"name":8,"role":9},{"type":11,"value":395,"toc":440},[396,398,401,404,407,411,414,419,423,426,429,432,434,437],[14,397,17],{"id":16},[19,399,400],{},"Running one of South Africa's largest Shopify Plus stores generates a list.",[19,402,403],{},"Some of it is urgent. Most of it isn't. A good portion of it has been sitting in\na document for three months, not because it's difficult, but because nobody has\ndecided whose job it is.",[19,405,406],{},"The retailer had no shortage of ideas. They had campaigns, customers, stock,\nphysical stores and a business to run, and the improvements kept losing to all\nof it.",[14,408,410],{"id":409},"what-was-actually-on-the-list","What was actually on the list",[66,412],{":items":413},"[{\"label\":\"Back-in-stock functionality\"},{\"label\":\"Product page improvements and mobile conversion fixes\"},{\"label\":\"Reviews, UI adjustments, collection and landing page updates\"},{\"label\":\"Klaviyo troubleshooting\"},{\"label\":\"Discount and customer data exports\"},{\"label\":\"Returns and exchange workflows\"},{\"label\":\"Shopify app configuration and launch support\"},{\"label\":\"The unexpected technical issues nobody plans for\"}]",[30,415,416],{},[19,417,418],{},"Individually, none of these justify a project. Quoting, approving and scheduling\neach one creates more administration than the work itself — which is exactly why\nlists like this survive for years.",[14,420,422],{"id":421},"how-it-works","How it works",[19,424,425],{},"Requests are submitted as they come up, sized, queued and worked by priority.\nThere is no quote per item and no scoping cycle in front of a forty-minute job.\nRoutine work moves in one-week focused sprints; anything store-breaking jumps the\nqueue against a 48-hour commitment.",[19,427,428],{},"Between November 2025 and March 2026 that came to 26 completed items on this\naccount — none of them individually large enough to have justified a project.",[19,430,431],{},"What that buys is not a rebuild. It's that small conversion improvements stop\nbeing ignored, technical issues get handled before they turn into incidents, and\na campaign idea has someone available to build it.",[14,433,349],{"id":348},[19,435,436],{},"The hard part of a long Shopify to-do list has never been knowing what's on it.",[19,438,439],{},"It's having the time and the technical capacity to get through it.",{"title":83,"searchDepth":84,"depth":84,"links":441},[442,443,444,445],{"id":16,"depth":87,"text":17},{"id":409,"depth":87,"text":410},{"id":421,"depth":87,"text":422},{"id":348,"depth":87,"text":349},"2026-06-16",{},"\u002Fcase-studies\u002Fapparel-retailer-support-plan","Instead of asking who can handle this, the team could ask what we should send next.",[451,454,455],{"value":452,"label":453},"26","billed items completed, Nov 2025 – Mar 2026",{"value":215,"label":216},{"value":456,"label":457},"1 week","mini-sprint cycle",{"title":392,"description":83},"How one of South Africa's largest Shopify Plus retailers turned a three-month-old backlog into a managed weekly workflow.",[220],"case-studies\u002Fapparel-retailer-support-plan","Every store has the document. Back-in-stock, a mobile fix, the Klaviyo flow nobody has opened since March. The retailer had no shortage of improvements — they had no capacity to get through them without pulling someone off the business. We became the capacity.",[220,226,464],"Ongoing development",[466,467,468],"The work was real but small — too small to quote, approve and schedule individually without the admin costing more than the task.","Requests go into a managed queue and get worked by priority, without the business hiring a Shopify developer.","The output isn't one rebuild. It's momentum — small improvements stop getting dropped.","kHoyMTo8npWlMyZkpKBGGnneLgI20WH9kf35lGomN1k",{"id":471,"title":472,"author":473,"body":474,"client":537,"country":94,"countryCode":95,"coverImage":96,"date":538,"description":83,"draft":101,"engagement":539,"extension":100,"featured":101,"industry":540,"meta":541,"navigation":101,"path":542,"quote":543,"results":544,"seo":553,"seoDescription":554,"services":555,"stem":556,"summary":557,"tags":558,"tldr":561,"updated":134,"__hash__":565},"caseStudies\u002Fcase-studies\u002Fskincare-brand-replatform.md","A Shopify store that doesn't look like Shopify",{"name":8,"role":9},{"type":11,"value":475,"toc":530},[476,478,481,484,489,493,496,499,501,504,507,511,514,517,521,524,527],[14,477,17],{"id":16},[19,479,480],{},"The brand sells science-led skincare, and its customers don't shop the way most\nskincare customers do. They read. Ingredients, mechanisms, clinical detail,\napplication guidance, which product suits which concern — the decision is made\non the page, and the page is long.",[19,482,483],{},"On WordPress and WooCommerce, each product had been built as its own landing\npage. Fifteen to twenty sections of technical content, imagery, video and\neducation, assembled individually. The bundles were worse, or better, depending\non how you look at it.",[30,485,486],{},[19,487,488],{},"The content wasn't decoration on top of the products. It was the reason people\ntrusted the brand enough to buy. Any migration that simplified those pages would\nhave removed the thing that was working.",[14,490,492],{"id":491},"the-problem-with-the-obvious-approach","The problem with the obvious approach",[19,494,495],{},"Shopify is built around reusable templates and sections, which is a better\nsystem than hand-building every page — right up until pages need 20 sections\neach, in different combinations, with product-specific content in every one.",[19,497,498],{},"The obvious route was a bespoke template per product. That would have\nreproduced, inside Shopify, exactly the scalability problem the migration was\nmeant to solve.",[14,500,336],{"id":335},[19,502,503],{},"Product-specific content moved into Shopify metafields and connected dynamically\nto reusable sections across a single product template. Each page keeps its own\nclinical detail, ingredients, imagery and guidance. The system underneath is\nshared.",[66,505],{":items":506},"[{\"label\":\"Dynamic product template driven by metafields\",\"note\":\"One template, bespoke output\"},{\"label\":\"The same structure extended to complex bundle products\",\"note\":\"Bundles\"},{\"label\":\"Custom layout and development where sections weren't flexible enough\",\"note\":\"The gaps\"},{\"label\":\"Products, customers and historical order data migrated from WooCommerce\",\"note\":\"Data\"},{\"label\":\"Content, imagery and video rebuilt into the new structure\",\"note\":\"Content\"},{\"label\":\"Klaviyo connected via the Shopify app, handed to the Klaviyo team\",\"note\":\"Email\"}]",[14,508,510],{"id":509},"the-fulfilment-problem","The fulfilment problem",[19,512,513],{},"The old WooCommerce setup ran suburb validation inside its courier workflow with\nFastway. That workflow couldn't be reproduced inside Shopify checkout, and\nforcing it in would have meant adding friction at the worst possible point.",[19,515,516],{},"Bob Go moved the validation to after the order was placed instead. Fastway\nstayed in the courier setup, the operational requirement was still met, and\ncheckout stayed clean. Once implemented it stopped being a problem.",[14,518,520],{"id":519},"what-happened-next","What happened next",[19,522,523],{},"The migration's brief was preservation: move platforms, change as little as\npossible, don't spend the trust the brand had already built.",[19,525,526],{},"That brief has expired, gradually and on purpose. Since launch we've been\nintroducing Shopify commerce patterns into the store — clearer layouts,\nconversion-focused design, an easier path through the range — without stripping\nout the depth that made the original site work.",[19,528,529],{},"Moving to Shopify doesn't have to mean flattening a brand into a standard theme.\nWith the right content architecture, it means the opposite: the depth survives,\nand it finally sits on something that can be improved.",{"title":83,"searchDepth":84,"depth":84,"links":531},[532,533,534,535,536],{"id":16,"depth":87,"text":17},{"id":491,"depth":87,"text":492},{"id":335,"depth":87,"text":336},{"id":509,"depth":87,"text":510},{"id":519,"depth":87,"text":520},"SA Skincare Brand","2026-05-12","replatform","Skincare",{},"\u002Fcase-studies\u002Fskincare-brand-replatform","The goal was never to make it look like a Shopify store. It was to use Shopify as the engine and leave the brand alone.",[545,548,550],{"value":546,"label":547},"15–20","sections per product page",{"value":114,"label":549},"template, not one per product",{"value":551,"label":552},"WooCommerce → Shopify","full migration",{"title":472,"description":83},"Migrating a science-led skincare brand from WooCommerce to Shopify without flattening 20-section product pages into a standard theme.",[126,220],"case-studies\u002Fskincare-brand-replatform","A skincare brand whose product pages were the product. Fifteen to twenty sections each — clinical detail, ingredients, application guidance, video — built one page at a time in WordPress. Moving to Shopify meant rebuilding all of it without building a template per product.",[126,128,559,560],"WooCommerce","Fulfilment",[562,563,564],"Product pages ran to 15–20 sections of technical and clinical content, and that content was what customers trusted.","We built one dynamic template driven by metafields instead of a bespoke template per product, so the depth survived and the store stayed manageable.","Products, customers and order history moved across; Bob Go resolved a fulfilment problem that couldn't be solved inside checkout.","Yq8o9rPzr-DDEyWtQhevmAqj32uuXMddc5u0V1PymWo",1787392827126]