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

Plan d'Implémentation Production

Priorité : du plus bloquant au moins urgent


Phase 1 — Déploiement Railway opérationnel (immediat)

Objectif : Railway répond, webhook Meta validé, premiers messages reçoivent une réponse.

Étape 1.1 — Variables Railway (manuel, 5 min)

  1. Supprimer DISABLE_WHATSAPP_SEND
  2. Ajouter WHATSAPP_APP_SECRET (Meta App → Basic Settings → App Secret)
  3. Vérifier que API_URL = https://whatsapp-worker-production-0bc0.up.railway.app

Étape 1.2 — Valider le webhook Meta (manuel, 2 min)

  1. Attendre fin du redéploiement Railway (logs : Server listening on http://0.0.0.0:3001)
  2. Tester : curl https://whatsapp-worker-production-0bc0.up.railway.app/{"ok":true}
  3. Meta Developers → WhatsApp → Configuration → Webhook → Retenter la validation

Étape 1.3 — Créer le contenu pédagogique (base de données)

Le flow complet nécessite au moins 1 Track avec 3+ TrackDays. À insérer via l'endpoint seed existant (SEED_DATA) ou directement en base :

  • Envoyer SEED_DATA depuis WhatsApp (déclencheur existant dans whatsapp.ts)

Phase 2 — Corriger les bugs d'interface (1-2 jours)

Étape 2.1 — Fix Admin App : champ whatsappIdphone

Fichier : apps/admin/src/App.tsx lignes 164, 237

- env.user?.whatsappId || 'Unknown'
+ env.user?.phone || 'Unknown'

Étape 2.2 — Fix Web App : portail étudiant factice

Fichier : apps/web/src/App.tsx — fonction handleLogin

Implémenter l'authentification réelle :

  • Appel API avec le numéro de téléphone
  • Retour des documents générés (OnePager, PitchDeck) via liens R2

Étape 2.3 — Page de succès Stripe

Créer une page /payment/success dans apps/web qui :

  • Confirme le paiement à l'utilisateur
  • Affiche un lien vers WhatsApp pour commencer

Phase 3 — Gestion de contenu admin (3-5 jours)

Étape 3.1 — API backend : routes Track/TrackDay

Fichier : apps/api/src/routes/admin.ts

Ajouter :

POST /v1/admin/tracks          // Créer un track
PUT  /v1/admin/tracks/:id      // Modifier
POST /v1/admin/tracks/:id/days // Ajouter un TrackDay
PUT  /v1/admin/tracks/:id/days/:dayId
DELETE /v1/admin/tracks/:id

Étape 3.2 — Interface admin : Content Manager

Fichier : apps/admin/src/App.tsx

Ajouter une vue "Content" dans le sidebar :

  • Liste des Tracks avec bouton Créer/Modifier
  • Pour chaque Track : liste des jours avec éditeur de texte + upload audio

Phase 4 — Améliorations qualité (optionnel)

Étape 4.1 — Unifier Enrollment / UserProgress

Les deux tables doublonnent currentDay. Migrer vers UserProgress uniquement et retirer currentDay de Enrollment.

Étape 4.2 — Logger les messages entrants (modèle Message)

Le modèle Message en base n'est jamais rempli. Ajouter un prisma.message.create() dans handleIncomingMessage.

Étape 4.3 — Scheduler : vérification état avant envoi

Dans scheduler.ts, avant d'envoyer la leçon du jour, vérifier que l'enrollment est ACTIVE et que le currentDay correspond.

Étape 4.4 — Variables VITE_API_URL dans les apps frontend

S'assurer que VITE_API_URL est configuré dans les .env de production de apps/admin et apps/web.


Résumé des priorités

✅ FAIT        → API + Worker Railway, todos les bugs WhatsApp fixés
🔴 CRITIQUE    → Supprimer DISABLE_WHATSAPP_SEND, ajouter WHATSAPP_APP_SECRET
🟠 IMPORTANT   → Valider webhook Meta, créer contenu (SEED_DATA)
🟡 SOON        → Fix admin phone field, portail étudiant réel
🟢 OPTIONNEL   → Stripe live, content manager admin, Message logging