DOCS/status/roadmap-canaux.md
Thomas Fransolet fb1d15d0b3 Tags NFC : analyse du troisième déclencheur physique
Deux recadrages par rapport à la demande initiale : le déclencheur n'est pas un
POI (qui est un point sur un GLB) mais une Section, au même endroit que le
beacon ; et l'indirection code → section n'a aucun équivalent existant à
réutiliser — en v1 le tag porte la même URL que le QR, donc zéro entité, zéro
endpoint.

Le vrai coût est ailleurs : ni Universal Links ni App Links n'existent sur nos
domaines, et ce lot-là profite autant au QR, qu'un appareil photo natif n'ouvre
pas dans l'app aujourd'hui. Dépend du déploiement de visitapp-web pour le
fallback sans app installée.

Carte kanban 265.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 15:29:16 +02:00

9.2 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 finivisitapp-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
Talking head (avatar animé) 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)
Tags NFC (déclencheur de section) v2/nfc-triggers-plan.md 📦 V2 — analysé dans le code le 2026-09-16. Troisième déclencheur physique à côté du QR et du beacon. ⚠️ Le coût n'est pas le NFC : les Universal Links / App Links n'existent pas (aucun assetlinks.json ni apple-app-site-association, app_links branché seulement sur le retour Meta AI, main.dart:69) — ce lot-là sert aussi au QR, qui aujourd'hui n'ouvre pas l'app quand il est scanné par l'appareil photo natif. Le tag porte la même URL que le QR : aucune entité, aucun endpoint de résolution en v1. Dépend du déploiement de visitapp-web pour le fallback sans app. 4-7 j
Canal subsides plan-import-ia-stats-subsides.md Actions administratives/réseau, pas de dev