React Native mobile application for the Extra Chill music community platform with Expo Router navigation and token-based authentication.
- Dev server:
npm start - Run:
npm run ios/npm run android/npm run web - Type check:
npx tsc -p tsconfig.json --noEmit
extrachill-app/
├── app/ # Expo Router routes
│ ├── _layout.tsx
│ ├── index.tsx
│ ├── login.tsx
│ ├── onboarding.tsx
│ └── (drawer)/
│ ├── _layout.tsx
│ └── feed.tsx
├── src/
│ ├── api/client.ts # API client + token refresh
│ ├── auth/ # Auth context + SecureStore
│ ├── components/ # UI components (DrawerContent, Avatar, etc.)
│ ├── theme/ # Theme tokens + context
│ ├── utils/
│ └── types/api.ts # API response types
├── assets/
└── docs/CHANGELOG.md
The app calls the Extra Chill REST API at https://extrachill.com/wp-json/extrachill/v1 (see src/api/client.ts).
POST /auth/login(requiresdevice_id)POST /auth/register(requiresdevice_id; includesregistration_source/registration_method)POST /auth/refresh(requiresdevice_id)POST /auth/logout(requiresdevice_id)GET /auth/mePOST /auth/google(requiresdevice_id)GET /config/oauthGET/POST /users/onboardingPOST /auth/browser-handoff(creates one-time web session handoff URLs)
device_id is a UUID v4 persisted client-side and sent on auth/session endpoints.
- CLAUDE.md - Development guidelines and API usage details
- extrachill-api - REST API implementation (server-side)
Private - Extra Chill