Expo + Supabase + Stripe Stack

The ecommerce-ready stack: Expo, Supabase for auth and orders, Stripe for physical goods. Real build times from a developer who shipped 4 apps in a month.

Stack/Expo + Supabase + Stripe Stack

Starter Kit

Expo + Supabase + Stripe Stack

Expo + Supabase + Stripe for native mobile ecommerce. What it covers, what it does not, and realistic build times.

What this stack is good for

Physical goods ecommerce, services, hardware sales, event tickets. Anything where Apple does not require IAP. One-time payments that settle through a card network, not the App Store.

This is the stack I ship when the product is not a digital subscription. For digital subscriptions, swap Stripe for RevenueCat. See the Expo + Supabase + RevenueCat stack.

The pieces

  • Expo + React Native — native iOS and Android from one codebase.
  • Supabase — auth, Postgres, row-level security, storage for product images.
  • Stripe — Payment Sheet on mobile, PaymentIntent created server-side, automatic_tax enabled.
  • NestJS — the thin backend that creates the PaymentIntent and handles the webhook.
  • Expo Notifications — order status pushes.

Real build time for a v1

For a physical-goods store with product list, cart, checkout, order history, and push for shipping updates:

  • Schema (products, cart, orders): ~4 hours.
  • Product list + detail: ~10 hours.
  • Cart + Stripe Payment Sheet: ~8 hours.
  • Order history + push: ~5 hours.
  • App Store screenshots + submission: ~5 hours.

About 32 hours. The boilerplate cuts ~12 hours off by shipping the schema and Stripe wiring already done.

The data shape I use

Three tables cover v1: products, orders, order_items. Cart lives client-side until checkout — no cart table. When the user hits Pay, the client sends the cart to the createOrder backend, which creates the PaymentIntent and the pending order in one transaction.

Where this stack shines

  • Tax: automatic_tax: true on the PaymentIntent. Stripe computes VAT, GST, sales tax. You skip the tax engine entirely.
  • Refunds: Stripe dashboard one-click refund. Write the refund event back via webhook to mark the order refunded in Supabase.
  • Inventory: Stock locking via a Postgres function (see the stock race condition problem page).

Where this stack struggles

  • Digital unlocks: Do not use Stripe for anything Apple would classify as a digital purchase. You will be rejected. Use RevenueCat + Apple IAP.
  • Physical + digital mix: If you sell both in one app, you need two checkout flows: Stripe for physical, IAP for digital. Two codepaths, one product.

What AI App Factory ships

  • Supabase schema for products, orders, order_items.
  • NestJS endpoints for createOrder and the Stripe webhook.
  • React Native checkout screen using Stripe Payment Sheet.
  • Order history screen + push wiring.
  • The stock-locking Postgres function.

See pricing

Get this stack today.

One-time purchase. Full-stack boilerplate + 11 AI agents. No subscription.

AI App FactoryStackExpo + Supabase + Stripe Stack