First App Launch
Configure your environment and launch a native development build after initialization.
First app launch
Use this page after the buyer has reviewed the generated planning documents and accepted the initialization plan. A green source test suite is not native launch proof.
Environment setup comes before prebuild and launch. Do not let yarn init:project run native work until .env, your service choices, and your app assets are ready. A planning run with --no-native is the safe starting point.
1. Create .env before any native command
cp .env.example .envReplace every required placeholder with values from your own services. Never commit .env or paste secrets into generated documents.
The core variable names are listed in .env.example. Add real values from your own accounts:
EXPO_PUBLIC_SUPABASE_URL=
EXPO_PUBLIC_SUPABASE_ANON_KEY=
EXPO_PUBLIC_APP_ENV=
EXPO_PUBLIC_GOOGLE_WEB_CLIENT_ID=
EXPO_PUBLIC_GOOGLE_IOS_CLIENT_ID=Google sign-in can remain disabled when the initializer removed the inherited client id. Do not use a fabricated value as readiness evidence. Configure a real client id when that capability is in scope.
For Wire growth and onboarding, add all three values when the Wire workspace is connected:
EXPO_PUBLIC_WIREAI_API_KEY=
EXPO_PUBLIC_WIREAI_SERVER_URL=
EXPO_PUBLIC_WIREAI_APP_ID=The API key authenticates the Wire tenant, SERVER_URL selects the Wire transport, and APP_ID namespaces the app, defaulting to default when omitted. See Wire onboarding and growth.
2. Validate the accepted plan
From the project root, run:
node init.js --validate-initThis checks the acceptance digest for the six canonical documents and task briefs. If it reports that the digest is invalid, review the changed artifact and obtain acceptance again before assigning feature work.
3. Prebuild the native projects
When .env, Firebase files, and app assets are ready:
npx expo prebuild --clean
yarn verify:identityThe identity verifier must pass after prebuild. It checks the generated native trees as well as the source configuration.
4. Launch iOS or Android
Use a development build. The Standard app is not an Expo Go path because its native modules require the generated native projects.
yarn ios # macOS with Xcode
yarn android # Android SDK and emulator or deviceyarn start only starts the Expo development server. It does not prove that the native app builds or that a service is connected.
There is no Standard buyer yarn web path in this workflow. Keep verification and launch on iOS or Android.
5. Run the source checks
yarn type:check
yarn lint:check
yarn i18n:validate
yarn verify:identity
yarn test:ci
yarn validateReview warnings separately from failures. Release readiness is granted only by the release preflight and a real native build with the buyer's credentials and assets.
If Wire is still pending
The app remains safe to develop. Without a complete Wire transport, the onboarding entry point renders the built-in static questionnaire. If a configured Wire request fails at runtime, the screen uses the static fallback and logs the failure. This preserves the core onboarding path, but it is not proof that Wire analytics or experiments are connected.
Record the Wire status in docs/KEYS.md as pending or manual_required, and connect and verify it before relying on the buyer's growth funnel.
Verify the default event route
After restarting Metro and launching the native development build:
- open the app and move through at least two screens
- start and complete onboarding
- confirm the feature task has instrumented the activation action named in
docs/GROWTH.md, then perform it - confirm those ordinary lifecycle, screen, onboarding, and activation events in Wire
- set one explicit Firebase user property and confirm it through the Firebase path when that capability is in scope
- remove one Wire transport value, restart Metro, and confirm the app uses static onboarding without sending ordinary events to Firebase as a fallback
Firebase remains responsible for native services such as Crashlytics, messaging, and explicit Firebase user properties. Ordinary analytics events use Wire when it is configured.