veza/docs/archive/root-md/AUDIT_2.md
senke 43af35fd93 chore(audit 2.2, 2.3): nettoyer .md et .json à la racine
- Archiver 131 .md dans docs/archive/root-md/
- Archiver 22 .json dans docs/archive/root-json/
- Conserver 7 .md utiles (README, CONTRIBUTING, CHANGELOG, etc.)
- Conserver package.json, package-lock.json, turbo.json
- Ajouter README d'index dans chaque archive
2026-02-15 14:35:08 +01:00

27 KiB

Now I have a comprehensive picture. Let me compile the full audit report.


RAPPORT D'AUDIT TECHNIQUE INTÉGRAL — MONOREPO VEZA

Date : 14 Février 2026 Auditeur : Analyse technique indépendante Objet : Évaluation complète du monorepo Veza pour viabilité technique et investissement Classification : Confidentiel


EXECUTIVE SUMMARY

Veza est une plateforme audio collaborative de type SaaS (streaming, marketplace, social, chat temps réel) construite sur un monorepo polyglotte : React/TypeScript (frontend), Go/Gin (API backend), Rust/Axum (chat WebSocket + stream audio).

Taille du codebase : ~442 000 lignes de code

  • Frontend : ~206 000 LoC (TypeScript/React)
  • Backend Go : ~169 000 LoC
  • Chat Server Rust : ~28 000 LoC
  • Stream Server Rust : ~39 000 LoC

Verdict global : Le projet démontre une ambition architecturale significative et des pratiques de sécurité au-dessus de la moyenne. Cependant, il souffre de scope creep sévère, de features fantômes, d'une duplication architecturale sur le frontend, et d'un stream server qui ne compile pas. En l'état, il n'est pas prêt pour la production sans un travail de stabilisation de 6-8 semaines.


ÉTAT D'AVANCEMENT (mis à jour le 14/02/2026)

# Action Statut Commit
1.1 SQL message_store.rs Fait -
1.2 Compilation stream server Fait -
1.3 Features fantômes Fait fix(web): disable ghost...
1.4 Rate limit logs/frontend Fait fix(api): add rate limiting...
1.5 Tests Go sans -short Fait ci(backend): run Go tests...
1.6 Gitleaks CI Fait ci: add gitleaks secret scanning
1.7 Rapports couverture Fait ci(backend): add coverage...

Phase 2 — Stabilisation

# Action Statut Commit
2.1 Migration views → features Fait refactor(web): migrate views...
2.2 Auth consolidation Fait refactor(auth): consolidate...
2.3 i18n Fait feat(i18n): migrate hardcoded...
2.4 Tests Dashboard, Library, Analytics, Admin Fait test(web): add tests for...
2.5 Découper handlers.ts MSW Fait refactor(msw): split handlers...
2.6 Payment provider Fait Hyperswitch
2.7 Network Policies K8s Fait ci(k8s): add Network Policies
2.8 Resource limits HAProxy Fait fix(infra): add resource limits...
2.9 Nettoyage audit/remediation Fait chore(backend): archive audit...

1. CARTOGRAPHIE GLOBALE

Stack technique

Couche Technologie Version Statut
Frontend React + Vite + TypeScript 18.2 / 7.1 / 5.3 Opérationnel
CSS Tailwind v4 4.0 Opérationnel
State Zustand + TanStack Query 4.5 / 5.17 Opérationnel
Backend API Go + Gin + GORM 1.23 / 1.11 / 1.30 Opérationnel
Chat Server Rust + Axum + SQLx 2021 ed. / 0.8 Compile
Stream Server Rust + Axum + Symphonia 2021 ed. / 0.8 Compile
Base de données PostgreSQL 16 16-alpine Opérationnel
Cache/Queues Redis 7 + RabbitMQ 3 7-alpine / 3 Opérationnel
Reverse Proxy HAProxy 2.8 2.8-alpine Configuré
CI/CD GitHub Actions N/A Partiel
Container Docker multi-stage N/A Configuré
K8s Kubernetes + External Secrets N/A Scaffoldé
Docs Docusaurus 3.8 3.8.1 Scaffoldé
Tests Vitest + Playwright + Storybook 3.2 / 1.58 / 8.6 Partiel

Organisation du repo

veza/
├── apps/web/                  # Frontend React (206K LoC)
├── veza-backend-api/          # Backend Go (169K LoC)
├── veza-chat-server/          # Chat WebSocket Rust (28K LoC)
├── veza-stream-server/        # Audio Streaming Rust (39K LoC)
├── veza-common/               # Shared Rust library
├── veza-docs/                 # Docusaurus (scaffoldé)
├── fixtures/                  # Test fixtures
├── config/                    # HAProxy, etc.
├── infra/                     # IaC configs
├── k8s/                       # Kubernetes manifests
├── scripts/                   # Build/deploy scripts
├── .github/workflows/         # 8 CI/CD workflows
└── make/                      # Modular Makefile system

Orchestration monorepo : npm workspaces uniquement. Pas de Turborepo, Nx, ou Lerna. C'est insuffisant pour un monorepo de cette taille avec 3 langages. Il n'y a aucune gestion de graphe de dépendances, aucun cache de build inter-services, aucune détection de changements ciblée.

Dépendances critiques

  • Aucune dépendance obsolète majeure identifiée (React 18.2 est mineur, TypeScript 5.3 acceptable)
  • Tokio version mismatch dans les crates Rust : veza-common utilise tokio = "1.0" tandis que les serveurs utilisent 1.35
  • Aucune dépendance abandonnée détectée

Flux de données

Browser → HAProxy → Backend Go API → PostgreSQL
                  → Chat Server Rust (WebSocket) → PostgreSQL / Redis
                  → Stream Server Rust (Audio) → PostgreSQL / Redis
                  
Backend Go → Redis (sessions, cache, rate limiting, CSRF)
           → RabbitMQ (événements async)
           → ClamAV (antivirus upload, optionnel)

2. CE QUE LE PRODUIT PERMET RÉELLEMENT

Features VALIDÉES (backend + frontend connectés)

Feature Backend Frontend Tests Verdict
Auth (register, login, logout) Go React Oui Fonctionnel
JWT + httpOnly cookies Go React Oui Fonctionnel
2FA (TOTP) Go React Oui Fonctionnel
Password reset Go React Oui Fonctionnel
Email verification Go React Oui Fonctionnel
OAuth (Google, GitHub, Discord) Go React Partiel Fonctionnel
Session management Go React Oui Fonctionnel
RBAC (roles & permissions) Go React Oui Fonctionnel
User profiles Go React Oui Fonctionnel
Track CRUD Go React Oui Fonctionnel
Track upload (chunked) Go React Oui Fonctionnel
Playlist CRUD Go React Oui Fonctionnel
Search (tracks, playlists, users) Go React Oui Fonctionnel
Chat WebSocket temps réel Rust React Partiel Fonctionnel
Marketplace products Go React Partiel Fonctionnel
Cart & Checkout Go React Partiel Fonctionnel
Notifications Go React Partiel Fonctionnel
Admin dashboard Go React Non Partiel
Analytics Go React Non Partiel
Social feed/posts Go React Non Partiel

Features PARTIELLEMENT implémentées

Feature Ce qui manque
HLS Audio Streaming Stream server ne compile pas. Frontend prêt, backend Rust non validé
Webhooks API CRUD existe, delivery system incomplet
Dashboard Frontend avec données mockées uniquement (MSW)
Library Frontend scaffoldé, logique métier partielle
File Manager UI existe, pas de backend dédié
Discover Données mockées, pas d'algorithme de recommandation

Features FANTÔMES (UI existe, aucun backend)

Feature Fichiers Verdict
Education components/views/education-view/, MSW handlers lignes 600-630 Ghost feature — Cours, tutoriels, rien côté backend
Gamification handlers-ghost.ts importé dans MSW Ghost feature — Badges, achievements, 100% mock
Studio components/views/studio-view/ Ghost feature — DAW-like, aucun backend
Live Streaming components/views/live-view/ Partiellement ghost — UI complète, backend minimal

Features MORTES / Code non utilisé

  • pages/auth/Login.tsx duplique features/auth/pages/LoginPage.tsx
  • context/AuthContext.tsx coexiste avec features/auth/store/authStore.ts (deux sources de vérité)
  • components/views/settings-view/ duplique features/settings/pages/
  • components/views/upload-view/ duplique features/upload/
  • dist_verification/ supprimé (git status montre 80+ fichiers deleted)

Incohérences produit/code

  1. Deux patterns architecturaux coexistent : components/views/ (legacy) vs features/*/pages/ (nouveau) sans plan de migration clair
  2. Education, Gamification, Studio sont routés et accessibles comme si fonctionnels, mais retournent des données fictives
  3. Le stream server Rust ne build pas mais le frontend intègre un player HLS complet avec dashboard de monitoring
  4. 303 stories Storybook pour la validation visuelle, mais le git status montre des modifications non commitées dans de nombreux fichiers critiques

3. VALIDATION FONCTIONNELLE

Flows critiques analysés

Auth flow : Validé

  • Registration avec validation email, password strength check, username uniqueness
  • Login avec rate limiting (5 tentatives / 15 min), account lockout (30 min)
  • JWT access token (5 min TTL) + refresh token (30 jours) en httpOnly cookies
  • CSRF protection avec timing-safe comparison
  • Token versioning pour invalidation immédiate
  • Tests : Oui (unitaires + intégration)

Upload flow : Validé

  • Upload chunked avec validation multi-couche (magic bytes, MIME, extension, taille)
  • Scan antivirus ClamAV (optionnel mais intégré)
  • Rate limiting : 10 uploads/heure par utilisateur
  • Tests : Oui

Chat flow : Partiellement validé

  • WebSocket avec auth JWT avant upgrade
  • Rate limiting par action (message, réaction, etc.)
  • Permission checks (membership, read/write)
  • Risque : SQL injection dans message_store.rs:179 (voir section sécurité)

Payment/Checkout : Non validé

  • Cart + checkout UI existent
  • Aucune intégration Stripe/payment provider trouvée dans le backend
  • Flow critique non fonctionnel en production

Points de rupture identifiés

  1. Stream server inopérant : cargo check en CI, pas de cargo build. Le TODO dans le CI confirme le problème : TODO(C7): fix stream-server compilation if this fails
  2. Payments non intégrés : Le checkout UI existe mais ne peut rien traiter
  3. Rate limiting désactivé en dev/test (lignes 99-109 de rate_limiter.go) — acceptable mais l'absence de tests de rate limiting en CI est un risque

Zones non testées

  • Dashboard (0 tests)
  • Library (0 tests)
  • Analytics views (0 tests)
  • Admin views (0 tests)
  • Social feed (0 tests)
  • Education (ghost feature, 0 tests)
  • Gamification (ghost feature, 0 tests)
  • Live view (0 tests)

4. AUDIT DE SÉCURITÉ — OWASP TOP 10

A01 — Broken Access Control | Gravité : FAIBLE

Constats :

  • Middleware RequireAuth() appliqué systématiquement sur les routes protégées
  • RequireOwnershipOrAdmin() pour les opérations CRUD utilisateur
  • RequireContentCreatorRole() pour la création de contenu
  • CSRF sur toutes les opérations state-changing (POST, PUT, DELETE)
  • Routes admin protégées par RequireAdmin()

Risque résiduel :

  • POST /api/v1/logs/frontend est public sans rate limiting dédié — un attaquant pourrait flood les logs

Correctif : Ajouter un rate limiter sur l'endpoint de logging frontend.

A02 — Cryptographic Failures | Gravité : FAIBLE

Constats :

  • Passwords : bcrypt avec DefaultCost (10 rounds)
  • JWT : HS256 avec secret en variable d'environnement, validation issuer/audience
  • Tokens httpOnly, Secure, SameSite=strict en production
  • CSRF : crypto/rand + timing-safe comparison
  • Aucun secret hardcodé trouvé dans le code

Risque résiduel :

  • Refresh token TTL de 30 jours — long mais acceptable avec token versioning

A03 — Injection | Gravité : ÉLEVÉECorrigée

Vulnérabilité corrigée dans veza-chat-server/src/message_store.rs (2026-02-15) :

  • Requête paramétrée : make_interval(days => $1) avec .bind(older_than_days)
  • Validation des entrées : older_than_days limité à 1-3650 jours
  • Échappement COPY : backslash dans bulk_insert_messages pour content, message_type, metadata

Risque supplémentaire : Dynamic SQL dans message_repository.rs (lignes 387-515) utilise format!() avec des paramètres .bind(). Le pattern est sûr si les fragments dynamiques ne contiennent pas d'input utilisateur, mais c'est fragile.

Backend Go : Toutes les requêtes utilisent GORM (paramétrisé) ou $1/$2 placeholders. Aucune injection détectée.

Frontend : dangerouslySetInnerHTML utilisé dans le chat, mais toujours avec sanitizeChatMessage() (DOMPurify). Correctement implémenté.

A04 — Insecure Design | Gravité : MOYENNE

Constats :

  • Rate limiting implémenté (Redis + in-memory fallback)
  • Account lockout implémenté (5 tentatives)
  • Input validation présente mais inconsistante — pas tous les DTOs utilisent des tags de validation
  • Pas de rate limiting sur le frontend logging endpoint

Risque : Un attaquant peut envoyer des requêtes de logging en masse pour saturer le stockage de logs.

A05 — Security Misconfiguration | Gravité : MOYENNE

Constats :

  • CORS validé en production (pas de wildcard)
  • Security headers complets (HSTS, X-Frame-Options, CSP, etc.)
  • Debug/stack traces désactivés en production
  • CSRF_DISABLED ne peut être activé qu'en dev/test
  • Rate limiting désactivé en dev/test via NODE_ENV/APP_ENV

Risque :

  • Rate limiting bypass si APP_ENV=development est set en production par erreur — la validation de config devrait le prévenir mais ce n'est pas vérifié
  • Le web container utilise VITE_API_URL=http://haproxy/api/v1 sans HTTPS dans docker-compose.prod.yml (les URLs internes sont HTTP, HTTPS est terminé au HAProxy)

A06 — Vulnerable & Outdated Components | Gravité : FAIBLE

Constats :

  • CI exécute govulncheck, cargo audit, npm audit
  • Versions des dépendances à jour
  • Tokio mismatch dans veza-common (1.0 vs 1.35) — risque de compatibilité, pas de vulnérabilité

A07 — Identification & Authentication Failures | Gravité : FAIBLE

Constats :

  • JWT validé avec algorithm check, issuer, audience, token version
  • Token refresh avec rotation (vérification à la ligne 684) — contrairement au rapport initial, la rotation EST implémentée via s.refreshTokenService.Rotate()
  • Sessions stockées en DB avec validation
  • Password reset avec tokens expirables
  • 2FA TOTP implémenté

A08 — Software & Data Integrity | Gravité : MOYENNE

Constats :

  • CI/CD avec npm audit, govulncheck, cargo audit
  • Trivy scan sur images Docker (CRITICAL/HIGH)
  • SBOM generation (CycloneDX)
  • Image signing optionnel (cosign)

Risque :

  • Pas de secret scanning (gitleaks/trufflehog) dans le CI
  • Go tests exécutés avec -short flag, excluant les tests nécessitant DB

A09 — Logging & Monitoring Failures | Gravité : FAIBLE

Constats :

  • Structured logging (zap pour Go, tracing pour Rust)
  • Prometheus metrics
  • Sentry error tracking
  • Audit trail (/api/v1/audit/logs)
  • Secret filtering dans les logs (secret_filter.go)
  • Request ID tracking

A10 — SSRF | Gravité : FAIBLE

Constats :

  • File upload paths validés (ValidateExecPath, build_safe_path)
  • Path traversal protection dans le stream server
  • URL scheme validation dans le frontend (sanitizeURL)
  • Pas d'appels HTTP sortants non filtrés identifiés

Tableau récapitulatif sécurité

OWASP Gravité Impact Scénario
A01 Faible Logging flood POST /api/v1/logs/frontend sans rate limit
A02 Faible - Pratiques crypto solides
A03 Élevée Data loss SQL buggé dans message_store.rs (échoue, pas exploitable en l'état)
A04 Moyenne DoS Logging endpoint non rate limited
A05 Moyenne Bypass Rate limiting conditionnel sur env vars
A06 Faible - Dépendances à jour
A07 Faible - Auth robuste
A08 Moyenne Supply chain Pas de secret scanning
A09 Faible - Logging/monitoring solides
A10 Faible - Protections en place

5. DETTE TECHNIQUE

Dette CRITIQUE (bloquante)

# Élément Fichiers Impact
D1 Stream server ne compile pas veza-stream-server/src/* 39K LoC inutilisables, feature streaming inopérante
D2 Features fantômes accessibles en prod Education, Gamification, Studio Expérience utilisateur cassée, données fictives
D3 Pas de payment provider Checkout flow complet sans backend Feature marketplace non fonctionnelle
D4 SQL buggé dans chat message_store.rs:179 Cleanup job échoue silencieusement

Dette STRUCTURANTE

# Élément Fichiers Impact
D5 Double architecture frontend components/views/* vs features/*/pages/* Confusion, duplication, maintenance x2
D6 Pas d'orchestrateur monorepo Racine CI lent, builds non optimisés, pas de cache
D7 265 fichiers de test mais couverture inconnue Tests frontend Impossible de mesurer la qualité réelle
D8 261 fichiers test Go mais exécutés avec -short Tests backend Tests d'intégration non exécutés en CI
D9 i18n incomplet ~35+ fichiers avec strings hardcodées en anglais Impossible de livrer une version FR complète
D10 Duplication auth AuthContext.tsx + authStore.ts Deux sources de vérité pour l'état auth
D11 MSW handlers : 1737 lignes handlers.ts Fichier monstre, difficile à maintenir
D12 TODOs non résolus 40+ dans le backend Go, 15+ dans le frontend Travail incomplet accumulé

Dette COSMÉTIQUE

# Élément Impact
D13 React 18.2 au lieu de 18.3 Mineur
D14 TypeScript 5.3 au lieu de 5.7 Mineur
D15 Scripts bash avec eval Risque faible, dev only
D16 Commentaires en français/anglais mixtes Incohérence
D17 Nombreux fichiers markdown d'audit/remediation dans le backend Pollution du repo

6. QUALITÉ ARCHITECTURALE

Score d'architecture : 6.5/10

Justification :

  • (+) Séparation polyglotte intelligente (Go pour l'API, Rust pour le temps réel et le streaming)
  • (+) Feature-based structure sur le frontend
  • (+) Layered architecture sur le backend (handlers → services → repositories)
  • (-) Deux patterns frontend coexistent sans migration
  • (-) Pas d'orchestrateur monorepo (npm workspaces insuffisant)
  • (-) Stream server non fonctionnel = 1/4 de l'architecture cassée
  • (-) Features fantômes polluent le routing et l'UX

Score de maintenabilité : 5.5/10

Justification :

  • (+) Code bien structuré dans chaque service individuellement
  • (+) 303 stories Storybook (excellent pour la documentation visuelle)
  • (+) 526 fichiers de test au total
  • (-) 442K LoC pour une équipe visiblement petite = surcharge
  • (-) Duplication architecturale frontend
  • (-) Tests backend en mode -short en CI
  • (-) Couverture de test inconnue (pas de rapport)
  • (-) 40+ TODOs non résolus

Score de sécurité : 7.5/10

Justification :

  • (+) httpOnly cookies pour JWT
  • (+) CSRF avec timing-safe comparison
  • (+) CORS validé en production
  • (+) Rate limiting + account lockout
  • (+) Security headers complets
  • (+) Audit trail, secret filtering
  • (+) File upload multi-layer validation + ClamAV
  • (-) SQL bug dans le chat server
  • (-) Pas de secret scanning en CI
  • (-) Rate limiting bypassable via env var

Score de scalabilité : 6/10

Justification :

  • (+) Architecture microservices avec message queue (RabbitMQ)
  • (+) Redis pour cache et sessions
  • (+) K8s manifests préparés
  • (+) HAProxy comme reverse proxy
  • (-) Stream server non fonctionnel
  • (-) Pas de CDN configuré pour les assets audio
  • (-) Pas de monitoring de performance applicative (APM) au-delà de Prometheus
  • (-) PostgreSQL comme seul datastore (pas de séparation read/write)

7. INFRA & DEVOPS

Docker : 7/10

  • Multi-stage builds pour tous les services
  • Dockerfiles production dédiés
  • Health checks sur tous les services
  • Resource limits définis (sauf HAProxy)
  • Network isolation

Problème : Le HAProxy n'a pas de resource limits dans docker-compose.prod.yml.

Kubernetes : 6/10

  • Deployments avec runAsNonRoot, runAsUser: 1001
  • External Secrets Operator avec Vault
  • Health checks (readiness + liveness)
  • Graceful shutdown configuré

Problèmes :

  • Pas de deployment K8s pour le stream server
  • Pas de Network Policies
  • Pas de Pod Security Standards

CI/CD : 5.5/10

  • 8 workflows GitHub Actions
  • Security audits intégrés (govulncheck, cargo audit, npm audit)
  • Trivy scanning sur les images Docker

Problèmes critiques :

  • Stream server : cargo check seulement (pas de build)
  • Go tests : -short flag = tests d'intégration ignorés
  • Pas de secret scanning (gitleaks)
  • Pas de smoke tests post-deployment
  • Pas de coverage report
  • Pas de gestion de branches sophistiquée (pas de staging branch)

Secrets : 8/10

  • Variables d'environnement pour tout
  • {VAR:?error message} dans docker-compose.prod.yml (fail-fast)
  • External Secrets Operator pour K8s
  • Secret rotation policies configurées
  • Aucun secret hardcodé trouvé

8. RISQUES BUSINESS

Point de vue CTO

Peut-on lancer en production ?

Non, pas en l'état. Blockers :

  1. Le stream server ne compile pas — fonctionnalité core (streaming audio) non opérationnelle
  2. Le checkout n'a pas de payment provider — la marketplace ne peut pas générer de revenus
  3. Les features fantômes (Education, Gamification, Studio) vont confondre les utilisateurs
  4. Les tests d'intégration backend ne sont pas exécutés en CI

Estimation pour le go-live : 6-8 semaines de stabilisation avec une équipe de 2-3 développeurs.

Point de vue investisseur

Peut-on investir ?

Avec réserves. Points positifs :

  • Architecture ambitieuse et cohérente dans sa vision
  • Pratiques de sécurité au-dessus de la moyenne du marché
  • Stack moderne et pertinente pour le domaine audio
  • 442K LoC = travail significatif

Red flags :

  • Scope creep évident (25+ features dont 4 fantômes)
  • Un composant core (streaming) ne fonctionne pas
  • Ratio features implémentées / features annoncées faible (~60%)
  • Pas de métriques de couverture de test
  • Maintenu par une équipe visiblement petite pour la complexité

Valorisation technique : Le code a de la valeur, mais l'écart entre ce qui est annoncé et ce qui fonctionne réellement est préoccupant. Un due diligence technique approfondi avec exécution des tests est recommandé.

Point de vue acquéreur

Peut-on acquérir et maintenir ?

Faisable mais coûteux. Le code est globalement bien écrit et bien structuré. La stack est moderne. Cependant :

  • L'onboarding nécessite de comprendre 3 langages (TypeScript, Go, Rust)
  • La dette architecturale frontend (double pattern) augmente le coût de maintenance
  • Le stream server Rust nécessite un développeur Rust expérimenté pour le débloquer
  • Les 17+ fichiers markdown de "remediation" et "audit" dans le backend suggèrent un historique de problèmes récurrents

Recommandation : Acquérir uniquement si l'acquéreur dispose de compétences Go + Rust. Prévoir 3-6 mois de stabilisation avant de pouvoir itérer sur de nouvelles features.


9. PLAN D'ACTION PRIORISÉ

Phase 1 — URGENT (sécurité & stabilité) — Semaines 1-2

# Action Effort Impact
1.1 Fixer le SQL dans message_store.rs:179 S Élimine bug critique
1.2 Fixer la compilation du stream server L Débloquer le streaming audio
1.3 Désactiver les routes des features fantômes en prod S UX cohérente
1.4 Ajouter rate limiting sur /api/v1/logs/frontend S Prévenir DoS logs
1.5 Exécuter les tests Go SANS -short en CI (ajouter DB test) M Couverture réelle
1.6 Ajouter secret scanning (gitleaks) au CI S Prévenir les fuites
1.7 Générer et publier les rapports de couverture de tests S Visibilité qualité

Phase 2 — STABILISATION — Semaines 3-6

# Action Effort Impact
2.1 Migrer components/views/ vers features/ (éliminer la duplication) XL Maintenabilité +50%
2.2 Supprimer AuthContext.tsx, consolider sur authStore.ts M Source de vérité unique
2.3 Compléter l'i18n (migrer les 35+ fichiers avec strings hardcodées) L Prêt pour le marché FR
2.4 Ajouter tests pour Dashboard, Library, Analytics, Admin L Couverture des zones aveugles
2.5 Découper handlers.ts MSW (1737 lignes) en modules par feature M Maintenabilité
2.6 Intégrer un payment provider (Stripe) pour le checkout XL Marketplace fonctionnelle
2.7 Ajouter Network Policies K8s M Sécurité cluster
2.8 Ajouter resource limits HAProxy S Stabilité infra
2.9 Nettoyer les fichiers markdown d'audit/remediation du backend S Propreté repo

Phase 3 — AMÉLIORATION & REFONTE — Semaines 7-12

# Action Effort Impact
3.1 Adopter Turborepo ou Nx pour l'orchestration monorepo L CI 3-5x plus rapide
3.2 Implémenter ou supprimer définitivement les features fantômes XL Produit cohérent
3.3 Configurer CDN pour assets audio M Performance streaming
3.4 Ajouter smoke tests post-deployment M Fiabilité déploiements
3.5 Implémenter request cancellation frontend (AbortController) M Prévenir memory leaks
3.6 Ajouter store migration strategy (Zustand) M Résilience client
3.7 Configurer read replicas PostgreSQL L Scalabilité
3.8 Résoudre tous les TODOs restants (55+) L Dette technique zéro

CONCLUSION STRATÉGIQUE

Veza est un projet techniquement ambitieux, bien architecturé dans sa vision, mais en état de surextension. Le ratio entre les fonctionnalités annoncées et celles réellement opérationnelles (~60%) révèle un scope creep classique. Le codebase est de qualité correcte à bonne, avec des pratiques de sécurité notablement supérieures à la moyenne (httpOnly cookies, CSRF timing-safe, ClamAV, secret filtering, RBAC multi-niveaux).

Les 3 risques majeurs sont :

  1. Le stream server Rust (core feature) qui ne compile pas
  2. Les features fantômes qui donnent une fausse impression de complétude
  3. L'absence de payment provider pour une marketplace

La recommandation est de concentrer les efforts sur la Phase 1 (2 semaines) pour sécuriser et stabiliser, puis Phase 2 (4 semaines) pour rendre le produit commercialisable. La Phase 3 est un luxe qui peut attendre la preuve de marché.

Score global de maturité technique : 6/10 — Suffisant pour un MVP, insuffisant pour une mise en production commerciale sans stabilisation.


Fin du rapport d'audit technique — 14 Février 2026