Skip to content
STACK IT FIRST
Install the skills
02 · Mobile · Growth · Tool

Expo + SQLite + optional sync

Local-first stays the default; sync, accounts and paid tiers are added as separate features with their own boundary.
Agent fit4/5 Growth · Charge for it Reviewed

The stack

Framework
Expo + Expo Router, EAS Build and Update
Data
expo-sqlite with Drizzle on device; PowerSync or a small Hono API for sync
Auth
Only for sync and purchases
Hosting
EAS; RevenueCat for in-app purchases
Also
  • NativeWind
  • Maestro flows for the core workflow
  • Sentry
AGENTS.md + real projects on STACK IT FAST (opens in a new tab)

Why agents do well here

4/5
  • Keeping local data as the source of truth means the agent can test the whole workflow without a network.
  • Sync as a separate feature with its own module keeps the hardest code in one place the agent can read in isolation.
  • Purchases through RevenueCat give the agent a documented SDK instead of two platforms' store APIs.

Avoid at this tier

  • Rewriting the app around a server database when sync is requested; add sync to the local one.
  • Handling store receipts yourself.
  • Sync engines you cannot debug from the client; prefer ones with visible queues.

How it fits together

The tool now pays for itself, so purchases and optional sync appear. Both are separate features behind a small boundary; the core workflow still works offline and is still what the device tests cover.

Folder layout

app/              index.tsx, item/[id].tsx, settings/, paywall.tsx
src/db/           schema.ts, migrations/, client.ts
src/features/     <workflow>/, sync/, purchases/
maestro/          core-workflow.yaml

First five decisions

Lock these in before the agent writes the second feature. Each one removes a choice it would otherwise make differently every time.

  1. 01 Local SQLite stays primary
  2. 02 Sync as its own module
  3. 03 RevenueCat for purchases
  4. 04 Accounts only when sync is on
  5. 05 Maestro on the offline path first

When to move on

Stay here until the product forces the next tier. You are ready for Scale when:

  • You need background sensors, heavy graphics, or platform health and payment APIs
  • iOS and Android have separate owners
  • Startup time and binary size are tracked as product metrics
  • Compliance requires platform-native security features
Scale · Tool Native Swift and Kotlin behind one schema When the tool is the platform integration itself, write it natively per platform and share only the data contract. Next tier

Same tier, other profiles