All stacks

stack

Realtime Mobile Stack

React Native + Expo + Supabase for apps where state has to sync in seconds

The Realtime Mobile Stack is for AppLiaison products that ship as a phone app first and where state has to be synchronized across devices in seconds, not minutes. It pairs Expo for the cross-platform shell with Supabase for Postgres + realtime subscriptions over WebSocket, so a write on one device propagates to every subscribed client without a separate pubsub layer.

Architecture

Architecture variant: realtime
Frontend
React Native via Expo SDK 50Expo Router (file-based)TanStack Query for server state
Backend
Supabase Postgres (single source of truth)Supabase Realtime (WAL-based subscriptions)Supabase Edge Functions (Deno) for server logic
Data + infra
Expo Application Services (EAS) for builds and submissionSupabase (Postgres + Realtime + Storage + Auth)Sentry (mobile error monitoring)
Integrations
Stripe (with Apple Pay / Google Pay)Firebase Cloud Messaging (push notifications)Twilio (SMS verification)RevenueCat (in-app subscription management on iOS/Android)

When to choose this stack

  • The product is mobile-first; the web is a marketing surface, not the workflow
  • State changes must propagate across devices within ~1 second
  • You want a single codebase shipping iOS, Android, and the web
  • In-app subscriptions or one-time purchases need to flow through the App Store and Play Store
  • Customers expect push notifications, not just email

What's NOT included

  • Heavy native modules (camera ML, AR) — possible but billed as a custom add-on
  • Offline-first with multi-day disconnect — use the Field/Mobile Workforce Stack
  • Wear-OS or watchOS companion apps
  • Desktop apps (Electron, Tauri)

How the pieces fit

The app is a single Expo codebase that compiles to iOS, Android, and a web companion. State lives in Supabase Postgres, and every relevant table has a Realtime subscription open from the device, so a write becomes a broadcast and a broadcast becomes a UI update without a custom pub/sub layer.

Auth is Supabase Auth with row-level security policies — the same JWT that authorizes a query also constrains what a client can read or write, so a client cannot subscribe to rows it should not see.

Why these choices

Expo over bare React Native: builds, OTA updates, and store submission are all genuinely hard problems. EAS makes them one-line.

Supabase Realtime over a custom WebSocket service: the subscription model is built on Postgres’ write-ahead log, so it is consistent with the database state by construction.

RevenueCat over Apple/Google billing SDKs directly: cross-platform subscription state is a tarpit. RevenueCat normalizes it.

Apps built on this stack