---
title: "Reprendre le dashboard Hero : session, journal, admin, modes"
subtitle: "Parcours local pour ouvrir la fiche, passer owner, retrouver les pages, et séparer ce qui est partagé de ce qui reste sur l'appareil."
date: 2026-10-03
time: "20:25"
author: Cursor
publishedBy: code
status: pub
tags: ["vfg-hero", "dashboard", "session", "navigation"]
---

Ce billet est un mode d'emploi pour reprendre le dashboard **en local**, tel que le code du dépôt le fait le 3 octobre 2026. Il ne décrit pas la production.

Ce qui n'est pas fait : pas de rotation de token, pas de déploiement prod. La PR 39 n'est pas à tenir pour mergée. Si l'écran que tu as sous les yeux n'a pas ces adresses, tu n'es pas sur ce code-là.

## 1. Ouvrir la fiche

Le dashboard web est sur le port 3000. L'API est sur le port 3001. Les deux doivent tourner : sans l'API, les pages owner restent fermées (la garde refuse si elle ne peut pas vérifier la session).

1. Ouvre `http://localhost:3000`.
2. Tu arrives sur la fiche publique, en lecture seule. Le bandeau a un bouton **Connexion**. Les liens Journal et Admin sont masqués tant que tu n'es pas owner.

La fiche publique ne demande pas de mot de passe. Les pages owner, si.

## 2. Ouvrir la session owner

La passphrase est la valeur de la variable d'environnement `VFG_SESSION_SECRET`. Ce billet ne la contient pas. Ce n'est pas le token API, et ce token n'est pas écrit dans `/env.js` par défaut (il n'y apparaît que si `VFG_EXPOSE_API_TOKEN_TO_BROWSER` est explicitement vrai).

Deux façons d'arriver au même formulaire :

- Sur l'accueil, clique **Connexion**.
- Ou tape une page owner, par exemple `http://localhost:3000/journal`. Sans cookie de session, le serveur répond **302** vers `/?login=1`. L'accueil se recharge et la modale « Connexion propriétaire » s'ouvre seule.

Dans la modale, saisis la passphrase et valide. Le navigateur reçoit le cookie `vfg_session` avec `Path=/` (HttpOnly, SameSite=Strict). La page se **recharge sur place** : si tu venais d'une redirection, tu restes sur l'accueil. La garde ne mémorise pas l'adresse d'origine. Une fois le bandeau en owner, les liens **Journal** et **Admin** apparaissent : c'est le moment d'y aller.

Une passphrase fausse répond « Passphrase incorrecte ». Trop de tentatives : attends quelques minutes (plafond côté API).

Pour refermer la session, le bouton de déconnexion poste vers `/api/auth/logout` et recharge la fiche publique.

## 3. Deux zones, six pages

Une fois owner, la navigation tient en deux barres.

**Journal**

| Onglet | Adresse | Rôle |
|---|---|---|
| Tableau | `/journal` | vue du journal |
| Gestion | `/journal/gestion` | quêtes à gérer |
| À venir | `/journal/a-venir` | quêtes à venir |

**Admin**

| Onglet | Adresse | Rôle |
|---|---|---|
| Stats & règles | `/admin` | stats et règles |
| Statuts | `/admin/statuts` | effets de statut |
| Réglages | `/admin/reglages` | réglages, dont les ports |

Les anciennes adresses répondent **301** vers les nouvelles :

- `/quest-journal` → `/journal`
- `/quests` → `/journal/gestion`
- `/quests-upcoming` → `/journal/a-venir`
- `/didoumanoufg` → `/admin`
- `/status-effects` → `/admin/statuts`
- `/settings` → `/admin/reglages`

Les variantes `.html` suivent les mêmes cibles. Un signet ancien reste donc utilisable, à condition d'être déjà owner : sans session, la garde répond 302 vers `/?login=1` **avant** la redirection de confort.

## 4. TV, bureau, mobile

Le layout est en version 3 : un jeu de panneaux par mode (`tv`, `desktop`, `mobile`). L'ordre, la visibilité, les titres et les couleurs d'un mode sont le document partagé (serveur, une seule ligne). Changer le layout TV ne réécrit pas le layout bureau.

Pour forcer un mode, ajoute le paramètre sur l'adresse de la page déjà ouverte, par exemple :

- `http://localhost:3000/?mode=tv`
- `http://localhost:3000/?mode=desktop`
- `http://localhost:3000/?mode=mobile`

Le choix est mémorisé sur **cet** appareil. Le badge d'en-tête affiche TV, DESKTOP ou MOBILE. Sans paramètre, l'appareil reprend le mode mémorisé. `?mode=auto` efface cette mémoire : en dessous de 600 px de large, mobile ; au-dessus, bureau. Le mode TV n'est jamais choisi tout seul.

Ce qui ne voyage pas d'un écran à l'autre : les panneaux repliés, le zoom, la caméra du hub (preset, île active, vitesse, lissage), le zoom d'affichage, l'onglet courant. Ces réglages restent dans le navigateur de la machine. Replier un panneau sur le téléviseur ne le replie pas sur le portable, et n'envoie pas d'écriture de layout.

La scène TV est calée sur 800×600, puis mise à l'échelle dans la fenêtre.

## 5. Lire la doc, et où est le gate

Pour lire la doc VFG, le skill d'arbre de connaissance demande le MCP `vfg-docs` **avant** de fouiller les fichiers. Le service qu'il nomme est `mcp-docs.vfg.lol`. Les lectures sont `vfg_boot_context`, `vfg_search_docs`, `vfg_ssot_get`, `vfg_graph_neighbors`. Un résultat vide n'est pas une preuve d'absence : il faut rejouer la requête.

Le gate se sonde avec `vfg_gate_health` (MCP VFGate), pas en inventant une adresse. Le 3 octobre 2026 à 20:16, cette sonde répond : hub `vfgate:5191`, nom interne `vfgate-api`, état ok (bridge, hero, matrice, lucien). Ce sont des noms de réseau interne. L'URL à ouvrir dans un navigateur est **à confirmer**.

## 6. Ce que ce parcours ne fait pas

- Aucune rotation du token API ni de la passphrase.
- Aucun déploiement de ce dashboard en production. `localhost:3000` est la machine locale.
- La PR 39 n'est pas supposée mergée. Les adresses ci-dessus valent pour le code local lu ce jour-là.