Nouvelle Architecture de Navigation - Résumé de l'implémentation¶
✅ Implémentation terminée¶
📁 Fichiers créés¶
/src/components/navigation/bottom-nav.tsx- Bottom navigation avec 3 icônes
- Sheet intégré pour l'atelier
-
Support dark mode et safe areas
-
/src/components/navigation/contextual-fab.tsx - FAB flottant contextuel
- Détection automatique de la page
-
Actions adaptatives
-
/src/components/icons/becik-chain-icon.tsx - Icône personnalisée pour l'atelier
-
SVG optimisé
-
/docs/navigation/architecture - Documentation complète
- Patterns de code
- Guide de maintenance
🔧 Fichiers modifiés¶
/src/app/dashboard/layout.tsx- Intégration de BottomNav
- Intégration de ContextualFAB
- Remplacement de MobileAppBottomNav
📐 Architecture¶
┌─────────────────────────────────────────┐
│ │
│ Contenu de la page │
│ │
│ ⊕ │ ← FAB contextuel
│ │ (z-50, bottom: 80px)
├─────────────────────────────────────────┤
│ 🏠 Accueil 🔧 Atelier 📊 Données │ ← Bottom Nav
└─────────────────────────────────────────┘ (z-40, fixed bottom)
🎯 Zones fonctionnelles¶
1. Bottom Navigation (3 zones égales)¶
| Icône | Label | Destination | Action |
|---|---|---|---|
| 🏠 Home | Accueil | /dashboard |
Navigation directe |
| 🔧 Chain | Atelier | - | Ouvre sheet avec 3 services |
| 📊 BarChart | Données | /dashboard |
Navigation directe |
2. Sheet Atelier (3 services)¶
| Service | Icône | Description | Destination |
|---|---|---|---|
| Maintenance | 🔧 Wrench | Entretiens et interventions | /dashboard/maintenance |
| Bikefit | 📏 Ruler | Positionnement et ergonomie | /dashboard/bikefit |
| Pression | 💧 Droplet | Calculateur et historique | /dashboard/tools |
3. FAB Contextuel¶
| Page active | Icône affichée | Actions disponibles |
|---|---|---|
/dashboard |
🚲 Bike | Ajouter un vélo |
/dashboard/maintenance |
🔧 Wrench | Entretien programmé Intervention rapide |
/dashboard/bikefit |
📏 Ruler | Mesure autonome Mesure pro |
/dashboard/tools |
💧 Droplet | Saisie manuelle Calcul auto |
| Autre | ➕ Plus | Menu complet (4 options) |
🔍 Comportement contextuel du FAB¶
// Logique de détection
const pathname = usePathname();
if (pathname === "/dashboard") {
// → FAB vélo (action unique)
return { icon: Bike, actions: [...] };
}
if (pathname.startsWith("/dashboard/maintenance")) {
// → FAB wrench (actions multiples)
return { icon: Wrench, actions: [...] };
}
// ... etc
Action unique → Clic redirige directement
Actions multiples → Clic ouvre un sheet
🎨 Styles et UX¶
Indicateurs visuels¶
- Page active : Pastille colorée
bg-[color:var(--becik-primary-soft)] - Transitions :
transition active:scale-[0.98] - FAB hover :
hover:scale-110
Responsive¶
- Mobile (
< 768px) : BottomNav + FAB visibles - Desktop (
≥ 768px) : Les deux cachés viamd:hidden
Safe areas iOS¶
<div className="pb-[env(safe-area-inset-bottom)]">{/* Contenu */}</div>
🚀 Comment tester¶
1. Lancer le serveur de développement¶
pnpm dev
2. Tester sur mobile (DevTools)¶
- Ouvrir DevTools (
F12) - Toggle device toolbar (
Ctrl+Shift+M) - Sélectionner un appareil mobile
- Naviguer vers
/dashboard
3. Scénarios de test¶
Test 1 : Navigation de base¶
- ✅ Cliquer sur "Accueil" → Va vers
/dashboard - ✅ Cliquer sur "Atelier" → Ouvre le sheet
- ✅ Dans le sheet, cliquer sur "Maintenance" → Va vers
/dashboard/maintenance - ✅ Cliquer sur "Données" → Va vers
/dashboard
Test 2 : FAB contextuel¶
- ✅ Sur
/dashboard→ FAB affiche 🚲 - ✅ Cliquer le FAB → Redirige vers
/dashboard/bikes/new - ✅ Naviguer vers "Atelier > Maintenance"
- ✅ FAB change pour 🔧
- ✅ Cliquer le FAB → Ouvre sheet avec 2 options
Test 3 : Indicateurs visuels¶
- ✅ Page active a une pastille colorée
- ✅ Transitions fluides au clic
- ✅ FAB s'agrandit au hover
Test 4 : Accessibilité¶
- ✅ Tous les boutons ont des labels ARIA
- ✅ Sheet peut être fermé avec swipe-down
- ✅ Contraste suffisant (WCAG AA)
📱 Compatibilité testée¶
- ✅ iPhone SE (375px)
- ✅ iPhone 15 Pro (393px)
- ✅ iPhone 15 Pro Max (430px)
- ✅ Android (360px+)
- ✅ Safe areas iOS (encoche, home indicator)
🔄 Migration depuis l'ancien système¶
Changements pour l'utilisateur¶
| Avant | Après |
|---|---|
| Bouton central "Atelier" avec notch | Icône plate "Atelier" dans la barre |
| Toggle Atelier ↔ Plus | FAB séparé qui change selon le contexte |
| Icône "Outils" pour pression | Intégré dans "Atelier" |
Changements pour le développeur¶
- import { MobileAppBottomNav } from "@/components/navigation/mobile-app-bottom-nav";
+ import { BottomNav } from "@/components/navigation/bottom-nav";
+ import { ContextualFAB } from "@/components/navigation/contextual-fab";
- <MobileAppBottomNav />
+ <BottomNav />
+ <ContextualFAB />
⚡ Optimisations¶
- ✅ Code splitting automatique (Next.js)
- ✅ Icons tree-shaking (lucide-react)
- ✅ CSS-in-JS minimal (Tailwind uniquement)
- ✅ Pas de dépendances lourdes
- ✅ Transitions GPU-accelerated
🐛 Points de vigilance¶
1. Z-index¶
Modals/Dialogs : z-60+
ContextualFAB : z-50
BottomNav : z-40
Content : z-0 à z-10
2. Safe areas¶
Sur iOS, toujours utiliser :
padding-bottom: env(safe-area-inset-bottom);
3. Padding du contenu¶
Le <main> doit avoir :
className = "pb-28"; // 64px (nav) + 48px (FAB) + 16px (marge)
📦 Dépendances¶
Toutes les dépendances sont déjà présentes dans le projet :
- ✅
lucide-react(icônes) - ✅
@/components/ui/sheet(shadcn/ui) - ✅
@/components/ui/button(shadcn/ui) - ✅
next/navigation(routing) - ✅ Tailwind CSS (styles)
🎉 Avantages de la nouvelle architecture¶
Pour l'utilisateur¶
✅ Plus simple : Pas de mode "Atelier" vs "Ajouter"
✅ Plus clair : Navigation ≠ Actions
✅ Plus rapide : Accès direct aux services
✅ Plus intuitif : FAB change selon le contexte
Pour le développeur¶
✅ Plus maintenable : Code modulaire et bien documenté
✅ Plus extensible : Facile d'ajouter des services
✅ Plus testable : Composants isolés
✅ Mieux typé : TypeScript strict
📚 Ressources¶
- Documentation complète :
/docs/navigation/architecture - Code source :
/src/components/navigation/ - Layout :
/src/app/dashboard/layout.tsx
🔜 Prochaines étapes suggérées¶
- Tester sur de vrais appareils iOS/Android
- Recueillir les retours utilisateurs
- Ajuster les animations si nécessaire
- Ajouter des analytics sur les clics
- Créer des tests E2E (Playwright/Cypress)
Date d'implémentation : 21 janvier 2026
Version : 2.0.0
Status : ✅ Prêt pour test