Guides · August 2, 2023
Next.js Commerce vs Custom Starter: Which Ships Faster?
Next.js Commerce reference implementations get you to a working storefront fastest; a custom starter wins once your catalog, checkout, or content needs diverge from the reference model. Here's how to tell which situation you're in before you commit.
By Polo Themes
For most teams, a Next.js Commerce reference implementation ships faster in the first two weeks, and a custom-built starter ships faster from week three onward. The reference repo (Vercel's own or a similar open-source template) gives you a working product-listing-to-checkout flow against a real backend almost immediately, which is genuinely valuable for validating an idea or a client pitch. But those templates are deliberately generic — built to demo integration patterns across many commerce backends rather than to fit your specific catalog shape, promotion logic, or content model. The moment your requirements diverge from "standard PDP, standard cart, standard checkout," you start fighting the template's assumptions, and a custom starter — one architected around your actual data model from day one — pulls ahead and stays ahead.
This is a genuinely close call for a lot of teams, which is why it's worth working through deliberately rather than defaulting to whichever option a blog post told you was "the modern way." Below is the framework we use when advising founders and dev teams choosing between the two, plus where we think the ecosystem is headed.
What "Next.js Commerce" Actually Means
"Next.js Commerce" isn't a single product — it's become shorthand for a category of reference implementations that pair the Next.js App Router with a headless commerce backend (Shopify, BigCommerce, Medusa, Commerce.js, and others each have their own variant). These repos exist primarily to demonstrate integration patterns: how to fetch products with the App Router's server components, how to handle cart state across client and server, how to wire up a checkout redirect or embedded checkout, how to do ISR-based revalidation on product pages. They're reference architecture, not a finished product.
That distinction matters more than it sounds. A reference implementation is optimized for teaching the integration, which means it favors clarity and broad applicability over depth in any one direction. It will have a product page, but probably not the variant-matrix UI your configurable-product catalog needs. It will have a cart drawer, but probably not the multi-currency or B2B quote-request flow your business runs on. Treating a reference implementation as a finished starter — rather than as a well-documented example to learn from and then diverge from — is the single most common mistake we see teams make.
The Case for Starting From a Reference Implementation
None of this means reference implementations are the wrong choice — for the right situation, they're clearly faster.
- Speed to a working demo. If you need a clickable storefront connected to a real backend within days — for a pitch, a proof of concept, or an internal stakeholder demo — a reference implementation gets you there faster than anything built from scratch.
- Battle-tested App Router patterns. The data-fetching, caching, and revalidation patterns in a well-maintained reference repo reflect real production learning about the App Router's quirks (streaming, partial prerendering, route segment caching). Reinventing these from a blank Next.js install costs real time and produces real bugs.
- A known-good baseline for Core Web Vitals. Reference implementations from vendors are usually tuned for Lighthouse scores out of the box — image optimization, font loading, and route-level code splitting are already handled, which matters if performance is a stated requirement from day one.
- Lower risk for a standard commerce model. If your product genuinely is "browse a grid, view a PDP, add to cart, checkout" with no unusual catalog structure, the reference implementation's assumptions probably match your reality closely enough that you won't fight them.
Where Reference Implementations Start to Cost You Time
The friction shows up predictably, and it's worth naming so you can spot it early rather than three sprints into a rebuild.
- Data model mismatch. Reference repos model products generically. Configurable products, bundles, subscriptions, or a multi-tenant marketplace model all require restructuring the fetching layer, not just swapping components — and that restructuring is harder inside code you didn't design than in code you did.
- Checkout logic bolted on, not built in. Most reference implementations redirect to a hosted checkout (Shopify's, for instance) rather than implementing custom checkout steps. If your business needs an embedded, multi-step, or headless checkout — gift cards, split payments, subscription billing — the reference architecture usually needs to be significantly rewritten, not extended.
- Content and commerce living in separate silos. Marketing pages, landing pages, and blog content typically aren't part of the commerce reference repo's scope. Bolting a CMS on afterward, inside a codebase architected only around product/cart/checkout routes, tends to produce awkward routing and duplicated layout logic.
- Upgrade churn. Vendor reference implementations get restructured periodically to demonstrate new Next.js features. If you forked one and diverged, pulling in upstream fixes becomes a manual merge exercise rather than a simple update.
A Decision Framework, Not a Default
Choose a reference implementation when: you need a working demo within days rather than weeks; your catalog is genuinely standard (simple products, standard variants, a hosted checkout redirect is acceptable); performance tuning and App Router caching patterns matter more right now than deep customization; or you're validating whether the product idea has legs before committing to a larger build.
Choose a custom starter when: your catalog has structure a generic reference won't model cleanly (configurable products, marketplace/multi-vendor, subscriptions, B2B pricing tiers); checkout needs to be embedded, multi-step, or deeply customized rather than a redirect; content and commerce need to share layout and routing from day one; or you already know this product has a multi-year roadmap and the short-term time saved by a reference repo will be repaid many times over in medium-term rework avoided.
A reasonable middle path: build the proof of concept on a reference implementation to validate the idea and de-risk the backend integration, then commission or build a purpose-built starter for the production rebuild once requirements are clearer. This costs some duplicated work but avoids both failure modes — shipping too slowly to validate an idea, and locking in an architecture before you understand what you actually need.
Where Polo Themes Fits
Polo Themes has built its catalog on Shopify and Figma starters — including the Optics, Medical, Wosa, Course Whiz, Electronix, and Groxery themes, plus matching Figma kits — because that's where the demand for fast, design-forward commerce starters has concentrated. We're now extending that same purpose-built approach into production-grade Next.js and headless-commerce starters, aimed squarely at the gap this article describes: reference implementations that are too generic once real catalog and checkout complexity shows up, and custom builds that cost more time and money than most teams have budgeted. We don't have a Next.js starter to sell today, but it's a stated, active direction for us, and this article — along with future ones in the same cluster — reflects the research and evaluation work behind that build. If you want to see the design and structural thinking that carries over from our current themes, browse our Shopify catalog or the full theme catalog in the meantime, and check our blog for updates as the Next.js line takes shape.
A Practical Decision Checklist
Before you commit to either path, answer these five questions honestly:
- Does your catalog have a structure (configurable products, bundles, marketplace listings, subscriptions) that a generic PDP/cart model won't represent cleanly?
- Does checkout need to be embedded or multi-step, rather than a redirect to a hosted checkout page?
- Will marketing content, landing pages, or a blog need to share layout, navigation, and routing with the commerce pages from the start?
- Do you have a firm, funded 12+ month roadmap for this product, or is this still a validate-the-idea stage?
- Does your team have the in-house capacity to own and evolve a custom codebase, or do you need a vendor-maintained upgrade path?
Two or more "yes" answers to the first three questions is a strong signal to invest in a custom starter now rather than later. If you answered "still validating" to question four, start with a reference implementation and plan the rebuild deliberately rather than letting the prototype quietly become production code.
Frequently Asked Questions
Is Next.js Commerce still actively maintained?
Reference implementations in this space go through periodic rewrites to track new Next.js and App Router features, and maintenance activity varies by which vendor's variant you're using. Check the specific repo's commit history and open issues before adopting it as a long-term base, rather than assuming "official-looking" means "actively maintained."
Can I start with a reference implementation and migrate to a custom starter later?
Yes, and for idea-validation-stage products this is often the right sequencing. Expect to rewrite the data-fetching and checkout layers rather than incrementally patch them — plan the migration as a deliberate second build, not a series of small refactors on top of the original.
Does a custom starter mean building everything from scratch?
No. "Custom starter" typically means a purpose-built foundation — data-fetching patterns, component architecture, checkout scaffolding — designed around your actual requirements, often still built on proven primitives (the App Router itself, a headless commerce SDK, a component library) rather than reinvented from zero. The difference from a reference implementation is that the architecture decisions are made for your product, not for a generic demo.
Does Polo Themes sell a Next.js commerce starter today?
Not yet. Our current catalog is Shopify themes and Figma kits. Production-grade Next.js and headless-commerce starters are a stated direction we're actively building toward, and we'll publish here as that work becomes available.