Files
html/wiki/V123-dashboards-favorites.md
opus f53abb4e8c
Some checks failed
WEVAL NonReg / nonreg (push) Has been cancelled
auto-sync via WEVIA git_sync_all intent 2026-04-21T10:28:16+02:00
2026-04-21 10:28:16 +02:00

3.4 KiB

V123 Opus WIRE - Dashboards Favorites/Pinning · 21avr 10:25

Context

Yacine CONTINUE. Continuer polish UX consolidation dashboards. Poursuite séquence additive V116-V122.

Design choice: URL hash, pas localStorage

Pourquoi Avantage
URL hash #pins=a,b,c Shareable (bookmark, message)
Zero localStorage Pas de conflit browser storage
history.replaceState Pas de pollution historique
Auto-persist Reload garde les pins sans code DB

Livrables V123

1. Boutons étoile sur chaque tuile

  • 69 boutons ★ (étoile Unicode)
  • Couleur: gold #fbbf24 si pinned, gris #555 sinon
  • Click: event.preventDefault(); event.stopPropagation(); __dashTogglePin(name) — ne navigue pas au dashboard
  • Title: "Pin" / "Unpin" selon état

2. Pinned tiles rendus en premier

filtered = filtered.slice().sort((a,b) => {
  const ap = pinned.has(a.name) ? 0 : 1;
  const bp = pinned.has(b.name) ? 0 : 1;
  return ap - bp;
});

Pinned passent devant, l'ordre interne (search/sort) reste.

3. Visual pinned

  • Border color: #fbbf24 (vs catégorie color)
  • Class CSS .pinned avec box-shadow gold subtil
  • Hover: shadow gold intensifié rgba(251,191,36,0.35)

4. URL hash sync

https://weval-consulting.com/all-ia-hub.html#pins=ethica-dashboard-live.html,crm-dashboard-live.html
  • window.history.replaceState (pas de scroll, pas d'entrée historique)
  • Reload: parse hash au chargement → pins restaurés

5. Counter enrichi

"69 / 69 tuiles (2 pins)"

Validation E2E Playwright V123

{
  "v123": "pinning-url-hash",
  "initial_star_buttons": 69,
  "first_pin_works": true,
  "second_pin_works": true,
  "pinned_go_first": true,
  "url_hash_persists": true,
  "reload_preserves": true,
  "unpin_works": true,
  "js_errors": [],
  "VERDICT": "WIRED"
}

Scénario testé:

  1. Initial: 69 tiles, 0 pinned, first = acquired-dashboard.html (alphabétique)
  2. Pin ethica: first = ethica, hash = #pins=ethica-dashboard-live.html
  3. Pin crm: first 2 = [crm, ethica], hash = #pins=ethica-...,crm-...
  4. Reload → pins preserved (hash stable)
  5. Unpin ethica: only crm pinned, hash updated

Artefacts

  • /var/www/html/api/blade-tasks/v123-pins-proof/01-initial.png
  • /var/www/html/api/blade-tasks/v123-pins-proof/02-pinned-ethica.png
  • /var/www/html/api/blade-tasks/v123-pins-proof/03-pinned-two.png
  • /var/www/html/api/blade-tasks/v123-pins-proof/04-after-reload.png
  • .../proof.json

GOLD backup

  • /opt/wevads/vault/all-ia-hub.html.GOLD-V123-pre-favorites

Métriques V122 → V123

V122 V123
Hub size 43.4KB 45.3KB (+1.9KB)
Features sticky/hover/fadeIn + 69 pin buttons
Persistent state none URL hash shareable
JS errors 0 0

Séquence V116→V123 récapitulatif

V Feature
V116 DASHBOARDS tab + 69 tuiles + 12 catégories
V117 HTTP status badges (0 broken)
V118 Intent chat dashboards status
V119 Search + Sort + Counter
V120 Keyboard Cmd+K / Escape
V121 E2E proof keyboard
V122 CSS polish (sticky, hover, fadeIn, focus rings)
V123 Favorites/pinning via URL hash

Doctrines

#1 scan · #3 GOLD · #4 honnêteté (E2E prouvé) · #13 cause racine · #14 ADDITIF PUR · #16 NR · #60 UX premium (gold hover, URL share) · #100

Sessions consécutives sans régression applicative : 95+