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
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.
- 01 Local SQLite stays primary
- 02 Sync as its own module
- 03 RevenueCat for purchases
- 04 Accounts only when sync is on
- 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