DOCS/status/roadmap-canaux.md
Thomas Fransolet b9f1a692ab Studio : lots 5-6 et calibrage §9.4 consignés, unité de crédit, lot 7 en cours
Résultats du calibrage (61 générations, coûts recoupés sur l'export fal),
trois corrections de prompt, unité 1 crédit = 0,015 $ vendue avec marge,
échantillons et figures d'archétypes embarqués ; planches contact dans
outputs/studio-calibrage-2026-09-15. STATUS, roadmap, cartes 280 et 310 à jour.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011VxSQeGQYUvPmSEoGdnidA
2026-09-15 20:09:53 +02:00

30 lines
8.5 KiB
Markdown

# 5. Roadmap produit — nouveaux canaux & IA
> ← Section **§5** du tableau de bord : [STATUS.md](../STATUS.md)
Plans détaillés, pas encore démarrés en dev (sauf mention contraire) :
| Chantier | Détail | Statut |
|---|---|---|
| Kiosk web (Flutter Web, extension tablet-app) | [architecture-web-saas.md](../architecture-web-saas.md) | 📦 **V2** (2026-08-07) — pas commencé, ~2-3j estimés. Aucun client ne l'attend, et `tablet-app` ne compile même pas aujourd'hui |
| Visiteur web (Next.js, `app.myinfomate.be/[slug]`) | [architecture-web-saas.md](../architecture-web-saas.md) | ⚠️ **V1, presque fini**`visitapp-web` existe, build ✅, les 13 types de section sont rendus, assistant IA inclus. **Il ne manque que le Dockerfile + l'entrée `app.myinfomate.be` dans le compose.** Bloquant : le plan Essentiel vendu par l'onboarding est web-only |
| Export PDF stats — **à la demande** | [plan-import-ia-stats-subsides.md](../plan-import-ia-stats-subsides.md) §1 | ✅ **Livré le 2026-08-07**, généré côté client (paquet `pdf` Dart), aucun changement backend. **Inclus dans tous les plans qui ont les stats** (décidé le 09/08) — la différenciation vient du contenu, pas d'un verrou |
| Historique des stats — **13 mois pour tous** | idem · [todo-features.md](../todo-features.md) § Plans & Quotas | ✅ **Décidé et appliqué le 2026-08-09**. L'axe « durée » disparaît, `HasAdvancedStats` devient le seul différenciateur stats. Migration `UnifyStatsRetentionTo13Months` **à appliquer**. Purge codée mais inactive jusqu'au pg_dump |
| Export PDF stats — **envoi mensuel automatique** | idem | v2. C'est là que QuestPDF + Hangfire reprennent leur sens. Manquent : config destinataires/fréquence, méthode d'envoi avec pièce jointe, et `libfontconfig1` au Dockerfile |
| Import IA de contenu + RAG (pgvector) | [plan-import-ia-stats-subsides.md](../plan-import-ia-stats-subsides.md), [v2/rag-pgvector-integration-plan.md](../v2/rag-pgvector-integration-plan.md) | Priorité 2 — chantier fusionné, ~4-6 semaines. **Le schéma part avec la migration v3, voir §1ter** |
| Médias & stockage (compression, `IStorageService`, quota) | [v2/media-storage-plan.md](../v2/media-storage-plan.md) | **Prérequis à la release de migration** — voir §1ter |
| Visite hors ligne — remise en état | [v2/offline-visit-plan.md](../v2/offline-visit-plan.md) | **Bugs**, pas de la roadmap — voir §1ter |
| Écran Guide IA (manager-app) | [v2/guide-ia-screen-plan.md](../v2/guide-ia-screen-plan.md) | **V1**, spécifié et maquetté — voir §1ter |
| Écran Statistiques — refonte | [v2/stats-screen-plan.md](../v2/stats-screen-plan.md) | ✅ **Livré le 2026-08-07**, export PDF à la demande compris — les 7 défauts corrigés. **Pas encore ouvert dans un navigateur** : [test-plan.md §8bis et §8ter](../test-plan.md) |
| TTS pré-généré (audioguide multilingue) | [v2/tts-pregenerated-plan.md](../v2/tts-pregenerated-plan.md) | Priorité 3. ⚠️ **Trois corrections posées le 2026-09-02** (en-tête du fichier) : le moteur est **Gemini TTS**, pas Cloud TTS — le document disait les deux, le code tranche ; « le visiteur choisit entre Viva et Marco » est remplacé par **un guide adressable + N narrateurs** ; et le stockage s'en trouve **divisé par deux**, pas multiplié. Source de vérité sur les personnages : [v2/studio-plan.md §3.8](../v2/studio-plan.md) |
| ~~Talking head (avatar animé)~~ | [v2/talking-head-plan.md](../v2/talking-head-plan.md) | ⛔ **ABANDONNÉ le 2026-09-02.** Son lipsync repose sur `enable_time_pointing` de **Google Cloud TTS**, or le code livré tourne sur **Gemini TTS** (`GeminiTtsEngine`, `gemini-2.5-flash-preview-tts`) : aucune source de timestamps. Le plan était sans fondation, pas « à faire ». Remplacé par le portrait canon statique d'un `Persona`, puis une boucle vidéo 6-8 s. En-tête d'abandon posé sur le fichier |
| **Médiathèque — refonte de l'onglet Ressources** | ⭐ **[v1-mediatheque-plan.md](../v1-mediatheque-plan.md)** — spec autonome et exécutable, écrite le 2026-09-02 | ⭐ **V1 — prêt à implémenter, sans rien lire du plan Studio.** Rien à voir avec l'IA : renommage en Médiathèque, rail de facettes cumulables (type/usage/origine/configuration), filtre **« jamais utilisée »**, tri, groupement, sélection multiple, et le détail en **panneau latéral** avec la liste « Utilisée dans » — presque gratuite, `GetReferencedResourceIds` existe déjà sur les 13 sous-types. 🐛 Corrige deux bugs : le téléchargement forcé en `.json` quel que soit le type (`show_resource_popup.dart:91`) et `Resource.FileName` absent de `ToDTO()`. **Aucune clé API, aucun coût variable — meilleur ratio valeur/risque du chantier** |
| **Module Studio — génération IA d'images/vidéos/3D** | [v2/studio-plan.md](../v2/studio-plan.md) | 🛠️ **V2 — lots 0 à 6 codés, calibrage fait le 2026-09-15** (voir studio-plan §9.4 : négatif, contexte, coûts réels, unité de crédit). Conception du 2026-09-02 : Le produit n'est pas l'accès aux modèles, c'est la **cohérence visuelle à l'échelle d'un projet** : une `VisualIdentity` par instance + surcharge par configuration, injectée côté serveur dans chaque prompt. La génération se greffe sur le **sélecteur de ressource existant** (`showSelectResourceModal` embarque déjà `ResourcesScreen`) — un seul branchement couvre les 13 types de section, les POI et les étapes. MVP = escape game, images seulement. ✅ Prérequis bucket levé (lot 0 : URL signée + ingestion serveur). ⚠️ Trois pièges tranchés : URL Firebase à jeton **publique** (préfixe `studio-drafts/` + proxy authentifié), `CheckQuota` avant/après **ne tient pas** sur des jobs Hangfire parallèles (réservation en deux temps sur `CreditLedger`), et `GuidedStep.ImageUrl` est une URL — les images de l'escape game **ne partiraient pas offline**. 🚫 Pas de watermark gravé par défaut : provenance + badge UI + XMP IPTC dans le fichier, gravure en option par instance (lot 6) |
| **Personnages — un guide adressable + N narrateurs** | [v2/studio-plan.md §3.8](../v2/studio-plan.md) | 🛠️ **V2 — lot 7 en cours** (entité `Persona`, écran Personnages, `TtsVoice` en base, figures d'archétypes). Arrêté le 2026-09-02 : **Trois plans décrivaient le même objet sans se croiser** : le canon visuel (studio-plan), les frames de lipsync (talking-head), et `PersonaConfig { WakewordId, GuideName, PersonaPrompt, VoiceName }` (tts-pregenerated). Une entité `Persona` les remplace, et les 4 colonnes `Instance.Guide*` deviennent une ligne. ⚠️ « Le visiteur choisit entre Viva et Marco » était **un choix de voix déguisé en choix de guide** : le besoin réel (modèle Bastogne War Museum) est N narrateurs assignés par le conservateur via `NarratorPersonaId` — ce qui **divise le stockage TTS par deux** au lieu de le multiplier. Le **wakeword devient une exigence du canal mains-libres**, pas une propriété du personnage : ça corrige le bug latent où le visiteur dirait « Marco » à quelqu'un qui se présente comme « Léon ». À ajouter : `Persona.VoicePrompt` (l'intonation, aujourd'hui la **constante de build** `kGeminiTtsPrompt`) et une table `TtsVoice` — deux constantes ne suffisent pas à quatre narrateurs |
| AI Persona par venue (guide IA personnalisable) | [v2/myinfomate-ai-persona-analysis.md](../v2/myinfomate-ai-persona-analysis.md) | Architecture de référence pour les chantiers IA ci-dessus |
| Lunettes Ray-Ban Meta | [roadmap.md](../roadmap.md) (section XR), [rayban-meta-integration.md](../rayban-meta-integration.md) | 🔨 **POC fonctionnel — bien plus avancé que ce que cette ligne disait jusqu'au 2026-08-09.** Voir §5bis |
| VR Meta Quest (borne office tourisme) | [v2/vr-quest-unity-plan.md](../v2/vr-quest-unity-plan.md) · [roadmap.md](../roadmap.md) (section XR) | 📦 **V2** — ⚠️ **« zéro ligne de code » était faux** (corrigé le 2026-08-31, relevé dans le code). Le canal VR est déjà dans le modèle : `AppType.VR`, `Instance.IsVR` en base depuis juillet 2025, sous-menu « VR » branché dans `main_screen.dart:65`, filtre stats + i18n `statsChannelVR` prêts. **Ce qui manque** : l'écran de flotte (`main_screen.dart:704` = `Text("TODO vr")`), un `Device.AppType` (le `DeviceController` est hardcodé sur `Tablet`), et l'app Unity. Back-office XR : **8-12 j**. App Unity : **3-4 mois**. La landing annonce « Meta Quest — Bientôt » en 4 langues (`translations.ts`, clé `mode4Desc`) |
| Canal subsides | [plan-import-ia-stats-subsides.md](../plan-import-ia-stats-subsides.md) | Actions administratives/réseau, pas de dev |
---