# @siop/mobile — l'app du technicien (R4) Expo (SDK 57), offline-first, périmètre fermé : **Ma journée, scan, préventif, synchro** — la gestion reste web, le demandeur reste sur le portail QR public. Maquettes validées : `docs/02-design/maquettes/maquette-r4.html` (+ décisions D1-D5 au journal du 17/07/2026). ## Lancer ```bash # API locale d'abord (apps/api : pnpm dev), puis : pnpm --filter @siop/mobile start # QR Expo Go (téléphone sur le MÊME réseau) EXPO_PUBLIC_API_URL=http://192.168.x.y:3000 pnpm --filter @siop/mobile start ``` - `EXPO_PUBLIC_API_URL` : URL de l'API vue **depuis le téléphone** (IP LAN, pas localhost). Défaut : `http://localhost:3000` (suffisant pour `expo start --web`). - Vérification navigateur : `expo start --web` + `CORS_ORIGINS=http://localhost:8081` côté API (les apps natives n'envoient pas d'Origin — CORS ne concerne que le web). ## Ce que porte R4.1 (socle) - Connexion e-mail/mot de passe + **sélecteur démo** (ADR-002 : n'existe que si l'API l'expose). - Coquille tabbar (onglets à venir marqués R4.2/R4.3) + **Ma journée** : OT triés priorité puis échéance (`src/lib/journee.ts`, testé), urgence en tête, pastille de synchro. - **Lecture hors-ligne (D1)** : cache TanStack persisté dans AsyncStorage (7 jours), NetInfo pilote `onlineManager` + bandeau. L'écriture en file arrive en R4.3. - Client typé généré depuis `docs/openapi.json` (`pnpm generate:client`) — règle d'or ADR-001. - Jeton dans SecureStore (trousseau) ; AsyncStorage en repli web de dev. ## Tests `pnpm --filter @siop/mobile test` (jest-expo — logique pure : tri, tokens) ; `typecheck` et le lint racine s'appliquent (job CI `mobile`).