Philosophie
Kit’Asso utilise une architecture feature-based : le code est organisé par domaine métier (outils, workflows, quiz) plutôt que par type technique (components, hooks, services).❌ Organisation traditionnelle (par type)
- Fichiers dispersés dans 5+ dossiers
- Difficile de trouver le code lié à une feature
- Couplage fort entre features
- Suppression risquée d’une feature
✅ Organisation feature-based
- ✅ Isolation complète par feature
- ✅ Facile à naviguer (tout dans un dossier)
- ✅ Suppression safe d’une feature
- ✅ Travail en équipe facilité
- ✅ Tests colocalisés
Structure d’une feature
Chaque feature suit la même organisation :Exemple concret : Feature Tools
Container (index.tsx)
Hook métier (useToolModal.ts)
Barrel export (index.ts)
Règles de dépendances
✅ Autorisé
❌ Interdit
- Évite le couplage entre features
- Permet la suppression safe
- Force à identifier le code vraiment partagé
Shared vs Features
Quand mettre dans /shared ?
✅ Shared si :
- Utilisé par 3+ features différentes
- Générique et sans logique métier
- Composant UI de base (Button, Input, Modal)
- Hook utilitaire (useDebounce, useLocalStorage)
- Fonction helper (formatDate, sanitizeInput)
❌ Features si :
- Spécifique à 1 seule feature
- Contient de la logique métier
- Dépend du domaine (ex: ToolCard avec prix, catégorie)
Migration vers feature-based
Si vous avez du code organisé par type, voici comment migrer :Identifier les features
Listez vos domaines métier :
- Tools (outils)
- Workflows (parcours)
- Tool Packs (collections)
- Quiz (diagnostic)
Avantages concrets
1. Navigation simplifiée
Avant (par type) :- Chercher ToolCard →
src/components/ToolCard.tsx - Chercher ToolModal →
src/components/ToolModal.tsx - Chercher useTools →
src/hooks/useTools.ts - Chercher toolsApi →
src/services/toolsService.ts
- Tout dans
src/features/tools/→ 1 seul dossier à ouvrir
2. Suppression safe
Besoin de retirer la feature Quiz ?- Chercher manuellement tous les fichiers liés au quiz
- Risque d’oublier des fichiers
- Imports cassés partout
3. Travail en équipe
Organisation par type :- Dev A travaille sur Tools → modifie
src/components/ - Dev B travaille sur Workflows → modifie aussi
src/components/ - Conflits Git fréquents
- Dev A dans
src/features/tools/ - Dev B dans
src/features/workflows/ - Zéro conflit
4. Tests colocalisés
Bonnes pratiques
1. Exports publics explicites
2. Types partagés dans /types
Les types utilisés par plusieurs features vont dans/types :
3. API Layer séparé
L’accès aux données reste dans/api (pas dans les features) :
- L’API peut être utilisée par plusieurs features
- Facilite les tests (mock de l’API layer)
- Abstraction Supabase centralisée
API Layer en détail
Documentation complète
4. Pages dans /pages (routes)
Les composants de route restent dans/pages :
Exemples du projet
Feature Tools
Feature Quiz
Feature Tool Packs
Checklist feature-based
Avant de créer une nouvelle feature :- Nom clair et métier (pas technique)
- Structure complète créée (components, hooks, modals, types)
- Barrel export (
index.ts) configuré - Aucune dépendance vers d’autres features
- Tests colocalisés dans
__tests__/ - Documentation dans cette doc Mintlify
