[ Case study ]
The brand's store ran on a theme that had accumulated apps and scripts for years; product pages took over six seconds on mobile, recipe content — the brand's best acquisition channel — was buried under render-blocking everything, and each marketing experiment required a developer.
CLIENT a specialty-food consumer brand — FOCUS Headless front end on the edge
Representative examplesEvery case study in this library is an illustrative composite of the kind of engagement we deliver — written to show our method and standards, not to name clients.
This specialty-food brand makes small-batch pantry staples — sauces, spice blends, oils — and sells direct through an online store alongside wholesale accounts. Recipes are the marketing engine: recipe pages drive most new-customer discovery, and the brand team publishes constantly. The storefront runs on an established commerce platform; over years, the theme on top had collected apps, scripts, and campaign leftovers. One part-time developer maintains the store, and marketing's roadmap — landing pages, experiments, seasonal pushes — queues behind whatever capacity that developer has.
The brand's store ran on a theme that had accumulated apps and scripts for years; product pages took over six seconds on mobile, recipe content — the brand's best acquisition channel — was buried under render-blocking everything, and each marketing experiment required a developer.
We proposed a headless front end: Next.js on Vercel, statically generated with on-demand revalidation, talking to the existing commerce platform's APIs — the storefront backend stays, because SKUs, checkout, and tax rules work and were not the problem. The brand's distinctive design language would be rebuilt as typed components with visual sign-off per template; approximation was not acceptable. Recipes move into a structured content model with a draft preview URL, giving the brand team a self-serve publishing path that ships fast by default — the acquisition channel stops depending on a developer's queue.
Just as important is what we ruled out, and why:
Product, collection, and recipe routes became statically generated with on-demand revalidation on Vercel, talking to the existing commerce backend's APIs.
The distinctive visual system was rebuilt as typed components with visual sign-off per template, so the brand reads identically at a fraction of the weight.
Recipes moved into a structured model with a preview URL per draft, so the brand team publishes without a developer and every recipe ships fast.
Delivered by the systems pod — engineer + commerce lead over 8 weeks, with working increments reviewed with the client every week.
Obstacle
The recipe archive — estimated as days of migration — held post after post with inconsistent embedded markup, formatting shortcodes, and photos in three generations of structure.
Handled: We stopped hand-porting, wrote a conversion script in a day, spot-checked every tenth recipe against the original, and shipped preview URLs so the brand team could verify their own archive.
Obstacle
The brand's design language is hand-built and idiosyncratic; two templates — product detail and the seasonal collection — resisted componentization and drifted visually at the first internal review.
Handled: We rebuilt those two as explicit exceptions with bespoke markup, then locked parity with automated visual diffs per template so drift surfaces in review instead of in production.
The headline: mobile lcp on product pages, 28-day field data after cutover — 6.1s → 1.9s, read from CrUX field data. A second check: recipe-page entrances converting to product views at +17%.
Marketing's backlog flipped direction: experiments launch without the developer now, and the developer's queue holds real engineering instead of banner swaps. The brand team treats recipe publishing as part of writing a recipe, not a handoff. Page speed stopped appearing in the weekly meeting because it stopped being a slide. And the design language survived the rebuild intact — it met the founder's standard of looking exactly like the brand, which is why most customers never noticed it happened.
The result was read from CrUX field data against the pre-engagement baseline over the stated window, with a guardrail check on recipe-page entrances converting to product views. Where platform-reported numbers and business outcomes differ, this record says which layer it is quoting.
What we would do differently
We would migrate recipe content with a script from the start — hand-porting eighty recipes consumed two weeks that a one-day script would have saved.
[ Related service ]
[ Related builds ]
Bot buyouts protected on-salesSubsequent on-sale days completed with bots challenged at the edge and origin load flat
Two years adrift maintained baselineSite current on a monthly cadence with verified restorable backups before recital season
[ Next step ]
Next case study