---
suivi: 1817
date: 2026-10-07
sujet: Visite guidée générique
chantier: brainstorming
type: feature
statut: poussé
hash: 73c537e7d
fichiers:
  - docs/suivi/SUIVI_1817_visite_guidee.md
  - resources/js/Components/VisiteGuidee.vue
  - resources/js/visites/index.js
  - resources/js/Pages/Brainstorming/Index.vue
  - resources/js/Pages/Brainstorming/Show.vue
  - resources/js/Pages/Brainstorming/Create.vue
  - app/Http/Controllers/VisiteGuideeController.php
  - app/Http/Middleware/HandleInertiaRequests.php
  - app/Models/User.php
  - routes/web.php
  - database/data/journal_mises_a_jour_post_2026_06_12.php
  - public/build/
---

# SUIVI #1817 — Visite guidée

## Étape 0

- HelpHint : aide « ? » contextuelle (slot), pas de parcours multi-étapes → réutilisé sur la création (Objectif, Délai).
- Centre d’aide : CMS d’articles, hors sujet pour l’état « déjà vu ».
- Préférences #1787 : `users.preferences` via `User::setPreference` / `preference` — pas de nouvelle table. Clé `visites_vues` (visite → version).
- Aucune lib de tour en place ; composant maison (pas de dépendance CDN).

## Mapping

| Libellé | Valeur postée | Stockage | Back |
|---------|---------------|----------|------|
| Visite terminée / passée | `visite` + `version` | `users.preferences.visites_vues[visite]` | `VisiteGuideeController::marquer` |
| Revoir | — (front forcé) | inchangé jusqu’à Terminer/Passer | — |

## Comment ajouter une visite à une page

1. Entrée dans `resources/js/visites/index.js` (`id`, `version`, `etapes` avec `cible` / `titre` / `texte` / `onglet?`).
2. Ajouter l’`id` dans `VisiteGuideeController::VISITES`.
3. Sur la page : `data-visite="cible"` sur les éléments ; `<VisiteGuidee id="…" />` ; bouton « ? » qui appelle `ref.relancer()`.
4. Si un onglet doit s’ouvrir : passer `:preparer` et mettre `onglet` sur l’étape.
5. Monter `version` pour reproposer la visite à ceux qui l’avaient déjà vue.

## LEÇON

Mémorisation serveur dans `users.preferences` (comme les colonnes #1787), pas de localStorage : « Passer » tient sur un autre appareil. Les étapes dont la cible est absente (droits, mobile) sont sautées à la construction de la liste.

## Bundle

VisiteGuidee-b-1jb6Nn.js, VisiteGuidee-CeEy3UoH.css, Index-CukUJhOO.js, Show-r7XfqBpF.js, Show-6p7dSh4F.css, Create-BBcPZbGF.js, coquille app-DjXAynBC.js.

## DÉPLOIEMENT-TEST

git pull origin main
php artisan optimize:clear
php artisan view:clear
php artisan route:clear
php artisan journal:sync

Pas de migration.

1. Premier accès liste → visite A ; première salle → visite B.
2. Passer → ne revient pas (autre navigateur).
3. Bouton « ? » → repart.
4. Non créateur : étape Réglages sautée.
5. Téléphone : bulle en bas.
