Architecture Technique NOMIIQ

Stack complet, choix technologiques, schémas de données et intégrations tierces pour une plateforme voyage IA mobile-first.

4
Couches d'architecture
15
Modules fonctionnels
30+
APIs tierces
7
Rôles système

1. Stack Technologique

📱 Frontend Mobile

⚛️
React Native + Expo
iOS & Android — code partagé 90%
🔷
TypeScript
Typage fort, maintenabilité
🎨
NativeWind + Tamagui
Design system NOMIIQ
🗺️
react-native-maps
MapBox SDK (carte custom)
📦
Zustand + React Query
State management + cache
🔔
Expo Notifications
Push notifications multiplateforme

⚙️ Backend & API

🟢
Node.js + NestJS
API REST + WebSockets
🔷
TypeScript
Cohérence front/back
🐘
PostgreSQL (Supabase)
DB principale + auth + storage
Redis (Upstash)
Cache, sessions, rate-limiting
🔍
Elasticsearch / Typesense
Recherche lieux, posts, users
📨
BullMQ + Redis
Jobs asynchrones (IA, notifs)

☁️ Infra & IA

☁️
AWS (ECS Fargate)
Containers + auto-scaling
🚀
Cloudflare (CDN + Workers)
Edge, sécurité, images
🤖
OpenAI GPT-4o
Copilote IA principal
🔮
LangChain / LangGraph
Orchestration agents IA
📸
Supabase Storage + S3
Médias, vidéos, assets
🔒
Vault + AWS Secrets
Gestion sécurisée des secrets

2. Architecture en Couches

📱
App iOS
React Native + Expo
🤖
App Android
React Native + Expo
🌐
Web App
Next.js (Phase 2)
⬇️ HTTPS / WSS via Cloudflare CDN
🔀
API Gateway (Kong / AWS API GW)
Auth JWT • Rate Limiting • Routing • WebSocket Upgrade
⬇️
Microservices NestJS
👤
Auth Service
JWT, OAuth, Sessions
📰
Content Service
Posts, Stories, Reels
🗺️
Places Service
Lieux, Cartes, Geo
🤖
AI Service
Copilote, Agents
🛡️
Safety Service
Radar, Alertes
✈️
Transport Service
Vols, Trains, Bus
💬
Messaging Service
Chat, WS
🔔
Notification Svc
Push, Email, SMS
⬇️
🐘
PostgreSQL
Données principales
Redis
Cache & Sessions
🔍
Typesense
Recherche full-text
📦
S3 / Supabase
Médias & Fichiers

3. Schémas de Données Clés

👤 Table users

id UUID PRIMARY KEY
email TEXT UNIQUE NOT NULL
username TEXT UNIQUE
display_name TEXT
avatar_url TEXT
bio TEXT
role ENUM(user,creator,mod,admin,super_admin)
trust_score INT DEFAULT 0
is_verified BOOLEAN DEFAULT false
country_code CHAR(2)
languages TEXT[]
traveler_type TEXT
ai_profile JSONB -- jumeau digital
privacy_settings JSONB
created_at TIMESTAMPTZ

📰 Table posts

id UUID PRIMARY KEY
author_id UUID → users
type ENUM(post,story,reel,itinerary)
content TEXT
media_urls TEXT[]
location_id UUID → places
cost DECIMAL
currency CHAR(3)
ai_generated BOOLEAN DEFAULT false
ai_confidence FLOAT -- détection IA
exif_verified BOOLEAN
remix_of UUID → posts
tags TEXT[]
visibility ENUM(public,followers,private)
likes_count INT DEFAULT 0
status ENUM(active,hidden,deleted)
published_at TIMESTAMPTZ

🗺️ Table places

id UUID PRIMARY KEY
name TEXT NOT NULL
type ENUM(city,country,neighborhood,venue,food)
lat DECIMAL
lng DECIMAL
country_code CHAR(2)
safety_score FLOAT -- 0-100
safety_updated_at TIMESTAMPTZ
avg_cost_usd DECIMAL
cover_photo TEXT
description TEXT
tags TEXT[]
geometry GEOMETRY(Point, 4326)

🛤️ Table itineraries

id UUID PRIMARY KEY
author_id UUID → users
title TEXT
description TEXT
duration_days INT
budget_usd DECIMAL
traveler_type TEXT
days JSONB[] -- [{day, activities[]}]
ai_generated BOOLEAN
avg_safety_score FLOAT
remixed_from UUID → itineraries
is_public BOOLEAN
saves_count INT DEFAULT 0
created_at TIMESTAMPTZ

🛡️ Table safety_alerts

id, place_id, level (1-5),
category (crime/weather/political/health),
title, description,
source_url, is_active,
ai_summary, starts_at, ends_at

💬 Table conversations

id, participants UUID[],
last_message_at,
ai_agent_active BOOLEAN,
ai_responses_count
→ messages(id, conversation_id,
sender_id, content,
is_ai_generated, read_at)

✈️ Table transport_alerts

id, user_id,
origin, destination,
type (flight/train/bus),
price_threshold_usd,
current_price,
is_active, last_checked,
notified_at

4. APIs Tierces & Intégrations Externes

✈️ Transport

APIUsagePhase
AmadeusVols, hôtels, activitésMVP
Skyscanner APIComparateur volsMVP
Rome2RioMulti-modal (train/bus)P2
Booking.com APIHébergementsMVP
HostelworldHostels & aubergesP2
Viator / GetYourGuideActivités & expériencesP2

🤖 IA & Intelligence

APIUsagePhase
OpenAI GPT-4oCopilote, génération itinérairesMVP
OpenAI EmbeddingsRecherche sémantiqueMVP
Anthropic ClaudeFallback / multi-LLMP2
Hive ModerationDétection contenu IA/NSFWMVP
Azure VisionAnalyse images, EXIFP2
DeepL APITraduction automatiqueP2

🛡️ Sécurité & Données

APIUsagePhase
Travel Advisories (gov.uk/state.gov)Alertes officielles paysMVP
OpenWeatherMapMétéo temps réelMVP
GDELT ProjectÉvénements mondiaux (conflits)MVP
WHO / CDC APIsAlertes santé & vaccinsP2
Criminalité (SpotCrime)Données sécurité quartierP2
MapboxCartes custom + routingMVP

💳 Monetisation & Services

APIUsagePhase
StripeAbonnements Premium, paiementsP2
Airalo APIeSIM locales & régionalesP2
World NomadsAssurance voyageP2
Open Exchange RatesDevises temps réelMVP
Resend / SendGridEmails transactionnelsMVP
Firebase Cloud MessagingPush notificationsMVP

5. Sécurité, RGPD & Transparence IA

🔒 Sécurité technique

JWT + Refresh Tokens — rotation automatique, expiration courte
HTTPS everywhere — TLS 1.3, HSTS enforced
Rate Limiting — par IP et par user (Redis)
WAF Cloudflare — DDoS, injection, XSS
Secrets Manager — AWS Secrets Manager + rotation
Audit logs — toutes actions admin tracées

🇪🇺 RGPD & Confidentialité

Consentement explicite — tracké en DB avec timestamp
Droit à l'effacement — soft delete + purge planifiée
Portabilité — export JSON de toutes les données
Minimisation données — champs optionnels, jamais forcés
Support sans accès MP — logs techniques uniquement
DPO désigné — contact privacy@nomiiq.com

🤖 Transparence IA

Badge "IA Active" — visible dans les chats si agent IA répond
Label sur contenus — "Généré avec IA" si détection positive
Score de confiance — bronze/argent/or visible sur les profils
Reprise main humain — toujours possible en 1 tap
Résumés IA — l'user peut lire ce que l'IA a dit en son nom
Opt-out profil IA — désactiver le jumeau digital