You can skip all service configuration initially. The app runs in mock mode by default with simulated auth, database, and payments. Configure real services when you’re ready for production.
Requirements
For development: Nothing extra. Mock services work out of the box. For production:- Backend (Supabase or Convex) - required
- Android release keystore - required
- Bundle identifiers in
app.json- required - RevenueCat, PostHog, Sentry - optional but recommended
Prerequisites
Install these tools before proceeding:| Tool | How to Install | Verify |
|---|---|---|
| Node.js 20 | Volta (recommended): curl https://get.volta.sh | bash && volta install node@20.19.0 yarn@4.9.1 | node -v → v20.x.x |
| Yarn | Included with Volta, or: corepack enable | yarn -v → 4.x.x |
| Git | macOS: xcode-select --install / Windows: git-scm.com | git --version |
| Xcode (iOS) | Mac App Store - open once to accept license | N/A |
| Android Studio (Android) | developer.android.com/studio - install SDK during setup | N/A |
Step 1: Clone and Install
Step 2: Run Setup Wizard
- App name and bundle identifier
- Backend provider (Supabase or Convex)
- Backend credentials
- OAuth providers (Google, Apple)
- RevenueCat API keys
- PostHog analytics
- Sentry error tracking
Backend Selection
The wizard prompts you to choose a backend:| Backend | Best For |
|---|---|
| Supabase | SQL apps, PostgreSQL experience, RLS-based security |
| Convex | TypeScript-first apps, reactive queries, function-level auth |
- Removes the unused backend’s code (folders, hooks, services)
- Updates
.env.exampleto only show your chosen backend’s variables - Removes the unused backend’s packages from
package.json - Runs
yarn installto update the lockfile
Service Configuration
Each service is optional. Skip any to use mock mode.- Supabase
- Convex
| Service | Where to Find Credentials |
|---|---|
| Supabase | Dashboard → Settings → API → Publishable key |
| Google OAuth | Google Cloud Console → APIs & Services → Credentials |
| Apple Sign In | Apple Developer Portal → Certificates, IDs & Profiles |
| RevenueCat | Dashboard → Your App → API Keys |
| PostHog | Dashboard → Project Settings → API Keys |
| Sentry | Dashboard → Settings → Client Keys (DSN) |
Security Note
EXPO_PUBLIC_* variables are bundled into your app. Only use:
- Supabase publishable key (protected by RLS)
- Convex deployment URL (protected by function-level auth)
- RevenueCat public keys
- PostHog project API key
service_role keys or secrets in your app.
Step 3: Run Your App
Manual Configuration
If you prefer manual configuration:apps/app/.env:
- Supabase
- Convex
apps/app/app.json:
Mock Mode
Without credentials, services run in mock mode:| Service | Mock Behavior |
|---|---|
| Supabase/Convex | In-memory auth/database, login always succeeds |
| RevenueCat | Purchases succeed instantly, dev menu toggle |
| PostHog | Events logged to console |
| Sentry | Errors logged to console |
Troubleshooting
Setup wizard fails?
- Ensure Node.js 20+ and Yarn are installed
- Delete partial
.env:rm apps/app/.env - Try again:
yarn setup
”Package not found in project” error?
If you see an error like:yarn.lock is out of sync after renaming your app. Fix it:
iOS build fails with Swift errors?
If you see errors likemissing argument for parameter 'logHandlers' in expo-widgets:
postinstall script applies patches automatically. If issues persist, manually verify patches exist in /patches/ directory.
App won’t start?
Builds are slow?
yarn ios / yarn android compile native code (3-5 minutes). For daily development:
API keys not working?
- Keys must be in
apps/app/.env - All keys need
EXPO_PUBLIC_prefix - Restart Metro after adding keys
Next Steps
Backend & Database
Configure your chosen backend
Authentication
Set up user auth
Payments
Set up RevenueCat
Deploy
Ship to app stores

