Component Inventory — Backend
33 fichiers .tsx dans app/src/components/ (hors app/). Composants UI partagés
entre les écrans admin / superadmin / vitrines / landing.
Vue d'ensemble
app/src/components/
├── admin/ # AdminShell + sub-components admin gérant
│ ├── admin-shell.tsx # Layout principal : sidebar + topbar + bottom-nav mobile + dark mode
│ ├── admin-sidebar.tsx # Nav latérale rétractable, dark mode scopé `.admin-dark`
│ ├── admin-topbar.tsx # Topbar + Cmd+K + notifs + theme toggle
│ ├── admin-mobile-drawer.tsx # Drawer hamburger mobile (remplace bottom-nav après `1aeba53`)
│ ├── admin-nav-items.ts # Items de nav (data)
│ ├── admin-global-provider.tsx # Contexte global admin (toasts, dialogs)
│ ├── command-palette.tsx # Cmd+K palette (tenants/users/codes/produits)
│ ├── notif-bell.tsx # Centre notifs + polling 30s + toasts
│ ├── onboarding-checklist.tsx # Checklist post-onboarding gérant
│ ├── theme-toggle.tsx # Light/dark
│ ├── toast-container.tsx # Toasts globaux
│ └── dashboard/ # Cards dashboard admin
│ ├── kpi-card.tsx
│ ├── sparkline.tsx # SVG inline (cf. mobile DEC-189)
│ ├── top-produits.tsx
│ ├── dernieres-commandes.tsx
│ └── alerts.tsx
│
├── vitrine/ # Renderer vitrine publique
│ ├── vitrine-page.tsx # Renderer principal (snapshots → React tree, guards hasBuilderXXX)
│ ├── vitrine-builder-renderer.tsx # Variante builder preview
│ ├── navbar-renderer.tsx
│ ├── footer-renderer.tsx
│ ├── auth-client.tsx # Composant auth embed
│ ├── badge-panier.tsx
│ └── preview-bar.tsx # Bandeau preview live mode
│
├── recherche/ # Composants recherche marketplace
├── superadmin/ # Composants SA spécifiques
└── landing/ # Composants page d'accueil marketplaceComponents inline (dans src/app/...)
Beaucoup de composants sont co-localisés avec leurs routes — pattern Next.js App Router. Exemples notables :
src/app/admin/vitrine/builder/components/
├── builder-shell.tsx # Layout builder (sidebar gauche + canvas + panels droite)
├── builder-canvas.tsx # Zone de drop @dnd-kit
├── builder-header.tsx # Header avec Publish + Preview + isDirty indicator
├── builder-sidebar.tsx # Library de sections/blocs
└── builder-panels.tsx # Panels propriétés à droite
src/app/admin/vitrine/builder/hooks/
├── use-builder-store.ts # Zustand store builder
└── use-vitrine-sync.ts # Autosave + isDirty (fast-deep-equal)
src/app/admin/login/components/ # Wizard onboarding 7 étapes
src/app/admin/setup/components/
src/app/admin/parametres/sections/ # Sections Réglages 4 tabs WP-232
src/app/admin/services/components/ # Refonte Shopify-like fc92358
src/app/superadmin/*/components/ # Tables, filtres, dialogs SADesign system (admin)
- Tailwind 4 utility-first via PostCSS plugin
- Dark mode scopé :
.admin-dark(sidebar Saga A→D) +dark mode partagécôté superadmin - Topbar shell : sidebar pinnable (AdminPrefs), Cmd+K, notif-bell polling, theme toggle
- Mobile responsive : drawer hamburger (16 pages rendues responsive Saga Mobile 1→4)
- AdminShell unique pour admin + superadmin (variant shell bleu nuit
#1e3a8acôté SA)
Routing UI
- Pages admin :
src/app/admin/<feature>/page.tsx(16 features) - Pages superadmin :
src/app/superadmin/<feature>/page.tsx(6 features) - Vitrines tenants :
src/app/[slug]/<page>/page.tsx(catch-all subdomain) - Marketplace :
src/app/page.tsx+src/app/landing/
Conventions code
- Server Components par défaut.
"use client"uniquement quand nécessaire (état local, effets, dnd, ...). - Pas de docstrings multi-lignes (CLAUDE.md).
- Pas de comments sauf WHY non-évident.
- Imports :
@/alias verssrc/.
Hooks personnalisés notables
src/app/admin/vitrine/builder/hooks/use-builder-store.ts # Zustand store unique builder
src/app/admin/vitrine/builder/hooks/use-vitrine-sync.ts # Autosave debounced + isDirty
src/lib/auth/session.ts # getSessionFromRequest (utilisé dans toutes les routes)
src/lib/acces-vitrine.ts # filtreTenantsAccessibles + verifierAccesTenant
src/lib/canaux.ts # CANAL_META source de vérité types canaux
src/lib/restaurant.ts # ConfigRestaurant defaults + transitions statutTests
Tests composants admin = à 0% en CI. Tests lib/ (8 unitaires post-P0 hardening).