02 · Mobile · MVP · Companion
Expo in the web app's monorepo
Add an Expo app next to the web app, share the schema and API client, and let one change land in both.
Agent fit5/5 MVP · Ship it Reviewed
The stack
- Framework
- Expo + Expo Router inside the existing monorepo
- Data
- Whatever the web app already uses, through its API
- Auth
- The web app's provider (Supabase Auth, Clerk, Auth.js) via its native SDK
- Hosting
- EAS Update; store builds only when native dependencies change
- Also
-
- NativeWind sharing the web app's Tailwind tokens
- Shared packages for types, validation and the API client
- TanStack Query on both surfaces
Why agents do well here
5/5- Shared packages mean the agent changes a type once and both apps fail to compile until they agree.
- The agent already knows the domain from the web app, so mobile screens are mostly translation, which it does reliably.
- One repository, one package manager and one test command keep the agent's context small.
Avoid at this tier
- A second backend for mobile; consume the web app's API.
- Copying types across instead of sharing a package.
- Building every web screen for mobile; pick the three flows people need on a phone.
How it fits together
A companion app should feel like a second window onto the same product.
Put it in apps/mobile/, move shared types and the API client into
packages, and keep the mobile screens to the flows that matter on a phone.
Folder layout
apps/web/ the existing product
apps/mobile/ app/ (Expo Router), src/features/
packages/schema/ zod schemas and types both apps import
packages/api-client/ typed client, generated or hand-written once 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 Monorepo from day one
- 02 Shared schema package
- 03 The web app's auth provider with its native SDK
- 04 Three flows not thirty
- 05 EAS Update so the agent's fixes skip review
When to move on
Stay here until the product forces the next tier. You are ready for Growth when:
- Users keep old versions for weeks after a release
- A store rejection costs you a launch date
- You need analytics, crash reporting and push that you own
- The backend is your code, shared with a web product or not