Shopify is the right answer for most small stores in 2026 — until it suddenly is not, and the migration cost is brutal. Here is the framework I use to advise clients, based on a multi-tenant SaaS platform I built that runs 5 different store verticals from one codebase.
Quick Answer: Custom Next.js vs Shopify in 2026
Shopify wins under $500K annual revenue with standard catalog and checkout flow. Custom Next.js wins when you need multi-tenant architecture, vertical-specific UI, or AI agent integration. MCP endpoints, multilingual routing, and pgvector RAG are impossible on Shopify Plus at any price. Migration cost from Shopify to custom: $15,000–$50,000 — versus building right from start.
What is the honest case for using Shopify in 2026?
Shopify is the correct choice for the majority of small e-commerce stores in 2026. The platform handles payment processing, PCI compliance, tax calculation, inventory management, fraud detection, and a thousand small details that take months to build correctly from scratch. For a single-vertical store under $500K annual revenue with standard checkout flow, Shopify Standard at $39/month delivers 80% of what custom development gives at 5% of the cost.
The Shopify App Store has 8,000+ integrations for common needs — email marketing, accounting, shipping, reviews, loyalty programs. Most growing stores benefit more from plugging into this ecosystem than from owning every line of code.
| Scenario | Best choice | Why |
|---|---|---|
| First store, under $100K revenue | Shopify Basic | Speed to launch, low fixed costs, no maintenance |
| Single vertical, standard checkout | Shopify Standard | App ecosystem solves 90% of needs |
| Multi-region with 1-2 languages | Shopify Plus + Markets | Built-in geo routing works for simple cases |
| Headless storefront wanted | Shopify Hydrogen | Get speed without leaving the ecosystem |
If your store fits any row above, stop reading and use Shopify. The rest of this post is for the edge cases where Shopify creates more problems than it solves.
When does Shopify become the wrong choice?
Shopify becomes the wrong choice when business requirements outgrow the platform's assumptions about what an e-commerce store looks like. The breaking points are usually one of three categories: structural (multi-tenant, multi-vertical), behavioral (non-standard checkout, custom workflows), or integrative (AI agents, MCP endpoints, semantic search). When any of these become core requirements, Shopify forces increasingly painful workarounds.
The classic warning sign is when your team spends more time fighting Shopify's limitations than building features. If your developers are writing custom Liquid templates to override default behavior, hosting external services to handle business logic Shopify cannot, or paying for apps that duplicate functionality you already have — the platform is no longer leverage, it is overhead.
| Warning sign | What it costs on Shopify | What it costs custom |
|---|---|---|
| Custom checkout fields per vertical | $300+/month Plus + dev hours | Standard form field, free |
| AI agent control of store | Impossible (no MCP support) | Standard tool definition |
| Multi-tenant from single codebase | One Shopify store per tenant | One Vercel project, env switch |
| Semantic product search (RAG) | $200+/month app, limited | pgvector built into DB, free |
| Vertical-specific product fields | Metafields with UI gymnastics | Native Prisma schema |
If you recognize 2 or more of these warning signs in your roadmap, the math starts favoring custom development. Cost analysis for that scenario is covered in how much a Next.js website costs in 2026.
What does a multi-tenant Next.js SaaS look like in practice?
A multi-tenant Next.js SaaS uses one codebase to serve completely different store types from a single deployment pipeline. I built one currently running 5 store verticals: electronics, restaurant, food delivery, shoe marketplace, and B2B supply. Each store has fundamentally different UI, navigation, product fields, checkout, and delivery logic — but they all share one repository and one database schema.
The switch happens through a single environment variable: STORE_SLUG. Each Vercel deployment sets a different value, and the entire UI, theme, vertical config, and behavior adapts at runtime by reading from a shared Neon PostgreSQL database.
STORE_SLUG value | Vertical | What it activates |
|---|---|---|
| Electronics store | E-commerce | SKU, stock, brand filters, standard checkout |
| Italian restaurant | Restaurant | Menu, reservations, table booking, dine-in flow |
| Food delivery market | Food delivery | Delivery zones, time slots, expiry dates |
| Shoe marketplace | Fashion | Gender/size filters, brand pages, fit guides |
| B2B supplier | Wholesale | Bulk pricing, MOQ, invoice fields, NET-30 terms |
Adding a new client takes 2 days: seed script with their data, new Vercel project with their STORE_SLUG, DNS pointing to Vercel. Zero code duplication. This is structurally impossible on Shopify — every Shopify store is its own admin, its own billing, its own merchant account.
How does vertical configuration drive different UIs from one codebase?
A vertical configuration system makes the UI behavior data-driven rather than hardcoded. Each vertical defines a VerticalConfig object that describes what fields exist on products, what sections appear on the homepage, what shows up in navigation, and what fields the checkout form requires. The same React components render dramatically different interfaces based on which config loads.
For example, the product schema is fixed in the database but the visible fields per vertical are config-driven. An e-commerce product shows SKU and stock count. A restaurant product shows portion size and cook time. A food market product shows expiry date and storage temperature. Same database table, different vertical configs, different user-facing UIs.
| Vertical | Product fields shown | Checkout fields | Homepage sections |
|---|---|---|---|
| E-commerce | SKU, stock, brand, weight | Address, shipping method | Categories, featured products, brands |
| Restaurant | Portion size, cook time, allergens | Table number, time slot | Menu, gallery, reservations |
| Food delivery | Expiry, temperature, weight | Delivery zone, time window | Fresh items, weekly specials |
| B2B | MOQ, bulk tiers, lead time | Company, VAT, PO number | Catalog, bulk inquiry, terms |
Building this on Shopify requires custom Liquid templates per store and metafield gymnastics that make every update painful. Building it on custom Next.js is the natural shape of the code.
How does database architecture differ between platforms?
Shopify abstracts the database away — you cannot run JOIN queries against your own data without paying for higher tiers and using GraphQL Admin API. Custom Next.js gives full Prisma + PostgreSQL access from day one. For most stores this difference does not matter. For stores with non-trivial analytics, AI features, or vertical-specific data shapes, it matters enormously.
The platform I built uses 9 Prisma models: Store, Product, Category, Customer, Order, OrderItem, DeliveryZone, Promotion, KnowledgeEntry. The KnowledgeEntry table includes a pgvector column storing 1536-dimensional embeddings for semantic search and RAG — impossible on Shopify without a separate external service. All unstable_cache calls include STORE_SLUG in the cache key to prevent cross-tenant data bleed, and revalidateTag(STORE_SLUG) fires on every admin mutation to isolate ISR cache per store.
| Capability | Shopify | Custom Next.js + Prisma + pgvector |
|---|---|---|
| Direct SQL access | No (GraphQL only) | Yes |
| Vector search for semantic queries | Requires external service | Native via pgvector |
| Custom indexes on product data | Limited | Full control |
| Cross-store analytics (multi-tenant) | One Shopify per store | Single query across tenants |
| Schema migrations | Platform-controlled | Developer-controlled |
What does an AI-powered admin panel actually do?
An AI-powered admin panel lets store owners manage products, prices, orders, and promotions through natural language instead of clicking through dashboards. The platform exposes 9 tools to a GPT-4o-mini routing layer: get_products, update_product_price, bulk_update_prices, get_orders, update_order_status, get_customers, get_analytics, create_promotion, and search_knowledge.
A store owner types "discount all Makita products by 15% until Sunday." The AI calls bulk_update_prices with brand filter and date range, executes the mutation against Prisma, and confirms the result in plain language. Zero developer involvement for routine operations. The same pattern that powers the AI booking assistant in the Kate Barber template scales to commerce admin tasks because the underlying architecture is identical: tool-calling with structured outputs over Prisma.
| Admin task | Manual on Shopify | AI admin on custom |
|---|---|---|
| Bulk price update by brand | Filter products, edit one by one or CSV import | "Discount Makita by 15%" |
| Find orders by status | Multiple filter clicks | "Show pending orders from this week" |
| Create promotion | 8-step form wizard | "Create 20% off for new customers, expires Sunday" |
| Get analytics summary | Navigate to reports section | "How did we do last week vs the week before?" |
What is MCP and why does it matter for e-commerce in 2026?
Model Context Protocol (MCP) is a 2025 standard that lets AI agents like Claude Desktop, Cursor, and Windsurf interact with external tools through a stable interface. An MCP endpoint exposes specific business actions as tools the AI can call. For e-commerce, this means a store owner can manage inventory, prices, and orders directly from Claude Desktop — without ever opening the admin panel.
The platform exposes 9 MCP tools at /api/mcp — the same tools the in-store AI admin uses, but reachable from external AI agents. A store owner working in Claude Desktop says "check inventory levels across all stores and reorder anything below 10 units." Claude calls the MCP endpoint, gets data, plans the reorder, and executes it. This is structurally impossible on Shopify — there is no Shopify MCP server, and the GraphQL Admin API requires custom integration code per tool.
| Capability | Shopify | Custom Next.js with MCP |
|---|---|---|
| Connect Claude Desktop to store | Custom code per integration | Standard MCP handshake |
| Cross-store operations from AI | Multiple API calls per store | Single MCP endpoint |
| New tools added | Custom code + deployment | Tool definition update |
| Future AI agent compatibility | Locked to current GraphQL | Standards-based |
MCP adoption is accelerating fast in 2026. Stores built without MCP support today will need expensive retrofits in 18-24 months when AI agent workflows become standard for SMB operations.
What does the performance comparison actually look like?
The performance comparison between Shopify and custom Next.js depends heavily on what features each setup includes. A stock Shopify store with a fast theme delivers reasonable mobile Lighthouse scores in the 60-80 range. Add 5-10 apps and that drops to 30-50. A custom Next.js stack with Server Components, CSS Modules, and Sharp WebP pipelines holds Lighthouse 92-100 even with full feature sets because every byte of JavaScript is intentional.
For technical context on how the custom stack achieves these scores, see how to build a fast Next.js website in 2026.
| Setup | Mobile Lighthouse | Desktop Lighthouse | Core Web Vitals |
|---|---|---|---|
| Shopify Basic, default theme | 50–70 | 75–90 | Often failing |
| Shopify with 5+ apps | 30–55 | 50–75 | Failing |
| Shopify Plus + Hydrogen | 75–90 | 90–100 | Mostly passing |
| Custom Next.js production | 92–100 | 98–100 | All green |
What are the real costs over a 3-year horizon?
The 3-year cost comparison flips around store size and complexity. Small single-vertical stores under $200K revenue pay less with Shopify. Multi-tenant SaaS operations or stores with complex vertical requirements pay less with custom over the same horizon. The exact crossover point depends on app subscriptions, transaction fees, and developer time.
| Cost over 3 years | Single store on Shopify | Multi-tenant custom Next.js |
|---|---|---|
| Platform fees | $1,400 (Standard tier) | $720 (Vercel Pro × 3 years) |
| Transaction fees | $3,000-$15,000 (2.9% + 30¢ × volume) | $0 (Stripe direct: 1.4% + 25¢ EU) |
| App subscriptions | $4,000-$12,000 (10 essential apps) | $0 (everything built-in) |
| Plus tier (if needed) | $90,000+ ($2,500/mo × 36) | N/A |
| Custom development | $5,000-$20,000 (workarounds) | $15,000-$40,000 (build) |
| Single store total | $13,400-$140,000 | $15,720-$40,720 |
| 5-store SaaS total | $67,000-$700,000 | $15,720-$40,720 |
The multi-tenant economics are dramatic. A single Shopify Plus tenant costs $30,000/year. A custom multi-tenant Next.js setup serving 10 tenants from one deployment costs roughly the same as serving 1 tenant — there is no per-tenant platform fee.
When should you definitely stay on Shopify?
You should stay on Shopify if your store is under $300K annual revenue, sells standard physical or digital products, has standard checkout requirements, and is not building a multi-store SaaS. The cost of custom development outweighs the limitations of the platform at that scale. Most stores never grow beyond this threshold, and that is completely fine — Shopify exists exactly for this segment.
Stay on Shopify even at higher revenue if your business is operationally simple (single vertical, single language, single currency, standard physical goods) and you have no AI-agent requirements in your roadmap. The platform overhead is real but worth it for the operational simplicity.
The decision to leave Shopify is rarely about revenue — it is about whether your business model fits the platform's assumptions. If you spend more than 2 hours per week fighting Shopify limitations, the math has already flipped.
When should you migrate from Shopify to custom?
You should migrate from Shopify to custom Next.js when you hit two or more of these triggers: managing more than one store simultaneously, needing vertical-specific UI that requires custom Liquid templates, paying $500+/month in apps that duplicate functionality, planning AI agent integration through MCP or function calling, or requiring semantic search and RAG over your product catalog. If your roadmap includes any of these, the migration becomes cheaper the earlier you do it. Migrating at $1M revenue costs 5× what it costs at $200K.
Need to evaluate whether your store is at the migration tipping point? See the full development service or book a free 30-minute audit — I will review your current Shopify setup, app stack, and roadmap, and send you a written assessment of whether custom Next.js makes financial sense for your specific situation within 48 hours.
