App structure
Navigation, deep links, and account flows laid out so a second screen does not invent a second architecture.
Mobile applications
iOS and Android applications from TypeScript, released through Expo’s build and submit pipeline.
Expo is how we ship a mobile product when the team already thinks in TypeScript and both stores matter. React Native draws the interface. Expo Router structures the app. EAS Build produces the binaries, and JavaScript changes can ship over the air when the native shell does not have to change.
We treat the native project as a real artifact, not a folder nobody opens. When a device API is missing from the Expo SDK, we add a module in Swift or Kotlin instead of pretending the gap is a web problem.
Expo
Navigation, deep links, and account flows laid out so a second screen does not invent a second architecture.
Camera, notifications, secure storage, and the other APIs the product actually calls, through the Expo SDK or a small native module.
EAS Build and submission, versioning, and the review notes that keep a release from stalling on a checklist.
JS-only fixes shipped without a store review, with a native release when the binary itself changes.
Types and API clients shared with a TypeScript web app when both surfaces talk to the same backend.
A Swift or Kotlin module when the platform, not the JavaScript bridge, has to do the work.
Delivery
Fit
Neighbors
These are the switches we recommend in scoping, not a disclaimer.
The interface should be SwiftUI and Compose, or the platform APIs are the feature.
The team wants Dart and a renderer that does not use the system widgets.
A responsive web app covers the job without a store review.
Continue
Expo is a starting point. Bring the constraint that matters more.
Tell us what you are building, what already exists, and which surface matters first. We will reply with a point of view.