pro/av platform/decisions
Decisions — av-platform
ADR légers · ordre antéchronologique Liens : Architecture · Journal
ADR-004 — WYSIWYG via react-grid-layout (2026)
Décision : Éditeur WYSIWYG — react-grid-layout pour positionnement + panneau de style custom.
Alternatives écartées : drag-libre (trop complexe), liste ordonnée (pas de positionnement visuel).
Conséquence : layoutMode: "grid" sur les rooms ; types ControlLayout + ControlStyle dans packages/types.
ADR-003 — Thèmes CSS globaux via data-theme (2026)
Décision : 8 thèmes (midnight, graphite, slate, pearl, ocean, jade, amber, ruby) sur <html> via data-theme. Persistance localStorage.
Alternatives écartées : thème par composant (fragmenté), CSS-in-JS (overhead).
Conséquence : room.theme = source de vérité. Pas de sélecteur user. Radix UI : style={{}} inline obligatoire sur Track/Range/Thumb — jamais className seul.
ADR-002 — Auth Entra ID (MSAL) + RBAC 4 rôles (2026)
Décision : Auth Microsoft Entra ID, 4 rôles — av.admin, av.technician, av.staff, av.kiosk.
Alternatives écartées : auth locale (pas adapté entreprise), rôles binaires.
Conséquence : JWT validé backend (jwks-rsa, cache 1h), RoleGuard frontend, token MSAL dans handshake.auth.token Socket.IO.
ADR-001 — Monorepo npm workspaces + Turborepo (2026)
Décision : Monorepo — apps/frontend, apps/backend, packages/types, packages/qsys-client.
Alternatives écartées : repos séparés (sync types difficile), nx (config overhead).
Conséquence : types TypeScript partagés sans dépendances runtime, builds parallèles Turborepo.