
# [App Name]

A cross-platform mobile app. iOS, Android, and a passable web fallback all from one codebase.

## Source of truth
The git main branch is the source for the JS bundle. App Store and Play Store builds are versioned releases off main, built via EAS. OTA updates ship via `eas update --branch production`.

## Tech stack
Expo SDK 53 + React Native 0.78 + TypeScript. Expo Router (file-based, like Next App Router). Tamagui for theme + components (works on web too). React Query for server state. Zustand for local. EAS Build for app store binaries. EAS Update for OTA. Sentry for crashes.

## Deploy
- Web: `eas deploy` -> Vercel-style hosting on EAS Hosting
- iOS / Android: `eas build --profile production` then `eas submit`
- OTA: `eas update --branch production` (JS-only changes ship in under a minute)

## File map
- `app/` Expo Router routes (mirrors Next.js App Router)
- `app/(tabs)/` tab navigator group
- `app/_layout.tsx` root layout
- `components/` Tamagui-themed components
- `lib/api.ts` API client
- `lib/auth.ts` Expo SecureStore + refresh
- `stores/` Zustand
- `tamagui.config.ts` theme tokens
- `eas.json` build profiles (dev / preview / production)
- `app.config.ts` Expo config (versionCode, name, icon)

## .env keys
- `EXPO_PUBLIC_API_BASE_URL`
- `SENTRY_AUTH_TOKEN` (set in EAS secrets, not committed)
- `EAS_PROJECT_ID`

## Hard rules
- Secrets via Expo SecureStore, never AsyncStorage.
- Every screen uses `<SafeAreaView>` or `useSafeAreaInsets`. iOS notch + Android display cutouts.
- Tamagui tokens for every color, space, font size. No magic numbers in StyleSheet.
- `eas update` is for JS-only. Native changes need a new build.
- Test on a real iPhone and a real Android device before every release. Simulators lie about gestures.
- Sentry source maps uploaded automatically via `expo-cli sentry:upload`.

## Recent significant changes
- 2026-05-10: Scaffolded. Locked: Expo Router over React Navigation alone, Tamagui over NativeBase (web parity matters), EAS over bare Xcode.

## Next session: start here
1. Create EAS project. Save `EAS_PROJECT_ID`.
2. Set bundle identifiers (iOS) + applicationId (Android) in `app.config.ts`.
3. Set up App Store Connect + Google Play Console for `eas submit`.
4. Install on a real device with `eas build --profile development` -> sideload.
5. Configure OTA channels: `dev`, `preview`, `production`.
