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.