Running the app
A custom dev build is required (Expo Go is retired)
WeSpend uses native modules that are not in Expo Go - ML Kit OCR (receipt scan), the share-intent extension, the SMS reader, and notifications. You must run it on a custom dev build, not the Expo Go app. This is a one-time build; afterwards JS changes still hot-reload over the dev server.
1. Build and install the dev client (once)
# Build a development client APK in the cloud (~10-15 min)
eas build --platform android --profile developmentWhen it finishes, open the link on your device/emulator and install the APK. (Make sure the Supabase env vars are registered with EAS - see App builds.)
To install onto a running emulator directly:
adb install path/to/wespend-dev.apk2. Start the dev server
npm startOpen the installed WeSpend (dev) app - it connects to the dev server automatically (or scan the QR shown in the terminal). JS edits hot-reload as usual.
| Target | How |
|---|---|
| Physical phone | Open the dev build; it finds the dev server on the same Wi-Fi |
| Android emulator | npm run android (with the dev client installed) |
Emulator + Metro on a busy port
If another process holds port 8081, start on another port and tunnel it to the emulator: npm start -- --port 8083 then adb reverse tcp:8083 tcp:8083.
Platform notes
- Android is the primary target. SMS auto-detect is Android-only; iOS relies on receipt OCR, the share sheet, and manual entry. See Capturing expenses.
- The new architecture is enabled (
newArchEnabled: trueinapp.json). - Typed routes are on (
experiments.typedRoutes), so route strings are type-checked.
First run
On first launch with no saved session, the app redirects to onboarding. Create a household (or join one with an invite code). After that the session is persisted in AsyncStorage, so subsequent launches go straight to the tabs.
If you see a "Supabase not configured" notice, your .env still holds placeholders.
Verify a production bundle
To catch bundling, NativeWind, or import errors without a device, export a bundle:
npx expo export -p android --output-dir /tmp/wespend-exportA successful export prints the Hermes bundle size and exits cleanly. This is the same check CI-adjacent verification relies on.