Mobile
Mobile is the track where an agent’s confidence is most dangerous. It can scaffold a screen in seconds, but it cannot feel a janky scroll, see a notification arrive, or watch a store rejection come back a week later. The stack choices here are about keeping the agent inside the loop it can verify, which is the JavaScript layer, and keeping native work small, explicit and rare.
The tiers are about release friction: how much breaks, and how slowly you can fix it, when a change is wrong. The profiles are about how much backend the agent has to reason about at the same time as the app.
Where are you?
- 01
MVP · Ship it
Expo managed workflow, a hosted backend, over-the-air updates, no native code.
0 to a few hundred testers · You, plus an agent
Open tier - 02
Growth · Charge for it
Expo with EAS builds, a typed API you own, and E2E tests on real devices.
Hundreds to tens of thousands · Two to five engineers, each with agents
Open tier - 03
Scale · Run it for many
Native modules or native apps behind a shared contract, with per-platform ownership.
Tens of thousands and up · Six or more engineers, often per platform
Open tier
What are you building?
| Tier | Consumer content & social | Companion mobile face of a SaaS | Tool offline-first utility |
|---|---|---|---|
| 01 MVP Ship it | Expo + Expo Router + Supabase 5/5 | Expo in the web app's monorepo 5/5 | Expo + SQLite, local-first 5/5 |
| 02 Growth Charge for it | Expo + EAS + your own typed API 4/5 | Expo + shared packages + EAS 5/5 | Expo + SQLite + optional sync 4/5 |
| 03 Scale Run it for many | React Native with native modules, or native apps behind one API 3/5 | Expo with custom dev client in the platform monorepo 4/5 | Native Swift and Kotlin behind one schema 3/5 |
Five rules for this track.
- 01
Stay in the JavaScript ecosystem as long as you can
React Native with Expo shares types, tooling and training data with the web. An agent that already knows your web app knows most of your mobile app.
- 02
File-based routing and typed navigation
Expo Router turns screens into files and route params into types. Agents make far fewer navigation mistakes when the route table is the folder tree.
- 03
Push native work behind a small, explicit boundary
When you do need a native module, isolate it in one package with a TypeScript interface. The agent can then work on either side without reading both.
- 04
Test on a device before every release
Store review makes bad releases expensive. A Maestro or Detox flow the agent runs locally catches the regressions that unit tests cannot.
- 05
Over-the-air updates change the risk model
Being able to ship a JavaScript fix without a store review makes an agent-driven workflow viable. Design for it from day one and keep native changes rare.