edtech / docs /audit_production.md
CognxSafeTrack
docs: add audit_production.md + plan_implementation_prod.md; fix admin phone field
f1a06cd

Audit Complet — État de la Codebase

Date : 2026-02-22 — Commit base : c286b2d


1. Architecture globale

apps/
  api/            → Fastify REST API (Railway — port 3001)
  whatsapp-worker/ → BullMQ Worker (Railway — même container)
  admin/          → Dashboard React (Vite + Tailwind)
  web/            → Landing page + portail étudiant (Vite + Tailwind)

packages/
  database/       → Prisma schema (PostgreSQL) + migrations
  shared-types/   → Types TypeScript partagés
  tsconfig/       → Config TS commune
  ui/             → (vide)

2. Ce qui fonctionne ✅

Composant État
Webhook WhatsApp (GET verify + POST events) ✅ Implémenté
Onboarding : INSCRIPTION → langue → secteur
Menus interactifs LIST (boutons natifs) ✅ Titre ≤ 24 chars corrigé
Download audio Meta Graph API (Railway)
Transcription Whisper via /v1/ai/transcribe
Feedback AI generateFeedback() + 429 fallback
Timeout IA 10s (Promise.race)
TTS leçon → audio R2
Personnalisation leçon par secteur
SUITE / DAY_CONTINUE → jour suivant ✅ Regex fixé
REPLAY → réécoute leçon
EXERCISE → invite réponse
Dock génération OnePager PDF + PitchDeck PPTX
Paiements Stripe (checkout + webhook) ✅ Implémenté
Admin dashboard (stats + enrollments + CSV export)
Dockerfile combiné API + Worker (Railway)
Scheduler cron leçons quotidiennes ✅ (basique)
Stockage audio R2 via /v1/ai/store-audio ✅ Ajouté

3. Problèmes identifiés ❌

3.1 Critiques (bloquants en prod)

# Fichier Problème Solution
C1 Railway vars WHATSAPP_APP_SECRET non défini → HMAC skip (warning) Ajouter la variable
C2 Railway vars DISABLE_WHATSAPP_SEND=true encore présent → aucun envoi Supprimer la variable
C3 Base de données Aucun contenu (Track/TrackDay) en production → enrollement impossible Seed ou admin content manager
C4 api/src/services/stripe.ts STRIPE_SECRET_KEY et STRIPE_WEBHOOK_SECRET non vérifiés au démarrage Ajouter à Railway vars
C5 Meta webhook URL pas encore validée si container 502 Corriger après Railway restart

3.2 Importants (fonctionnalités incomplètes)

# Composant Problème
I1 apps/admin Pas de gestion de contenu (Tracks/TrackDays) — impossible de créer des leçons via l'interface
I2 apps/admin env.user?.whatsappId utilisé mais le modèle User a phone (pas whatsappId) → colonne vide dans le tableau
I3 apps/web Portail étudiant /login est facticehandleLogin fait un fake alert avec setTimeout, n'appelle aucune API
I4 apps/web Pas de page de succès paiement Stripe (/payment/success)
I5 whatsapp-worker/src/scheduler.ts Cron envoie les leçons mais sans logique de vérification du jour courant — risque d'envoyer à des utilisateurs déjà complétés
I6 apps/api/routes/admin.ts Pas de route pour créer/modifier des Tracks ou TrackDays API-side
I7 packages/ui Package vide — prévu pour composants partagés mais non utilisé

3.3 Mineurs (dette technique)

# Problème
M1 Enrollment et UserProgress sont deux tables qui trackent le même currentDay et exerciseStatus — duplication de données
M2 admin/src/App.tsx ligne 108 : import lucide-react collé avec une déclaration d'interface (mauvais formatage)
M3 Message modèle Prisma non utilisé nulle part dans le code (payload jamais stocké)
M4 web/src n'a pas de VITE_API_URL configuré par défaut → fallback localhost:3001 en prod
M5 Pas de gestion du cas où un utilisateur envoie INSCRIPTION alors qu'il est déjà inscrit à une formation active

4. Variables d'environnement — état complet

Railway (whatsapp-worker service)

Variable Statut Action
WHATSAPP_VERIFY_TOKEN OK
WHATSAPP_ACCESS_TOKEN OK
WHATSAPP_PHONE_NUMBER_ID OK
WHATSAPP_APP_SECRET ⚠️ Non défini Ajouter (Meta App → Basic Settings → App Secret)
ADMIN_API_KEY ✅ (confirmé) OK
DATABASE_URL OK
REDIS_URL OK
OPENAI_API_KEY OK
API_URL OK (doit pointer vers URL Railway publique)
DISABLE_WHATSAPP_SEND ❌ Présent Supprimer
STRIPE_SECRET_KEY ❓ Non confirmé Ajouter si Stripe actif
STRIPE_WEBHOOK_SECRET ❓ Non confirmé Ajouter si Stripe actif
NODE_ENV OK
R2_* variables OK

HuggingFace (api service — inbound webhook désactivé)

Variable Statut
DISABLE_WHATSAPP_SEND true (correct)
OPENAI_API_KEY
DATABASE_URL
Autres Même que Railway

5. Déploiements

Service Plateforme URL État
API + Worker (webhook + BullMQ) Railway whatsapp-worker-production-0bc0.up.railway.app 🟡 En restart
Landing + Portail HF / Netlify ? À confirmer
Admin Dashboard HF / Netlify ? À confirmer