Sheet A-S03 · Headless ecommerce

For brands the template broke.

Typical scope6 – 10 weeks

Templates ship fast because the agency already knows what they will ship. They tend to crack at the first scale event — somewhere around the volume where edge cases compound and the workarounds outnumber the original features. Custom storefronts ship slower because the problem is drawn before it is coded.

When custom is the right answer — the four signals.

Your app stack on Shopify is more than three apps deep, and at least one of them is patching a problem the theme created.
Your checkout has a customisation requirement the platform does not support — non-standard payment splits, B2B credit terms, complex inventory holds, or audio/video product requirements.
Your ops team is doing manual reconciliation across more than two systems. The cost of staying on a template is now higher than the cost of moving off it.
You are paying for theme features you cannot turn off, and the template is constraining what you can sell, not enabling it.

What we build — opinionated, not unique-for-uniqueness.

Next.js App Router with Server Components for the catalogue and Client islands where the cart, the persistent player, or the live availability actually warrants client-side state. Supabase for the product catalogue, order records, and customer accounts with row-level security. Razorpay or Cashfree for checkout, with idempotent webhook handling and a reconciliation job that runs against gateway settlement reports. Cloudflare R2 for assets when bandwidth costs matter.

Reference build — STUDIRT.

STUDIRT is a working storefront for a Mumbai film composer with a persistent audio player that survives navigation and a custom Razorpay checkout for sample packs and stems. The drawing is on the work page; the trade-offs are visible. See the case file →