Quick path
Generate the catalog, cart, and checkout with ShipNative. Use Stripe for payments (web checkout for physical goods — IAP is only for digital). Hook Supabase or Shopify API for products/orders. Shippo / EasyPost for labels. Launch with one product category before expanding.
Physical goods vs digital: the Apple rule
Apple requires in-app purchases (15–30% fee) for digital goods and services consumed inside the app. Physical goods and services consumed outside the app are paid via standard web payment (Stripe) — no Apple tax. For a clothing store, coffee shop, or electronics storefront, you use Stripe and keep 100% minus Stripe’s fee (2.9% + $0.30). This is the default and perfectly legal.
What a native e-commerce app needs
- Product catalog: grid, categories, search
- Product detail: photos, variants (size/color), description, add-to-cart
- Cart: line items, quantity, remove, subtotal
- Checkout: address, shipping options, Stripe payment sheet
- Orders: order history, tracking number, status
- Account: sign in, saved addresses, saved cards (via Stripe Customer)
- Notifications: order confirmation, shipped, delivered
- Wishlist / Favorites (optional but high-retention)
The AI prompt to start with
E-commerce app for [niche: boutique coffee / streetwear / indie books]. AUTH: Clerk (email + Apple Sign In). Guest checkout supported. TABS: 1. Shop: product grid with category filter chips, search icon top-right. Tap to open product. 2. Cart: line items with quantity steppers, subtotal, Checkout button. 3. Orders: list of past orders with status, tap for tracking detail. 4. Account: profile, saved addresses, saved cards, sign out. PRODUCT DETAIL: - Photo carousel, title, price, description. - Variants (size/color) picker. - Add to cart, favorite button. CHECKOUT: - Address form with autocomplete. - Shipping method selector (via Shippo rates). - Stripe PaymentSheet for card entry. - Order confirmation with expected delivery. DATA: Supabase tables - products, carts, orders, addresses. RLS by user_id for cart/orders. Dark or light theme based on brand; [accent color: #...].
For more on prompt shaping, see How to Write Prompts That Produce Better React Native Code.
Payments: Stripe PaymentSheet in React Native
The cleanest flow in 2026:
- Client sends cart to your backend.
- Backend creates a Stripe PaymentIntent with the total + metadata (customer ID, order ID).
- Backend returns
client_secretto the app. - App presents Stripe PaymentSheet via
@stripe/stripe-react-native. - PaymentSheet handles Apple Pay, Google Pay, and card entry with saved cards.
- On success, backend webhooks confirm payment and mark the order as paid.
Shipping: labels and tracking without building it
- Shippo or EasyPost for rate shopping + label generation across every major carrier (USPS, UPS, FedEx, DHL).
- Store the tracking number on the order. Shippo webhooks updates — shipped, in transit, delivered — firing push notifications to the customer.
- Tax. Use Stripe Tax or TaxJar to calculate tax at checkout. Do not manually hard-code rates.
Notifications that move the needle
Order-cycle notifications are the highest-converting push in e-commerce. Use expo-notifications to send:
- Order confirmed (instant after payment)
- Shipped (with tracking link that opens in-app)
- Out for delivery (from Shippo webhook)
- Delivered (prompts review after 3 days)
- Abandoned cart (1 hour, 24 hours — with caution, do not spam)
See the setup in Push Notifications in Expo: The 2026 Setup Guide.
Launch: narrow catalog, rabid audience
Do not launch with 200 products. Launch with 10 that slap for one niche. The pattern that works:
- Pick a niche where an audience already exists (subreddit, Discord, Instagram community).
- Launch with 8–15 curated products tied to that niche’s identity.
- Use ASO and a landing page to capture search traffic.
- Launch exclusively on Product Hunt and your niche community — see our Product Hunt playbook.
- Offer App Store-only discounts to drive installs (“10% off your first order in the app”).
Common mistakes to avoid
- Using IAP for physical goods. Apple does not require it and Stripe is far cheaper.
- Skipping Apple Pay / Google Pay. Conversion drops meaningfully without them.
- Loading 500 products into the grid with no lazy loading. First scroll = uninstall.
- No abandoned-cart recovery. One well-timed push recovers 10–15% of drop-offs.
- Launching globally day one. Pick one country, ship one region well, then expand.