Monorepo npm workspaces pour l’application mobile (Expo) et les packages partagés.
- Node.js : LTS recommandé par la SDK Expo utilisée (SDK 55 — vérifier la doc Expo pour la version minimale ; ce dépôt cible Node ≥ 20.19 dans
package.json→engines). - npm (workspaces natifs ; pas de pnpm dans ce dépôt).
À la racine du dépôt :
npm installLes dépendances des workspaces apps/* et packages/* sont installées depuis la racine.
npm run mobileÉquivalent :
cd apps/mobile && npx expo startPuis choisir une plateforme (simulateur iOS, émulateur Android, appareil, web).
Ne pas exécuter npx expo … depuis la racine du monorepo : le répertoire projet serait incorrect, Metro pourrait charger l’entrée par défaut expo/AppEntry.js (fichier App.tsx à la racine) au lieu d’Expo Router (expo-router/entry dans apps/mobile), et des dossiers ios/ / android/ pourraient être créés au mauvais endroit.
À utiliser :
npm run ios
# ou
cd apps/mobile && npx expo run:iosPour Android : npm run android ou cd apps/mobile && npx expo run:android.
Les projets natifs générés par expo prebuild doivent vivre sous apps/mobile/ios et apps/mobile/android (pas à la racine du repo).
Sans Expo Go (rapide) — lancer uniquement le navigateur :
npm run mobile:webCe projet utilise Expo SDK 55. Pendant une période de transition, l’Expo Go du Play Store / App Store peut rester sur une SDK plus ancienne (souvent 54). Une appli en SDK 55 n’est alors pas compatible avec l’Expo Go « grand public » du magasin — d’où l’erreur requires a newer version of Expo Go.
Pistes de contournement :
- Web :
npm run mobile:web(ounpm run mobilepuis touchew) — pas besoin d’Expo Go. - Simulateur iOS / émulateur Android : depuis le terminal Expo,
ioua— l’outil installe ou utilise un client adapté au projet quand c’est possible. - Téléphone physique — Android : installer Expo Go pour SDK 55 comme indiqué par la changelog SDK 55 (installation possible via Expo CLI sur l’appareil ; suivre les instructions affichées par
expo startou la doc Expo du moment). - Téléphone physique — iOS : bêta TestFlight Expo Go SDK 55 — lien public indiqué dans la même changelog (section Transition period for default projects and Expo Go), ou commande
eas gosi vous avez un compte EAS. - Cible long terme : un development build (recommandé par Expo pour du sérieux hors démo).
Vérifier aussi que l’app Expo Go sur le téléphone est à jour (mise à jour du magasin) avant de tester le QR code — mais seule une version SDK 55 convient tant que les stores n’ont pas basculé.
apps/api: API Fastify + Drizzle + PostgreSQL (/healthavec test SQL,/v1/interview-sessions, création + reprise,POST /v1/interview-sessions/:id/turn(branche B),POST /v1/interview-sessions/:id/assistant-stream— SSEtext/event-streampour la réponse assistant simulée).- PostgreSQL local :
docker compose up -d(servicepostgres, basemyai, utilisateur/mot de passepostgres/postgres, port hôte 5434 — voir.env.examplesi5432est déjà utilisé). - Copier
.env.example→.envà la racine ; définirALLOWED_ORIGINS(liste d’origines CORS pour les tests navigateur / Expo Web — séparateur virgule). Les builds React Native sans en-têteOriginne sont pas bloqués par cette liste. - Pour le mobile, copier
apps/mobile/.env.example→apps/mobile/.envet définirEXPO_PUBLIC_API_URL(ex.http://127.0.0.1:3000pour simulateur iOS / web ; émulateur Android souventhttp://10.0.2.2:3000). - Migrations :
npm run db:migrate -w @my-ai-app-builder/api(nécessiteDATABASE_URLet PostgreSQL joignable). - Lancer l’API :
npm run api(équivalentnpm run dev -w @my-ai-app-builder/api).
| Emplacement | Rôle |
|---|---|
apps/mobile |
Application Expo avec Expo Router (src/app/). |
apps/api |
API REST v1, sessions interview, persistance Drizzle. |
packages/shared |
Schémas Zod, types partagés mobile/API. |
packages/ui-modules |
Composants UI modulaires — placeholder. NativeWind sera intégré dans une story ultérieure (Epic 2), pas dans ce bootstrap. |
Orchestration : Turborepo (turbo.json) pour les tâches multi-packages (build, lint, etc.).
npm testExécute une vérification structurelle du monorepo (scripts/verify-monorepo.mjs) et les tests unitaires de packages/shared (ex. schémas Zod).
Les artefacts BMad (PRD, architecture, stories) sont sous _bmad-output/.