Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.snakysec.com/llms.txt

Use this file to discover all available pages before exploring further.

UX Audit — Cartographie complète SaaS SnakySec MSSP

Phase 1 — Inventaire exhaustif des pages, routes et points d’entrée Stack : Next.js 16 App Router · React 19 · shadcn/ui · next-intl (FR/EN) Champs analysés : platform/src/app/**/page.tsx + platform/src/app/**/layout.tsx + platform/src/components/**

Vue d’ensemble — chiffres clés

ZonePagesLayoutsSidebars
Dashboard MSSP_ADMIN301 (/dashboard/layout.tsx)Sidebar (5 entrées + Documents collapsible + Settings)
Portal client61 (/portal/layout.tsx)PortalSidebar (5 entrées)
DR Runbook (sous-section dashboard)21 (/dashboard/help/dr/layout.tsx)DrDocsSidebar (sections dynamiques)
Auth & Root21 (root)
Total pages4043

Arbre de navigation — vue hiérarchique

/                                         → redirect /dashboard
/login                                    → auth Entra SSO (multi-tenant ou platform fallback)

├── /dashboard                            ★ MSSP_ADMIN home
│   ├── /clients
│   │   ├── /new                          (wizard entry — créer client)
│   │   └── /[id]
│   │       ├── /                         (overview client + tabs Overview/History/Findings)
│   │       ├── /edit                     (formulaire client complet)
│   │       ├── /onboarding               → redirect step
│   │       │   └── /[step]               (wizard 8 étapes — Identity/Preflight/Credentials/Test/Scope/Schedule/Users/Done)
│   │       ├── /secrets                  (Vault secrets management)
│   │       ├── /findings                 (table éditable des findings)
│   │       ├── /remediation              (workspace DnD findings + actions + deadlines + milestones)
│   │       ├── /remediation-plan        (vue exécutive plan + roadmap 6 mois)
│   │       ├── /trajectory               (12 mois CMMI + score trends)
│   │       ├── /documents                (hub conformité 4 docs PDF)
│   │       └── /controls/[controlId]    (détail contrôle + mappings + history)
│   │
│   ├── /audits
│   │   └── /[id]
│   │       ├── /                         (audit detail + control table + reports panel)
│   │       └── /diff?vs=<id>             (diff N vs N-1 par contrôle)
│   │
│   ├── /alerts                           (feed + mark as read)
│   │
│   ├── /integrations                     (CISO Assistant connection test)
│   │
│   ├── /documents                        (hub catalog)
│   │   ├── /governance                   (PSSI, charte IT, risk policy, BCP)
│   │   ├── /access                       (IAM, password, PAM, on/offboarding)
│   │   ├── /incidents                    (incident proc, breach notif, CSIRT, post-mortem)
│   │   ├── /monitoring                   (rapports d'audit PDF/Excel/HTML, KPI)
│   │   ├── /onboarding                   (DPA, prerequisites, pricing, NDA)
│   │   ├── /technical                    (classification, control coverage, backup, patch)
│   │   └── /compliance                   (RGPD, NIS2, ISO 27001, DPIA — roadmap only)
│   │
│   ├── /settings                         (hub liens)
│   │   ├── /users                        (table utilisateurs + role select inline)
│   │   │   └── /[id]/permissions         (matrice grants par permission)
│   │   ├── /roles                        (CRUD rôles custom + matrice 60 perms)
│   │   ├── /access-review                (campagnes de revue d'accès)
│   │   ├── /api-keys                     (CRUD clés API)
│   │   ├── /audit-log                    (logs + intégrité Ed25519 + anchors)
│   │   └── /notifications                (préférences emails utilisateur)
│   │
│   └── /help/dr                          (DR Runbook — INTERNAL_DOCS_VIEW only)
│       └── /[...slug]                    (markdown viewer dynamique)

└── /portal                               ★ Client portal (CLIENT_USER + impersonate)
    ├── /                                 (overview + KPI + recent audits)
    ├── /audits
    │   └── /[id]                         (détail audit lecture seule)
    ├── /findings                         (lecture seule)
    ├── /remediation                      (vue plan client + downloads PDF)
    └── /documents                        (hub conformité 4 docs côté client)

Section 1 — Dashboard MSSP_ADMIN

Layout commun

platform/src/app/dashboard/layout.tsx
  • <SessionGuard> — invalide la session JWT si refresh Entra échoue
  • <TamperingBanner> — bandeau rouge si chaîne audit log compromise
  • <Sidebar> (cf. components/sidebar.tsx) : 5 entrées top + Documents collapsible (7 sous-items) + Settings + Sign Out
  • <Header> (cf. components/header.tsx) : Sheet mobile, titre, <LanguageSwitcher>, cloche notifications → /dashboard/alerts, dropdown user (Settings + Sign Out)
Clé i18nRouteIcône
nav.dashboard (Tableau de bord)/dashboardLayoutDashboard
nav.clients (Clients)/dashboard/clientsBuilding2
nav.audits (Audits)/dashboard/auditsShield
nav.alerts (Alertes)/dashboard/alertsAlertTriangle
nav.integrations (Intégrations)/dashboard/integrationsBlocks
nav.documents (Documents) — collapsible/dashboard/documentsFolderOpen
common.settings (Paramètres)/dashboard/settingsSettings
Clé i18nRouteBadge
nav.documentsOverview/dashboard/documents
nav.governance/dashboard/documents/governance
nav.access/dashboard/documents/access
nav.incidents/dashboard/documents/incidents
nav.monitoring/dashboard/documents/monitoring
nav.onboarding/dashboard/documents/onboarding
nav.technical/dashboard/documents/technical
nav.compliance/dashboard/documents/complianceroadmap (amber)

/dashboard

  • Page : Tableau de bord global MSSP
  • Composants nav : Sidebar, Header
  • Filtres : <DashboardFilters> (client picker + period 7d/30d/90d) — labels EN
  • Actions :
    • 8 KPI cards (clients actifs, score moyen, alertes, audits récents, total findings, open, in progress, remediated)
    • Tabs <DashboardTabs> Overview / Analytics
    • Cards “Recent Alerts” → lien viewAll /dashboard/alerts
    • Cards “Recent Audits” → lien viewAll /dashboard/audits
    • Charts : ComplianceTrend, StatusDistribution, SeverityBreakdown, ProductAreaRadar, ClientComparison
  • Points d’entrée : sidebar “Tableau de bord” (default after login), / redirect, breadcrumbs

/dashboard/clients

  • Page : Liste des clients (cards grid)
  • Composants nav : Sidebar, Header
  • Actions :
    • Bouton header addClient/dashboard/clients/new
    • Card client cliquable → /dashboard/clients/[id] ou /dashboard/clients/[id]/onboarding (si onboardingStatus !== COMPLETED)
    • <ImpersonateClientButton> (“Voir comme ce client”) → POST /api/portal/impersonate puis push /portal
  • Points d’entrée : sidebar “Clients”, breadcrumbs, action depuis dashboard cards

/dashboard/clients/new

  • Page : Création initiale client (form minimal name/slug/domain/tenantId)
  • Composants nav : back arrow → /dashboard/clients, PAS de breadcrumb
  • Actions :
    • POST /api/v1/clients puis PATCH (domain) puis push /dashboard/clients/[id]/onboarding/1
  • Points d’entrée : Bouton “Add client” sur /dashboard/clients, lien dans /dashboard/documents empty state

/dashboard/clients/[id]

  • Page : Vue d’ensemble client (Overview / Audit history / Findings tabs)
  • Composants nav : Breadcrumb (Tableau de bord > Clients > nom), back arrow
  • Actions header (8 boutons sur la même ligne) :
    1. <Button asChild> Edit → /dashboard/clients/[id]/edit
    2. Credentials → /dashboard/clients/[id]/secrets
    3. Findings → /dashboard/clients/[id]/findings
    4. Remediation → /dashboard/clients/[id]/remediation
    5. <GuideFilterDialog variant="dashboard"> — Guide PDF filter dialog
    6. Trajectory → /dashboard/clients/[id]/trajectory
    7. CISO Assistant (conditional) → external URL
    8. <TriggerAuditButton> → modal launch audit (framework + product areas)
  • Banners : onboarding incomplete (resume button), active audit (loading link → /dashboard/audits/[id])
  • Tabs : Overview / History / Findings
  • Tab Overview : feature badges, CISO sub-card, Configuration sub-card
  • Tab History : table audits → liens /dashboard/audits/[id] + <AuditActions variant="dropdown"> per row
  • Tab Findings : list inline (severity + control + status badges)
  • Points d’entrée : card sur /dashboard/clients, breadcrumbs depuis sous-routes, table Recent Audits du dashboard

/dashboard/clients/[id]/edit

  • Page : Formulaire complet édition client (general/features/CISO/cron/retention)
  • Composants nav : Breadcrumb 4 niveaux + back arrow
  • Actions : PUT /api/v1/clients/[id], “Cancel” → router.back()
  • Labels : Mix EN/FR (Form labels EN, descriptions FR)
  • Points d’entrée : bouton Edit sur /dashboard/clients/[id]

/dashboard/clients/[id]/onboarding

  • Page : Resume route — redirect serveur uniquement vers /onboarding/[step]
  • Pas d’UI

/dashboard/clients/[id]/onboarding/[step]

  • Page : Wizard 8 étapes
  • Composants nav : <OnboardingShell> avec stepper sidebar (260px) à gauche, contenu à droite
  • Étapes :
    1. Identity (<IdentityStep>)
    2. Preflight (<PreflightStep>)
    3. Credentials (<CredentialsStep>)
    4. Test Connection (<TestConnectionStep>)
    5. Scope (<ScopeStep>)
    6. Schedule (<ScheduleStep>)
    7. Users (<UsersStep>)
    8. Done (<DoneStep>)
  • Garde-fous : redirect /dashboard/clients/[id] si COMPLETED, redirect au max-step atteignable si jump avant
  • Points d’entrée : POST /api/v1/clients redirect après création, banner sur client overview, card sur /dashboard/clients (onboarding badge)

/dashboard/clients/[id]/secrets

  • Page : Gestion secrets Vault par client
  • Composants nav : Breadcrumb 4 niveaux + back arrow
  • Actions : Dialog Add Secret (predefined keys CLIENT_ID/TENANT_ID + free input), Trash icon delete with confirm()
  • Points d’entrée : bouton “Credentials” sur /dashboard/clients/[id]

/dashboard/clients/[id]/findings

  • Page : Table éditable findings (status + assignee + due date)
  • Composants nav : Breadcrumb 4 niveaux + back arrow
  • Actions : Status filter tabs (5 buttons), inline Select status, Input assignee onBlur, Input date onChange — toutes appellent PATCH /api/v1/clients/[id]/findings
  • Points d’entrée : bouton “Findings” sur /dashboard/clients/[id], lien depuis tab Findings du client overview (implicite)

/dashboard/clients/[id]/remediation

  • Page : Workspace DnD complet remédiation (findings/actions/deadlines/milestones)
  • Composants nav : Breadcrumb 4 niveaux + back arrow
  • Composant principal : <RemediationWorkspace> avec dnd-kit, Tabs Findings/Milestones/Deadlines, dialogs pour création
  • Points d’entrée : bouton “Remediation” sur /dashboard/clients/[id]

/dashboard/clients/[id]/remediation-plan

  • Page : Vue plan exécutif (read-only) — pas le workspace
  • Composants nav : Breadcrumb 4 niveaux + back arrow
  • Actions : Bouton “Download PDF” → /api/v1/clients/[id]/documents/remediation-plan
  • Composant principal : <RemediationPlanView> (phases, timeline, milestones, gradient hero)
  • Points d’entrée : Lien “Voir tout (X findings)” depuis /dashboard/clients/[id]/documents. Pas de bouton header sur /dashboard/clients/[id] — accessible uniquement via le hub documents client.

/dashboard/clients/[id]/trajectory

  • Page : Dashboard CMMI 12 mois (score trends, fundamentals, comparisons)
  • Composants nav : Breadcrumb 4 niveaux + back arrow
  • Composant principal : <TrajectoryDashboard>
  • Points d’entrée : bouton “Trajectory” sur /dashboard/clients/[id]

/dashboard/clients/[id]/documents

  • Page : Hub conformité client (posture stats + 4 cartes documents PSSI/Access/Incident/Remediation)
  • Composants nav : Breadcrumb 4 niveaux + back arrow
  • Actions :
    • 4 cards <GrcDocumentCards> avec bouton “Télécharger PDF” par doc → /api/v1/clients/[id]/documents/[type]
    • Lien “Voir tout (N findings)” → /dashboard/clients/[id]/remediation-plan
    • Lien “Lancer un audit” (dans empty state) → /dashboard/clients/[id]
  • Points d’entrée : Aucun lien direct dans la sidebar ou le client overview header. Accessible uniquement via breadcrumb manuel ou navigation profonde.

/dashboard/clients/[id]/controls/[controlId]

  • Page : Détail contrôle individuel (description, remediation, mappings réglementaires, DICT, history)
  • Composants nav : Breadcrumb 4 niveaux + back arrow → /dashboard/clients/[id]
  • Actions : Liens externes vers /dashboard/audits/[id] pour chaque évaluation history
  • Auth : Permission.AUDIT_VIEW scoped au client
  • Points d’entrée : Cellule controlId clickable dans <ControlResultsTable> (audit detail + portal audit detail). Pas de chemin direct depuis la sidebar.

/dashboard/audits

  • Page : Liste paginée audits (table)
  • Composants nav : Sidebar, Header
  • Filtres : <AuditFilters> (status + client) — labels EN uniquement (All statuses, Pending, Running, etc.)
  • Actions :
    • Cellule client → /dashboard/clients/[id]
    • Cellule date → /dashboard/audits/[id]
    • <AuditActions variant="dropdown"> per row (cancel/retry/sync/pipeline/PDF/Excel/HTML/delete)
    • Pagination Previous/Next
  • Points d’entrée : sidebar “Audits”, “viewAll” depuis dashboard, breadcrumbs

/dashboard/audits/[id]

  • Page : Détail run audit
  • Composants nav : Breadcrumb 3 niveaux + back arrow → /dashboard/audits
  • Actions header :
    • <AuditActions variant="buttons"> (cancel/retry/sync/pipeline/PDF/Excel/HTML/delete) — série de boutons individuels
    • <CompareSelector>/dashboard/audits/[id]/diff?vs=<other>
  • Composants :
    • 7 summary cards (passed/failed/manual/N-A/not_assessed/no_perm/error)
    • <AuditLiveMonitor> (SSE) si status actif
    • <DictRadar> chart
    • <AuditReportsPanel> (tracking + certification Ed25519)
    • <CisoSyncButton> si CISO enabled
    • <ControlResultsTable> (TanStack table 50 rows/page) avec expand row + Review form
  • Points d’entrée : table audits, recent audits dashboard, lien depuis client history tab, lien depuis control detail history

/dashboard/audits/[id]/diff

  • Page : Diff audit N vs N-1
  • Composants nav : Breadcrumb 4 niveaux + back arrow → /dashboard/audits/[id]
  • Actions : <AuditDiffControlSheet> per row (Sheet detail)
  • Sections : Régressions / Améliorations / Evidence-only / Status changes / Added / Removed
  • Points d’entrée : <CompareSelector> sur audit detail (uniquement)

/dashboard/alerts

  • Page : Feed alertes (50 récentes)
  • Composants nav : Sidebar, Header
  • Actions : <AlertFeed> mark as read inline
  • Points d’entrée : sidebar “Alertes”, icône cloche dans header, lien viewAll dashboard, action “lien client”

/dashboard/integrations

  • Page : Test connexion CISO Assistant
  • Composants nav : Sidebar, Header
  • Actions : testConnection, “Open” external link, “Retry” button
  • Card placeholder “More integrations coming soon”
  • Points d’entrée : sidebar “Intégrations”

/dashboard/documents

  • Page : Hub catalog 7 catégories
  • Composants nav : Sidebar, Header
  • Actions : Card par catégorie → /dashboard/documents/[category]. Empty state si pas de client → lien /dashboard/clients/new
  • Stats bar : Disponibles / Roadmap / Clients actifs / Audits complétés
  • Points d’entrée : sidebar “Documents” (collapsible header)

/dashboard/documents/[category] (governance, access, incidents, monitoring, onboarding, technical, compliance)

  • Page : Catalog par catégorie
  • Composants nav : Sidebar (sous-item actif), <DocumentCategoryPage> interne fournit ses propres breadcrumbs (Documents > Title)
  • Actions : Sélection client → <ReportDownloadButton> ou redirect view
  • Points d’entrée : sidebar Documents collapsed, hub /dashboard/documents

/dashboard/settings

  • Page : Hub settings (cards)
  • Composants nav : Sidebar (Settings actif), Header
  • Cards :
    1. Users → /dashboard/settings/users
    2. Roles → /dashboard/settings/roles
    3. Access Review → /dashboard/settings/access-review
    4. API Keys → /dashboard/settings/api-keys
    5. Audit Log → /dashboard/settings/audit-log
    6. Notifications email (hardcoded FR title hors i18n loop) → /dashboard/settings/notifications
    7. DR Runbook (conditional INTERNAL_DOCS_VIEW, hardcoded FR) → /dashboard/help/dr
  • Points d’entrée : sidebar Settings, header dropdown user, breadcrumbs

/dashboard/settings/users

  • Page : Table utilisateurs avec Select role inline
  • Composants nav : back arrow → /dashboard/settings, PAS de breadcrumb
  • Actions : Select MSSP_ADMIN/ANALYST/CLIENT_USER inline (PATCH /api/v1/users), icon button → /dashboard/settings/users/[id]/permissions
  • Labels : FR hardcoded (pas de i18n)

/dashboard/settings/users/[id]/permissions

  • Page : Matrice grants par groupe de permissions
  • Composants nav : back arrow (déduit du <GrantsContent>)
  • Composant : <GrantsContent> server-fetched user header

/dashboard/settings/roles

  • Page : CRUD rôles custom + matrice 60 perms
  • Composant : <RolesContent>

/dashboard/settings/access-review

  • Page : Campagnes de revue d’accès
  • Composant : <AccessReviewContent>

/dashboard/settings/api-keys

  • Page : CRUD clés API
  • Composants nav : back arrow → /dashboard/settings, PAS de breadcrumb
  • Actions : Dialog Create (name + expiresInDays), Copy newKey, Trash revoke avec confirm()

/dashboard/settings/audit-log

  • Page : Logs (3 tabs Logs/Intégrité/Anchors)
  • Composants nav : back arrow → /dashboard/settings, PAS de breadcrumb
  • Actions : Filtres (action/outcome/severity/actor/resource/from/to), bouton Réinitialiser, 2 boutons CSV (“CSV” et “CSV + before/after”), Load more cursor pagination, click row → <LogDetailSheet>
  • Tabs : Logs / Intégrité (<ChainIntegrityTab>) / Anchors (<AnchorsTab>)

/dashboard/settings/notifications

  • Page : Préférences emails utilisateur
  • Composants nav : Aucun back arrow ni breadcrumb explicite (juste <NotificationsSettingsForm>)
  • Actions : Form 7 toggles (alertScoreDegraded, alertNewCriticalFinding, etc.) — exclut les “Toujours envoyés (security floor)“

/dashboard/help/dr

  • Page : Hub DR Runbook (6 cards section)
  • Layout dédié : <DrDocsLayout> avec <DrDocsSidebar> (sections dynamiques markdown)
  • Composants nav : Sidebar (Sidebar du dashboard), Header — mais SEUL le layout DR ajoute un sub-sidebar gauche DrDocsSidebar, donc on a 2 sidebars empilées
  • Actions : 6 cards (governance/runbooks/incident/compliance/tests/index) + 5 quick links
  • Permission : Permission.INTERNAL_DOCS_VIEW
  • Points d’entrée : Card DR Runbook sur /dashboard/settings

/dashboard/help/dr/[...slug]

  • Page : Viewer markdown DR doc
  • Composants nav : link “Retour à l’index DR” → /dashboard/help/dr, pas de breadcrumb
  • Actions : Affiche bandeau rouge si doc restreint, log audit internal_docs.view
  • Points d’entrée : <DrDocsSidebar> ou cards/quick links sur /dashboard/help/dr

Section 2 — Portal client

Layout commun

platform/src/app/portal/layout.tsx
  • <PortalSidebar> (5 entrées simples — labels EN hardcoded)
  • <Header> (réutilisé du dashboard, détecte pathname.startsWith("/portal") pour portalTitle)
  • <PortalImpersonationBanner> si admin en mode impersonate
Label ENRouteIcône
Overview/portalLayoutDashboard
Audits/portal/auditsShield
Findings/portal/findingsAlertTriangle
Remediation/portal/remediationTarget
Documents/portal/documentsFileText
Footer : “Logout” (hardcoded EN, pas via i18n)

/portal

  • Page : Vue d’ensemble client
  • Mode : 3 modes (client_user / admin_no_selection / impersonate)
  • Mode admin_no_selection : <PortalClientPicker> cards
  • Mode normal : 4 KPI cards + table recent audits avec lien viewAll/portal/audits
  • Points d’entrée : sidebar Overview, redirect après impersonate

/portal/audits

  • Page : Liste audits (50 max, simple table)
  • Composants nav : PortalSidebar
  • Actions : Lien “Voir” → /portal/audits/[id] (uniquement si COMPLETED/PARTIAL_COMPLETE)
  • Points d’entrée : sidebar Audits, viewAll dashboard portal

/portal/audits/[id]

  • Page : Détail audit (lecture seule)
  • Composants nav : PortalSidebar — pas de back arrow ni breadcrumb
  • Actions : <DownloadReportButton>, <DictRadar>, <ControlResultsTable> (lecture seule, canReview=false)
  • Note : Cards summary labels en EN (Passed/Failed/Manual Review/Compliance) hardcoded
  • Points d’entrée : Lien “Voir” depuis /portal/audits

/portal/findings

  • Page : Table findings (lecture seule, 100 max)
  • Composants nav : PortalSidebar
  • Actions : Aucune (read-only)
  • Points d’entrée : sidebar Findings

/portal/remediation

  • Page : Vue remediation client
  • Composants nav : PortalSidebar — pas de breadcrumb
  • Actions :
    • <GuideFilterDialog variant="portal">
    • Bouton “Download milestones PDF” → /api/v1/clients/[id]/documents/milestones-plan
    • Bouton “Download PDF” → /api/v1/clients/[id]/documents/remediation-plan
  • Composant principal : <RemediationPlanView> (même que côté MSSP)
  • Points d’entrée : sidebar Remediation

/portal/documents

  • Page : Hub conformité client (4 cards GRC + posture stats)
  • Composants nav : PortalSidebar — pas de breadcrumb
  • Actions : 4 cards <GrcDocumentCards> (PSSI / Access / Incident / Remediation)
  • Note : Strings hardcoded FR (titre “Documents de conformité”, description, etc.) — pas via i18n
  • Points d’entrée : sidebar Documents

Section 3 — Wizard Onboarding (sous-section dashboard mais flow distinct)

StepComposantDescription
1<IdentityStep>Identity / Slug / Domain / TenantId (peut amender les champs créés à /clients/new)
2<PreflightStep>Vérifications préalables (License, services M365)
3<CredentialsStep>App registration credentials (client ID + cert/secret) — pré-remplit Vault
4<TestConnectionStep>Test Graph + Exchange Online
5<ScopeStep>Toggles featureEntra/Intune/Defender/Purview/Sharepoint/Teams
6<ScheduleStep>Cron expression + timezone + enabled
7<UsersStep>Provisioning des CLIENT_USER + ClientUserAccess
8<DoneStep>Récap + bouton “Lancer premier audit” + redirect overview
Stepper UI (<OnboardingShell>) : sidebar 260px à gauche, contenu droite. Chaque step est cliquable s’il est ≤ maxReachableStep(status), sinon Lock icon affiché. Garde-fous :
  • Si onboarding COMPLETED, redirect vers /dashboard/clients/[id]
  • Si jump avant max-step, redirect au max-step
  • OnboardingResumePage (/onboarding) bare route → redirect au step persistant

Section 4 — Help DR (sous-section dashboard, layout dédié)

Layout DR

platform/src/app/dashboard/help/dr/layout.tsx
  • <DrDocsSidebar> second sidebar latérale (sections dynamiques générées depuis docs/dr/*.md)
  • Permission gate : Permission.INTERNAL_DOCS_VIEW

Pages

  • /dashboard/help/dr — hub avec 6 cartes de section + 5 quick links incident/restore
  • /dashboard/help/dr/[...slug] — viewer markdown sanitizé (DOMPurify) + bandeau diffusion restreinte conditionnel

Section 5 — Auth & Root

/

  • Page : Server-side redirect → /dashboard
  • Pas d’UI

/login

  • Page : Form de login multi-tenant
  • Layout : Hors dashboard/layout.tsx (utilise root layout uniquement)
  • Logique : Résout Client.domain depuis hostname → secrets Vault SSO ou platform fallback
  • Composant : <LoginForm> côté client (button Entra SSO)
  • Sentinel slug : __platform__ pour MSSP admin sans client en DB

Tableau récapitulatif — points d’entrée par page

RouteSidebarBreadcrumbHeader linkCard hubBackref interne
/dashboardOui (Tableau de bord)/ redirect, post-login
/dashboard/clientsOuirecent audits dashboard
/dashboard/clients/newNon (back arrow)bouton “Add”, empty state docs hub
/dashboard/clients/[id]OuiCard sur /dashboard/clientsrecent audits, audits table
/dashboard/clients/[id]/editOuibouton header client
/dashboard/clients/[id]/onboardingredirect post create, banner client overview
/dashboard/clients/[id]/onboarding/[step]— (stepper UI)wizard nav
/dashboard/clients/[id]/secretsOuibouton header client
/dashboard/clients/[id]/findingsOuibouton header client
/dashboard/clients/[id]/remediationOuibouton header client
/dashboard/clients/[id]/remediation-planOuiuniquement lien depuis docs hub client
/dashboard/clients/[id]/trajectoryOuibouton header client
/dashboard/clients/[id]/documentsOuiaucun lien header client, accès oblique
/dashboard/clients/[id]/controls/[controlId]Ouicellule controlId dans tables audit
/dashboard/auditsOuiviewAll dashboard, breadcrumbs
/dashboard/audits/[id]Ouitable audits, recent runs, history tab client
/dashboard/audits/[id]/diffOui<CompareSelector> audit detail
/dashboard/alertsOuiBell iconviewAll dashboard
/dashboard/integrationsOui
/dashboard/documentsOui (collapsible header)Card “DocumentsOverview” sub-navempty state clients
/dashboard/documents/governanceOui (sous-item)(interne page)Card hub docs
/dashboard/documents/accessOui (sous-item)(interne page)Card hub docs
/dashboard/documents/incidentsOui (sous-item)(interne page)Card hub docs
/dashboard/documents/monitoringOui (sous-item)(interne page)Card hub docs
/dashboard/documents/onboardingOui (sous-item)(interne page)Card hub docs
/dashboard/documents/technicalOui (sous-item)(interne page)Card hub docs
/dashboard/documents/complianceOui (sous-item, badge roadmap)(interne page)Card hub docs
/dashboard/settingsOuiHeader dropdown user
/dashboard/settings/usersNon (back arrow)Card sur settings hub
/dashboard/settings/users/[id]/permissions(interne page)icon dans table users
/dashboard/settings/roles(interne page)Card sur settings hub
/dashboard/settings/access-review(interne page)Card sur settings hub
/dashboard/settings/api-keysNon (back arrow)Card sur settings hub
/dashboard/settings/audit-logNon (back arrow)Card sur settings hub
/dashboard/settings/notificationsNon (rien)Card sur settings hub
/dashboard/help/dr— (sidebar DR)Card conditionnelle settings hub
/dashboard/help/dr/[...slug]Lien retour indexDrDocsSidebar
/portalOui Portalredirect impersonate
/portal/auditsOui PortalviewAll portal home
/portal/audits/[id]Nonlien “Voir” portal/audits
/portal/findingsOui Portal
/portal/remediationOui Portal
/portal/documentsOui Portal
/loginredirect not authenticated
/post-deploy bare URL

Routes API ayant une UI dérivée (downloads / actions trigger)

Ces endpoints n’ont pas de page propre mais sont déclenchés depuis les boutons UI :
APIDéclenché depuisUI affectée
POST /api/v1/audits/trigger<TriggerAuditButton> modaltoast + refresh client overview
GET /api/v1/audits/[id]/report{,/excel,/html}<AuditActions> PDF/Excel/HTMLblob download
POST /api/v1/audits/[id]/retry<AuditActions> Retrytoast + refresh
POST /api/v1/audits/[id]/sync<AuditActions> Synctoast + refresh
PATCH /api/v1/audits/[id] (action: cancel)<AuditActions> Canceltoast + refresh
DELETE /api/v1/audits/[id]<AuditActions> Deletetoast + refresh
GET /api/v1/clients/[id]/documents/[type]<GrcDocumentCards> button + <RemediationPlanPage> button + portal /remediation 2 boutonsblob download
GET /api/v1/audit-log?format=csv<AuditLogContent> boutons CSV / CSV+before/afternavigation directe (window.location)
POST /api/portal/impersonate<ImpersonateClientButton> + <PortalClientPicker>redirect /portal
DELETE /api/portal/impersonate<PortalImpersonationBanner> “Quitter”redirect /dashboard
POST /api/v1/api-keysdialog /dashboard/settings/api-keysdisplay new key once

Notes méthodologiques

  • Toutes les routes ci-dessus sont issues de fichiers page.tsx réels sous platform/src/app/.
  • Les permissions et gardes-fous (requirePermission, getPortalClientIds, requireClientAccess) sont mentionnés quand explicites dans le code mais n’altèrent pas l’arbre de navigation.
  • Les composants partagés clés référencés : <Sidebar>, <PortalSidebar>, <Header>, <DrDocsSidebar>, <OnboardingShell>, <AuditActions>, <GrcDocumentCards>, <RemediationPlanView>, <RemediationWorkspace>, <TriggerAuditButton>, <GuideFilterDialog>, <ImpersonateClientButton>, <PortalImpersonationBanner>, <ControlResultsTable>.
  • Les sous-routes documents catégorie utilisent toutes le même <DocumentCategoryPage> factorisé (platform/src/app/dashboard/documents/_components/document-category-page.tsx) — leurs breadcrumbs sont rendus localement à l’intérieur du composant via le pattern “Documents > [Title]” en simple lien (pas un vrai <Breadcrumb> shadcn).