Skip to main content

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)

Problèmes :
  • 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

Avantages :
  • ✅ 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

Pourquoi ?
  • É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)
Exemples :

❌ Features si :

  • Spécifique à 1 seule feature
  • Contient de la logique métier
  • Dépend du domaine (ex: ToolCard avec prix, catégorie)
Exemples :

Migration vers feature-based

Si vous avez du code organisé par type, voici comment migrer :
1

Identifier les features

Listez vos domaines métier :
  • Tools (outils)
  • Workflows (parcours)
  • Tool Packs (collections)
  • Quiz (diagnostic)
2

Créer la structure

3

Déplacer le code feature par feature

Commencez par la plus petite feature :
4

Fixer les imports

5

Tester

Vérifiez que tout fonctionne :

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
Après (feature-based) :
  • Tout dans src/features/tools/ → 1 seul dossier à ouvrir

2. Suppression safe

Besoin de retirer la feature Quiz ?
Avec organisation par type :
  • 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
Feature-based :
  • Dev A dans src/features/tools/
  • Dev B dans src/features/workflows/
  • Zéro conflit

4. Tests colocalisés

Tests à côté du code testé = facile à maintenir.

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) :
Pourquoi ?
  • L’API peut être utilisée par plusieurs features
  • Facilite les tests (mock de l’API layer)
  • Abstraction Nhost/GraphQL centralisée

API Layer en détail

Documentation complète

4. Pages dans /pages (routes)

Les composants de route restent dans /pages :
Routing simple :

Exemples du projet

Feature Tools

Complexité : Moyenne (modal avec form + preview)

Feature Quiz

Complexité : Élevée (admin + public + logique conditionnelle)

Feature Tool Packs

Complexité : Simple (CRUD basique)

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

Ressources

Architecture globale

Vue d’ensemble du projet

API Layer

Abstraction Nhost/GraphQL

Patterns

Modals, forms, hooks

Conventions

Standards de code