A React Native app built with Expo.
-
Install dependencies:
npm install
-
Start the development server:
npm run start:dev
-
Open the app:
- Press
ifor iOS simulator - Press
afor Android emulator - Scan QR code with Expo Go app on your device
- Press
- React Native 0.81
- Expo SDK 54
- TypeScript
- TanStack Query + Zustand
- Expo Router v6.0
See CLAUDE.md for architecture and development guidelines.
The app uses environment variables with Expo's EXPO_PUBLIC_ prefix. Different environments are managed through .env files.
- Development (
.env.development) - Default environment - Staging (
.env.staging) - Staging servers - Production (
.env.production) - Production servers - Debug (
.env.debug) - Debug/test servers
# Development
npm run start:dev
npm run ios:dev
npm run android:dev
# Staging
npm run start:staging
npm run ios:staging
npm run android:staging
# Production
npm run start:prod
npm run ios:prod
npm run android:prod
# Debug
npm run start:debug
npm run ios:debug
npm run android:debugAlways import from the centralized config:
import { env } from '@/config/env';
const apiUrl = env.API_URL;
const cloudCode = env.CLOUD_CODE;Never use process.env directly - use the env object from @/config/env for type safety and consistency.
-
Add to all
.envfiles withEXPO_PUBLIC_prefix:EXPO_PUBLIC_NEW_VAR=value -
Add to
config/env.ts:export const env = { // ... existing NEW_VAR: process.env.EXPO_PUBLIC_NEW_VAR || 'default', } as const;
-
Use in code:
import { env } from '@/config/env'; const value = env.NEW_VAR;
⚠️ AllEXPO_PUBLIC_variables are bundled into your app - never store secrets- 🔄 Restart Metro bundler after changing
.envfiles - 📱 Each environment uses a unique bundle identifier for side-by-side installation