diff --git a/docs/technical.md b/docs/technical.md
index 93635d5..45b6fed 100644
--- a/docs/technical.md
+++ b/docs/technical.md
@@ -113,72 +113,77 @@ TTL cache : 5 minutes (le contenu ne bouge pas).
## Architecture Services
```mermaid
-flowchart TB
- subgraph clients["Clients"]
+flowchart LR
+ subgraph clients["📱 Clients"]
+ direction TB
mobile["Mobile Apps
iOS/Android
Flutter"]
carplay["CarPlay /
Android Auto"]
end
- subgraph ovh["OVH VPS Essential (Gravelines, France)"]
- nginx["NGINX Cache
+ Let's Encrypt
TLS 1.3, Rate Limiting"]
- api["API Gateway
Go + Fiber :8080"]
+ subgraph ovh["🇫🇷 OVH VPS Essential (Gravelines, France)"]
+ direction TB
- subgraph services["Backend Services (Monolithe Modulaire)"]
- auth["Auth Service
JWT validation"]
- user["User Service
Profils, Jauges"]
- content["Content/Geo Service
Recommandations
PostGIS queries"]
- streaming["Streaming Service
HLS generation"]
- payment["Payment Service
Mangopay integration"]
- notif["Notification Service
FCM/APNS"]
+ nginx["🌐 NGINX
Cache + TLS 1.3
Rate Limiting"]
+ api["🚪 API Gateway
Go + Fiber
:8080"]
+
+ subgraph services["Backend (Monolithe Modulaire)"]
+ direction LR
+ auth["🔐 Auth"]
+ user["👤 User"]
+ content["🎙️ Content/Geo"]
+ streaming["📡 Streaming"]
+ payment["💳 Payment"]
+ notif["🔔 Notif"]
end
- zitadel["Zitadel IdP
OAuth2 PKCE
:8081"]
- ip2loc["IP2Location DB
SQLite ~50MB
Mode dégradé"]
+ zitadel["🔑 Zitadel
OAuth2 PKCE
:8081"]
+ ip2loc["🌍 IP2Location
SQLite 50MB"]
- subgraph data["Données"]
- pgbouncer["PgBouncer
Connection pooling
:6432"]
- postgres["PostgreSQL 16
+ PostGIS 3.4
Schémas:
- roadwave
- zitadel"]
- redis["Redis 7 Cluster
Cache + Geospatial
GEORADIUS"]
+ subgraph data["💾 Données"]
+ direction TB
+ pgbouncer["PgBouncer
:6432"]
+ postgres["PostgreSQL 16
+ PostGIS 3.4"]
+ redis["Redis 7
Cache + Geo"]
end
end
- subgraph external["Services Externes"]
- storage["OVH Object Storage
Fichiers audio HLS"]
- mangopay["Mangopay
Paiements, KYC"]
- brevo["Brevo
Emails transactionnels"]
- fcm["FCM / APNS
Push notifications"]
+ subgraph external["☁️ Services Externes"]
+ direction TB
+ storage["OVH Object Storage
(Fichiers HLS)"]
+ mangopay["Mangopay
(Paiements/KYC)"]
+ brevo["Brevo
(Emails)"]
+ fcm["FCM/APNS
(Push)"]
end
- mobile --> nginx
- carplay --> nginx
+ %% Flux clients
+ clients --> nginx
nginx --> api
- api --> auth
- api --> user
- api --> content
- api --> streaming
- api --> payment
- api --> notif
+
+ %% API vers services
+ api --> services
api --> ip2loc
+ %% Services vers infra
auth --> zitadel
- user --> pgbouncer
- user --> redis
- content --> pgbouncer
- content --> redis
+ user --> data
+ content --> data
streaming --> storage
payment --> mangopay
notif --> fcm
+ %% Infra interne
zitadel --> pgbouncer
pgbouncer --> postgres
- brevo -.email.-> mobile
- fcm -.push.-> mobile
+ %% Retours vers clients
+ brevo -.email.-> clients
+ fcm -.push.-> clients
- style ovh fill:#e3f2fd
- style external fill:#fff3e0
- style clients fill:#f3e5f5
- style data fill:#e8f5e9
+ style ovh fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
+ style external fill:#fff3e0,stroke:#f57c00,stroke-width:2px
+ style clients fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
+ style data fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
+ style services fill:#fff,stroke:#666,stroke-width:1px
```
**Souveraineté** : 100% données en France (RGPD compliant)