← Plan MVP / Phase 1 — MVP Détaillé

Phase 1 : MVP NOMIIQ

Tout le détail technique de chaque module — user stories, endpoints API, schémas de données, règles métier, wireframes et critères d'acceptation — pour 18 semaines de développement.

18
Semaines / 9 sprints
8
Modules livrés
7-8
Personnes équipe
~650k
€ budget estimé

8 Modules MVP — Cliquez pour le détail complet

📅 Timeline Sprint par Sprint (18 semaines)

S0
Setup & Architecture Sem 1-2
Repo Git monorepo (apps/mobile, apps/api, packages/ui)
CI/CD GitHub Actions → AWS ECS
Schéma DB PostgreSQL v1 (migrations Prisma)
Auth backend (JWT + refresh tokens)
Design System Figma livré + NativeWind tokens
Env staging + prod (ECS Fargate + RDS + Redis)
S1
Auth & Profils Sem 3-4
Écran onboarding 3 slides
Inscription email + validation
Login Google (OAuth2) + Apple Sign-In
Écran profil (photo, bio, pays, type voyageur)
Paramètres confidentialité (public/privé)
Endpoint /auth/* sécurisés + tests Postman
S2
Feed & Posts Sem 5-6
Création post (photo/vidéo/texte + lieu + coût)
Upload médias vers S3 via Presigned URL
Feed chronologique des abonnements
Likes (optimistic UI), commentaires, sauvegardes
Partage (deep link + share sheet iOS/Android)
Service de notification en-app (badge)
S3
Carte & Lieux Sem 7-8
Intégration Mapbox SDK React Native
Affichage pins par type + couleur sécurité
Fiche lieu : photos, score sécu, prix, posts liés
Recherche géographique (Typesense)
Clustering de pins (performance)
PostGIS : requêtes géospatiales places_nearby()
S4
Copilote IA v1 Sem 9-10
Chat IA global (bouton flottant partout)
Prompt system NOMIIQ + jumeau digital v1
Génération itinéraires 3-14j (GPT-4o)
Affichage itinéraire : timeline + carte tracée
Questions sécurité / food en langage naturel
BullMQ worker pour jobs IA asynchrones
S5
Radar Sécurité Sem 11-12
Agrégation alertes (gov.uk, state.gov, GDELT, OWM)
Cron job toutes les 30min de mise à jour
Carte mondiale niveaux risque (5 couleurs)
Feed Sécurité dédié + résumés IA par pays
Notifications push critiques (FCM)
Historique alertes + archivage 90j
S6
Transport & Food Sem 13-14
Recherche vols Amadeus/Skyscanner (form + résultats)
Hébergements Booking.com (liste + redirection)
Taux de change Open Exchange Rates
Module Food : ajout plat, photo, prix, note
Classement "Top plats" par lieu
Alerte sécurité alimentaire par pays (règles statiques)
S7
Messagerie + Admin Sem 15-16
Chat 1:1 (WebSocket via NestJS Gateway)
Historique messages (pagination cursor)
Back-office admin : liste users + actions (ban/warn)
File de modération : contenus signalés + actions
Dashboard : métriques (users, posts, sessions)
Détection IA image (Hive API) → label sur post
S8
QA, Beta & Launch Sem 17-18
Tests E2E Detox (iOS + Android)
Tests intégration API (Jest + Supertest)
Bug bash interne + corrections critiques
Beta fermée 200 utilisateurs (TestFlight + Google Play Internal)
Monitoring (Sentry + Datadog)
Soumission App Store + Google Play

🛠️ Stack Phase 1 — Choix définitifs

📱 Mobile (iOS + Android)

React Native 0.74 + Expo 51
Framework principal, code partagé 90%
TypeScript 5.x
Typage complet front + back
NativeWind v4
Tailwind CSS pour React Native
Expo Router v3
Navigation file-based (tabs + stack)
Zustand
State global léger (auth, feed, chat)
React Query (TanStack)
Cache, pagination, mutations
React Native Maps (Mapbox)
Carte native custom
Expo Notifications
Push cross-platform
Expo Camera / ImagePicker
Upload photos/vidéos

⚙️ Backend API

NestJS 10 + TypeScript
Framework modulaire, DI, guards
Prisma ORM
Migrations DB, type safety, relations
PostgreSQL 16 + PostGIS
DB principale + géospatial
Redis 7 (Upstash)
Cache, sessions, pub/sub chat
Typesense
Recherche full-text rapide
BullMQ
Jobs IA asynchrones, emails, notifs
Socket.io
WebSocket pour messagerie temps réel
AWS S3 (Presigned URLs)
Upload médias sécurisé direct
Passport.js
Stratégies auth (Local, Google, Apple)

☁️ Infra & Services

AWS ECS Fargate
Containers serverless auto-scalés
AWS RDS (PostgreSQL)
DB managée, backups auto, Multi-AZ
Cloudflare CDN + WAF
Edge, DDoS, images resizing
GitHub Actions
CI/CD : tests + build + deploy
Sentry
Error tracking mobile + API
Datadog
Monitoring APM + logs + alertes
OpenAI GPT-4o API
Copilote IA + embeddings
Firebase Cloud Messaging
Push notifications iOS + Android
Resend
Emails transactionnels

🎨 Principes Design & Écrans Clés

Navigation principale (Bottom Tabs)

🏠
Feed
Fil d'actualité + stories horizontales en haut
🗺️
Explore
Carte plein écran + recherche lieux
Créer
Bouton central corail — publier post/itinéraire
🛡️
Radar
Sécurité mondiale + alertes actives
👤
Profil
Profil perso + paramètres + itinéraires sauvegardés
🤖 Bouton IA flottant
Présent sur tous les écrans (sauf création). Teal, en bas à droite. Ouvre le copilote en modal bottom sheet.

Règles visuelles strictes

Couleurs sécurité
Vert #22C55E / Jaune #EAB308 / Orange #F97316 / Rouge #EF4444 — JAMAIS modifiées
CTA principal
Corail #FF7A5C — boutons Publier, Réserver, S'inscrire
Éléments IA
Teal #11C5B3 — badges IA, boutons copilote, highlights itinéraires générés
Fond app
#F5F7FA — jamais blanc pur, jamais noir
Cards
Blanc #FFFFFF, radius 16px, shadow légère (0 2px 12px rgba)
Police
Inter (weights 400/600/700/800/900) — jamais de serif
Icônes
Phosphor Icons (filled pour actif, regular pour inactif)
Animations
spring physics (react-native-reanimated) — jamais de linear tween
Photos
Toujours en 4:3 ou carré — jamais étirées, cover crop

🔌 Structure API REST Phase 1

Convention générale

Base URL : https://api.nomiiq.com/v1
Auth : Bearer JWT dans header
Format : JSON, UTF-8
Pagination : cursor-based (after=<id>&limit=20)
Erreurs : RFC 7807 (type + title + detail)
Rate limit : 100 req/min (free), 500 (premium)
Versioning : /v1 dans l'URL (pas de header)

Endpoints principaux

POST /auth/register Création compte
POST /auth/login Login email/mdp
GET /users/:id Profil utilisateur
GET /feed Feed paginé ?cursor=&type=
POST /posts Créer un post
GET /places/nearby ?lat=&lng=&radius=km
POST /ai/chat Message au copilote
POST /ai/itinerary Génération itinéraire
GET /safety/alerts ?country=&level=
GET /transport/flights ?from=&to=&date=
GET /conversations Liste chats user
POST /conversations/:id/messages Envoyer message

🔍 Détail complet par module