| # Plan d'implémentation — Admin UX/UI Non-Tech |
|
|
| **Créé le :** 2026-05-13 |
| **Objectif :** Rendre l'interface admin utilisable par des non-développeurs, en s'appuyant sur l'IA conversationnelle pour guider chaque action clé. |
|
|
| --- |
|
|
| ## Statut global |
|
|
| | Phase | Description | Statut | |
| |-------|-------------|--------| |
| | Phase 1 | Gains immédiats — corrections sans refonte | ✅ Terminé | |
| | Phase 2 | Chat IA global toutes les pages | ✅ Terminé | |
| | Phase 3 | Onboarding WhatsApp guidé | ✅ Terminé | |
| | Phase 4 | Templates assistés par IA | ✅ Terminé | |
| | Phase 5 | Agent IA — setup guidé | ✅ Terminé | |
|
|
| --- |
|
|
| ## Phase 1 — Gains immédiats (sans refonte) |
|
|
| > Objectif : corriger les points de friction les plus bloquants en touchant un minimum de code. |
|
|
| ### 1.1 — Masquer Flow Config JSON (SettingsPage) |
| - **Fichier :** `apps/admin/src/pages/SettingsPage.tsx` |
| - **Action :** Enrober le textarea `flowConfig` dans un `<details>` collapsé par défaut avec le label "⚙️ Configuration avancée (développeurs)" |
| - **Statut :** ✅ Terminé |
|
|
| ### 1.2 — Remplacer "X chunks" (AIAgentSetup) |
| - **Fichier :** `apps/admin/src/pages/AIAgentSetup.tsx` |
| - **Action :** Indicateur de couverture qualitative (Excellente/Bonne/Insuffisante) + texte humain "X passages analysés" + conseil si volume insuffisant |
| - **Statut :** ✅ Terminé |
|
|
| ### 1.3 — Placeholder guidé pour le champ Rôle (AIAgentSetup) |
| - **Fichier :** `apps/admin/src/pages/AIAgentSetup.tsx` |
| - **Action :** Placeholder exemple concret + texte d'aide sous le champ |
| - **Statut :** ✅ Terminé |
|
|
| ### 1.4 — Bloc d'aide contextuel — Connexion WhatsApp (OnboardingWizard) |
| - **Fichier :** `apps/admin/src/pages/OnboardingWizard.tsx` |
| - **Action :** `<details>` collapsable expliquant WABA ID, Business ID, Token système avec liens directs Meta + conseil de basculer vers Facebook Signup si nouveau |
| - **Statut :** ✅ Terminé |
|
|
| ### 1.5 — Labels humains pour les clés API (SettingsPage) |
| - **Fichier :** `apps/admin/src/pages/SettingsPage.tsx` |
| - **Action :** Texte explicatif enrichi : état locked (ce que SCALE débloque) + état unlocked (clés chiffrées, impact sur les crédits) |
| - **Statut :** ✅ Terminé |
|
|
| --- |
|
|
| ## Phase 2 — Chat IA global (toutes les pages) |
|
|
| > Objectif : étendre le chat billing à toute l'interface, avec un contexte qui change selon la page. |
|
|
| ### 2.1 — Extraire AdminChat en composant générique |
| - **Fichier :** `apps/admin/src/components/AdminChat.tsx` (nouveau) |
| - **Action :** Widget flottant (bouton 💬 + panneau) avec prop `page: AdminChatPage`, questions rapides contextuelles par page, reset automatique au changement de page |
| - **Statut :** ✅ Terminé |
|
|
| ### 2.2 — Endpoint API contextualisé |
| - **Fichier :** `apps/api/src/routes/billing.ts` |
| - **Action :** Param `page` ajouté au body du POST `/chat`. Si `page === 'billing'` → contexte complet (wallet + usage). Sinon → contexte léger (org + mode + aide contextuelle par page : settings, templates, agent, onboarding) |
| - **Statut :** ✅ Terminé |
|
|
| ### 2.3 — Intégrer AdminChat dans MainLayout |
| - **Fichier :** `apps/admin/src/components/layouts/MainLayout.tsx` |
| - **Action :** Hook `useAdminChatPage()` mappe la route courante vers la page de chat. Widget masqué sur `/billing` (qui a son propre chat inline). Affiché uniquement si une organisation est sélectionnée. |
| - **Statut :** ✅ Terminé |
|
|
| --- |
|
|
| ## Phase 3 — Onboarding WhatsApp guidé |
|
|
| > Objectif : zéro abandon sur l'étape de connexion WhatsApp. |
|
|
| ### 3.1 — Stepper visuel dans l'étape WhatsApp |
| - **Fichier :** `apps/admin/src/pages/OnboardingWizard.tsx` |
| - **Action :** Badges numérotés ①②③ devant chaque champ (WABA ID → Business ID → Token) avec lien direct Meta pour chacun |
| - **Statut :** ✅ Terminé |
|
|
| ### 3.2 — Validation token WhatsApp en temps réel |
| - **Fichiers :** `OnboardingWizard.tsx` + `apps/api/src/routes/organizations.ts` |
| - **Action :** Endpoint `POST /v1/organizations/whatsapp-validate-token` (ping `graph.facebook.com/me`). Feedback visuel sur le champ : `✓ vert` / `✗ rouge` / `… checking` + message explicatif sous le champ |
| - **Statut :** ✅ Terminé |
|
|
| ### 3.3 — Détection d'expiration du token (SettingsPage) |
| - **Fichiers :** `SettingsPage.tsx` + `apps/api/src/routes/organizations.ts` |
| - **Action :** Endpoint `GET /v1/organizations/:id/whatsapp-status` (déchiffre le token + ping Meta). SettingsPage charge le statut au mount. Bannière rouge avec instructions si token invalide/expiré. |
| - **Statut :** ✅ Terminé |
|
|
| --- |
|
|
| ## Phase 4 — Création de templates assistée par IA |
|
|
| > Objectif : un non-tech peut créer un template WhatsApp correct du premier coup. |
|
|
| ### 4.1 — Générateur de template via IA |
| - **Fichiers :** `TemplatesPage.tsx` + `apps/api/src/routes/billing.ts` |
| - **Action :** Endpoint `POST /v1/billing/template-generate` (gpt-4o-mini, response_format JSON). Dans la modal : champ description + bouton "Générer" → auto-remplit nom, corps, catégorie. |
| - **Statut :** ✅ Terminé |
| |
| ### 4.2 — Validation en temps réel des variables |
| - **Fichier :** `apps/admin/src/pages/TemplatesPage.tsx` |
| - **Action :** Regex `{{...}}` sur le body en temps réel. Badges colorés pour chaque variable : bleu si `{{1}}` (valide), amber si `{{texte}}` (invalide). Bouton Submit bloqué si variables invalides. |
| - **Statut :** ✅ Terminé |
| |
| ### 4.3 — Prévisualisation rendu WhatsApp |
| - **Fichier :** `apps/admin/src/pages/TemplatesPage.tsx` |
| - **Action :** Bulle WhatsApp (fond `#ECE5DD`, bulle blanche) avec `{{1}}` → exemples réels (Jean Dupont, 3 000 FCFA…). Apparaît dès que le corps n'est pas vide. |
| - **Statut :** ✅ Terminé |
| |
| ### 4.4 — Explication politique d'approbation Meta |
| - **Fichier :** `apps/admin/src/pages/TemplatesPage.tsx` |
| - **Action :** Texte contextuel sous le sélecteur Catégorie : Marketing → "24-48h, évitez les mots trop commerciaux" / Utilitaire → "approbation plus rapide, confirmations/rappels". |
| - **Statut :** ✅ Terminé |
| |
| --- |
| |
| ## Phase 5 — Agent IA — Setup guidé |
| |
| > Objectif : configurer un agent opérationnel sans comprendre ce qu'est un LLM. |
| |
| ### 5.1 — Feedback post-upload enrichi |
| - **Fichier :** `apps/admin/src/pages/AIAgentSetup.tsx` |
| - **Action :** Après upload succès → card "✨ Que se passe-t-il maintenant ?" expliquant le délai d'indexing et invitant à tester dans le panneau de droite |
| - **Statut :** ✅ Terminé |
| |
| ### 5.2 — Suggestion de ton selon le secteur |
| - **Fichier :** `apps/admin/src/pages/AIAgentSetup.tsx` |
| - **Action :** Fetch org mode au chargement → pré-sélection automatique (EDTECH→Pédagogue, CRM→Amical, AI_AGENT→Professionnel, CUSTOMER_SERVICE→Direct). Badge `✦` sur le ton recommandé. Description contexuelle + "recommandé pour votre secteur" sous les boutons. |
| - **Statut :** ✅ Terminé |
| |
| ### 5.3 — Blocage activation si KB vide |
| - **Fichier :** `apps/admin/src/pages/AIAgentSetup.tsx` |
| - **Action :** Bannière amber en haut de page si KB vide + mode AI_AGENT. Bouton Save désactivé avec message explicatif. |
| - **Statut :** ✅ Terminé |
|
|
| ### 5.4 — Test de l'agent en direct (chat preview) |
| - **Fichiers :** `AIAgentSetup.tsx` + `apps/api/src/routes/billing.ts` |
| - **Action :** Endpoint `POST /v1/billing/agent-test` (personalityConfig → system prompt → gpt-4o-mini). Panneau de droite remplacé par un chat interactif avec input + bulles. Indicateur de chargement animé. |
| - **Statut :** ✅ Terminé |
|
|
| --- |
|
|
| ## Ordre d'exécution recommandé |
|
|
| ``` |
| Phase 1 → Phase 2 → Phase 3 → Phase 4 → Phase 5 |
| ``` |
|
|
| Les phases 1 sont indépendantes et peuvent être faites en parallèle. |
| Les phases 3–5 dépendent de la Phase 2 (AdminChat générique). |
|
|
| --- |
|
|
| ## Légende |
|
|
| | Symbole | Signification | |
| |---------|--------------| |
| | ✅ | Terminé | |
| | ⏳ | En cours | |
| | 🔲 | À faire | |
| | ❌ | Bloqué | |
|
|