Avoid the Fight.
As they say, it's better to avoid a fight than fight. Not that commercial concerns need to be seen in such pugilistic terms, but here it holds if it gets the message across: you don't have to do what you are expected to do. We've written a lot about the so-called fight this year — about Shopify and its checkout, app bills and so forth. And the whole time we've been walking out of the room by a side door and avoiding the awkward small talk (another kind of fight). In short, Shopify is not the whole conversation.

Here's where we've landed. If your site is a product — if character, content and craft are what you're selling, and the site is the shopfront for all three — then it should be built as a product: Next.js and Sanity, designed from nothing, words and pictures and pages in the same hands. Not most of the time. Every time. The industry's research says three in four brands asking for headless are better off on a theme, and we've quoted it. Our reading, a year on, is that the three in four were asking for the wrong reasons — a templated feeling, a checkout that looked like Shopify's — and the brands this piece is for aren't among them.
What stops those brands is the engine. Headless, as usually sold, means Shopify still underneath: the Storefront API, a checkout you don't own, and £1,800 a month for Plus if you'd like to change it. That's the fight. The side door is that the engine doesn't have to be Shopify's at all.

Medusa
Medusa is an open-source commerce engine. The core is MIT-licensed, it's written in TypeScript and runs on Node and Postgres, and it gives you the parts Shopify sells you: products and variants, inventory, carts and totals, payments, orders, regions and currencies, and an admin dashboard for the team to run it from. It ships with a Next.js storefront to start from and a Stripe integration to take the money. There's no percentage on sales and no tier to climb for the checkout, because the checkout is code you own. If the sale in your business isn't an add-to-cart, you change it. Nobody has to be asked.
Medusa reckons it's "the world's most flexible commerce platform for agents and developers", which is the sort of sentence a funding round writes. Under it is a good, plain thing with thirty-six thousand stars on GitHub, which is a crowd, and a year-old second version that rebuilt the whole engine as modules you can swap. The number that matters for a Sanity and Next.js shop is simpler: it speaks the language the site is already written in. One team, one stack, one set of hands.
What it costs
Free, then not free — the way Sanity is free and then not, and Vercel, and every good open-source thing that grew a company. Medusa Cloud hosts it for you from $29 a month, $99 with autoscaling and backups, $299 with workers and priority support. Or you host it yourself, which is what we'd do; our own site runs on Railway and a Medusa backend would sit beside it. Set that against Shopify Plus — £1,800 a month for a checkout you're allowed to extend but never own — and the arithmetic isn't close.
What you're paying for instead is people, and fewer of them than the headless chapter's servicing schedule implies. A site made well — properly researched, built around the problems the business actually has — doesn't need a developer often, and hardly ever to fix things. You'll find something you'd like to change, or a behaviour that doesn't quite stack up a year in; that's true of any site, on any platform. Day to day, a headless site with a good content system behind it is easier to edit than a Shopify one. Shopify is excruciating to adapt outside the bounds of its template: if you'd like to blend a few page elements into a new kind of page, well, good luck. It's going to look horrible, and for that you do need a developer — the same one you'd need for a new feature. The difference is who owns the code when you call.
Why we didn't use it for Pegoretti
Pegoretti sells one or two things you can pay for outright — a fork — and one thing you can't: a frame, which is a commission, a conversation with the Bottega. For that we wrote the flow ourselves: a musette instead of a cart, the payment inside the product page through Stripe, no checkout page at all. We looked at Medusa and put it back. A whole commerce engine for one fork is a lorry for a loaf.
With a real catalogue — sizes and finishes, stock in two currencies, a team raising orders every morning — we'd have reached for it, and had the admin, the inventory and the order history for nothing instead of writing them. That's the line, and it's a catalogue line rather than a revenue one. The moment the shop has enough in it that somebody needs a dashboard, the engine earns its place.
Who this is for
Makers, mostly — the brands we're built for. A frame, a guitar, a pair of monitors: something that benefits from a closer look and more words than a bullet list, sold by people who care about such things. Their site isn't a channel. It's the product's second body, and it deserves to be made the way the first one was. There's a real joy in these jobs — the new Blind John's guitar site we're making now is one — because it is making something, not working inside a heavy system.
And so two truths, the second more interesting than the first. Most shops are fine on Shopify — a first store, a catalogue a theme can hold, a founder happy in the admin — and we'll say so when you ask; we say it often. The shops we're built for are not most shops. For them there's a Next.js site with Sanity behind it, designed as the product it is, and behind that, when the catalogue earns it, an open-source engine that takes the money without asking a tier for permission.
Better to avoid the fight.
A whole commerce engine for one fork is a lorry for a loaf.