Expo + Realtime Map Stack

The delivery-ready stack: Expo, react-native-maps, Supabase Realtime for driver location, push for order updates. Three roles, one codebase.

Stack/Expo + Realtime Map Stack

Starter Kit

Expo + Realtime Map Stack

Expo + Supabase Realtime + react-native-maps ships a delivery app with three roles, realtime tracking, and the Apple review rules for location.

What this stack is good for

Delivery, field service, rideshare-style apps. Anything with moving drivers, realtime order status, and a customer waiting to see where their thing is. Native iOS and Android, one codebase, three role-based screen sets.

The pieces

  • Expo + React Native — customer app and driver app share the same binary; role gates the screen set.
  • react-native-maps for the map view.
  • Supabase Realtime for driver location and order status updates.
  • NestJS for the order assignment logic and location throttling.
  • Expo Notifications for order status pushes.

Real build time for a v1

Customer + driver flows with realtime tracking:

  • Schema (orders, drivers, locations): ~6 hours.
  • Customer browse + order placement: ~10 hours.
  • Driver queue + accept/decline + status updates: ~8 hours.
  • Realtime map for customers with driver location: ~12 hours.
  • Push notifications for order state changes: ~4 hours.
  • Store submission + screenshots: ~6 hours.

About 46 hours total. Backoffice (a simple web view of orders) adds ~6 hours but is separate from the mobile codebase.

Location updates the right way

The rookie move is streaming driver location every second. Battery drops 30% per hour and Apple rejects the app for "not handling location responsibly". The right move:

  • Significant-change updates from the OS on the driver side (iOS and Android both support it).
  • Throttle server writes to one per 10 seconds at most.
  • On the customer side, interpolate between updates for a smooth marker animation. react-native-reanimated does this in ~30 lines.

Realtime over Supabase

Two channels:

  1. order:<orderId> — state changes for this order. Customer subscribes.
  2. driver:<driverId>:location — location updates. Customer subscribes while waiting.

Presence tells you when a driver goes offline so you can free the order.

Role-based screens

One binary, two screen sets. Gate them on the user role column in Supabase. Customer sees the browse and track screens; driver sees the queue and navigation handoff screens. Put the logic in a single useRole hook and let Expo Router switch roots.

What AI App Factory ships

  • Supabase schema for orders, drivers, driver_locations.
  • Postgres function assign_order with SELECT FOR UPDATE SKIP LOCKED to avoid assignment races.
  • Customer tracking screen with interpolated marker.
  • Driver queue screen with accept/decline.
  • Push scheduler for order status events.

See pricing

Get this stack today.

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

AI App FactoryStackExpo + Realtime Map Stack