expo-mobilelisted
Install: claude install-skill SilviaAre95/wayworks
# Stack Profile: Expo / React Native
This profile is automatically loaded when working in an Expo project.
## Architecture Conventions
- **Expo Router** for navigation (file-based, like Next.js App Router)
- **expo-secure-store** for tokens and sensitive data — never AsyncStorage for secrets
- **Strict TypeScript**; Zod validation at API boundaries (shared schemas with the web app when in a monorepo)
- Shared logic lives in a shared workspace package, not duplicated per platform
## Mobile-Specific Patterns
- Handle permissions gracefully: request in context, explain why, degrade with a user-facing message when denied (camera, notifications, location)
- Design for offline-first where data allows; show explicit loading/stale states
- Deep links: define the scheme in `app.json` and test cold-start routing
- Push: expo-notifications tokens are per-device — store server-side keyed to the user
## Testing
- **jest-expo** is the Jest preset, and its major version is locked to the Expo SDK major (SDK 57 ↔ jest-expo ~57). A mismatched jest-expo fails `npm install` with an `ERESOLVE` peer-dependency conflict on `expo`.
- Install and upgrade test dependencies with `npx expo install jest-expo jest` — never plain `npm install`/`yarn add`, which pull latest and break the SDK pairing
- After any SDK upgrade, run `npx expo install --check` (or `--fix`) to catch stale SDK-paired packages, jest-expo included
- **@testing-library/react-native** for component tests; keep `react-test-render