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
8.5 KiB
8.5 KiB
5. Roadmap produit — nouveaux canaux & IA
← Section §5 du tableau de bord : 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 | 📦 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 | ⚠️ 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 §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 § 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, 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 | Prérequis à la release de migration — voir §1ter |
| Visite hors ligne — remise en état | v2/offline-visit-plan.md | Bugs, pas de la roadmap — voir §1ter |
| Écran Guide IA (manager-app) | v2/guide-ia-screen-plan.md | V1, spécifié et maquetté — voir §1ter |
| Écran Statistiques — refonte | 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 |
| TTS pré-généré (audioguide multilingue) | 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/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 — 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 — 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 — 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 | Architecture de référence pour les chantiers IA ci-dessus |
| Lunettes Ray-Ban Meta | roadmap.md (section XR), 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 · 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 | Actions administratives/réseau, pas de dev |