Migrate from a0.dev: extract the Expo app into a standard owned mobile deploy
An a0.dev project is prompt-driven React Native/Expo code, an AI agent that edits in real time, Convex or Supabase backends, built-in APIs, and a one-click path toward App Store and Google Play. Migration is exporting or syncing that Expo tree into org Git, remapping backend and store credentials into CI, and proving device builds without the a0 agent. You keep the product behavior; you stop needing a0’s publish button to ship binaries.
CodeCross LLC defines migrate-from-a0 as Expo/React Native extraction from a0.dev into a standard owned mobile deploy. Operators pull the generated project into an org remote, remap Convex/Supabase and store signing for a clean runner, and prove build → device install without a0. Done when binaries ship from that checkout alone—no agent session, no a0-only publish for production tracks.
Why a raw a0 preview fails on standard mobile CI
A green a0 web preview is not a portable Expo artifact
CI images lack preview chrome the agent hid. Auth schemes still point at a0 deep links. Native modules that only worked in IPA/APK testing never landed in the remote. Signing still lives inside Generate & Submit.
Agent message history lands in the remote
Secrets in chat, unpublished prompt experiments, and a0-only preview caches need an include-or-drop pass. The extract is source, Expo config, and a written Convex vs Supabase map.
Install only succeeds inside an open a0 session
Replace “works because the agent just ran it” with install, typecheck/test, and EAS build profiles. Fail if the app only bootstraps in a0’s preview shell.
Certificates exist only inside a0’s publish flow
If provisioning and Play signing keys never leave Generate & Submit, a platform outage blocks every hotfix. Move signing into org-controlled EAS credential stores.
Web preview hid native-only surfaces
Payments, push, camera, and biometrics need IPA/APK proof. Capture Expo SDK/runtime explicitly so OTA planning does not invent compatibility.
The extract sequence that actually boots
Pull, pin, remap, then prove eas build without a0 open
Product behavior stays. Generate & Submit GUI and preview assumptions leave. The destination is a conventional EAS profile from a named checkout.
01
Take application source, Expo config, and the backend map
Leave agent transcripts and preview caches out. Capture deep-link schemes and payment product IDs so CI does not invent them.
02
Group agent-touched screens into maintainable Expo modules
Pin Expo SDK in config. Encode agent assumptions as CI-tested packages—not chat archaeology.
03
Mint destination Convex/Supabase and payment secrets
Never commit a0 panel dumps. Point Auth, push (FCM where used), and purchases at production projects on a native build.
04
Prove build → device install with the agent closed
The destination ships from that checkout alone. a0-only publish is no longer required for production tracks.
How to
Extract an a0.dev Expo tree into standard owned mobile CI
Expo-plus-store extract. Success is build → device install with no open a0 agent and no a0-only publish for production tracks.
Step 01
Decide what belongs in the extract versus what stays in a0
Take application source, Expo config, navigation and screens the agent generated, and a written map of Convex vs Supabase wiring. Leave agent message history (especially with secrets) and unpublished prompt experiments out.
Step 02
Map agent edits into maintainable Expo modules
Pin Expo SDK and lockfiles. Replace “works because the agent just ran it” with install, typecheck/test, and EAS build profiles.
Step 03
Move store signing and provisioning off a0
Certificates, profiles, and Play keys go into org-controlled EAS/credential stores. Verify a clean CI upload to internal tracks.
Step 04
Remount Convex/Supabase, deep links, and payments
Mint new secrets. Update schemes that still point at a0 preview. Verify Auth and purchases on a native build—not only react-native-web.
Step 05
Prove the destination ships from checkout alone
build → device install with the agent closed. Rotate old a0-visible secret values after cutover. Generate & Submit is then optional.
Read next
Proof, the essay, and sibling intents
These pages are already on the site. Use them to pressure-test the bet before a call.
“What impressed us most about CodeCross was their ability to deeply understand our vision and translate it into a complete digital solution. Unlike many agencies that just focus on technical delivery, CodeCross approached our project like true partners.”
What comes out of an a0 React Native/Expo extract versus what stays in a0?
Take application source, Expo config, navigation and screens the agent generated, and a written map of Convex vs Supabase wiring. Leave agent message history (especially with secrets), a0-only preview caches, and unpublished prompt experiments out of the remote unless explicitly needed. Capture env *names* the agent assumed so CI does not invent config.
How do you map a0 agent edits into maintainable Expo modules?
Group agent-touched screens into clear packages, pin Expo SDK and dependency versions in lockfiles, and replace “works because the agent just ran it” steps with install, typecheck/test, and EAS build profiles. Fail the pipeline if the app only bootstraps inside an open a0 session. Encode agent assumptions as CI-tested modules—not chat archaeology.
Why must store signing and provisioning leave a0 before calling migration done?
If certificates, provisioning profiles, and Play signing keys only exist inside a0’s publish flow, a platform outage or account loss blocks every hotfix. Move signing into org-controlled EAS/credentials stores, verify a clean CI upload to internal tracks, then retire a0 as the sole uploader. Apple and Google developer accounts stay yours either way—ownership of the *pipeline* is the migration bar.
What fails first when CI builds Expo without a0’s injected preview runtime?
Missing backend env, Auth redirect schemes still pointing at a0 preview deep links, native config that assumed a0’s build chrome, and assets the agent never committed. Normalize app.json/eas.json, schemes, and secrets first; then push. A green a0 preview is not a portable Expo artifact.
Ship from checkout—not from the Generate & Submit GUI.
Bring the Expo tree and the start command a0 assumed. We will say whether this is a portable mobile artifact — or an app that only boots while the agent session is open.