L'objectif est de transformer l'application monolithique actuelle en une plateforme extensible capable de gérer des dizaines de templates isolés et interchangeables.
Nous allons isoler chaque template dans son propre "micro-écosystème" pour garantir que les changements sur l'un n'affectent pas les autres.
src/
├── app/ # Routes Next.js (Marketing, Dashboard, Auth)
├── components/
│ ├── editor/ # Interface de l'éditeur (Panneaux, Inputs)
│ ├── ui/ # Composants atomiques (Boutons, Cards)
│ └── shared/ # Composants de CV partagés (SectionTitle, Badge)
├── templates/ # LE CŒUR DU SYSTÈME
│ ├── registry.ts # Liste de tous les templates disponibles
│ ├── base-styles.css # Styles globaux partagés par les templates
│ └── [template-id]/ # Dossier spécifique à un template (ex: 'modern-dark')
│ ├── index.tsx # Point d'entrée du template
│ ├── components/ # Sous-composants spécifiques à ce template
│ ├── styles.css # Styles dédiés
│ └── config.json # Métadonnées (nom, layout par défaut, icône)
├── context/ # État global (Données du CV, UI State)
├── lib/ # Utilitaires (Génération PDF, formatage date)
└── types/ # Définitions TypeScriptPlutôt que d'avoir des if/else géants, nous utiliserons un registre dynamique.
export const TEMPLATE_REGISTRY = {
'modern-dark': {
component: dynamic(() => import('./modern-dark')),
thumbnail: '/previews/modern-dark.png',
category: 'Creatif'
},
'classic-serif': {
component: dynamic(() => import('./classic-serif')),
thumbnail: '/previews/classic-serif.png',
category: 'Professionnel'
},
// ... jusqu'à 20+
};Les données ne seront plus "plates". Chaque section sera un objet capable d'être rendu par n'importe quel template.
- Contrat Universel : Chaque template doit accepter le même objet
CVData. - Composants Slots : Utilisation de "slots" pour que l'utilisateur puisse déplacer une section (ex: déplacer "Compétences" de la sidebar vers le corps principal).
- Déplacer la logique actuelle de
CVPreviewdanstemplates/v1-legacy. - Créer le dossier
templates/sharedpour les composants réutilisables (ex: le rendu d'une expérience).
- Normaliser l'objet
CVContextpour suivre le modèle de sections dynamiques. - Créer une interface
TemplatePropsque tous les templates devront implémenter.
- Créer le premier "Nouveau Template" (v2-modern) pour valider l'architecture.
- Implémenter le
TemplateSwitcherdans l'éditeur.
- Scalabilité : On peut ajouter le template n°21 simplement en créant un nouveau dossier.
- Maintenance : Un bug visuel sur le template "Minimalist" se corrige dans son propre dossier, sans risque pour "Professional".
- Performance : Utilisation de
next/dynamicpour ne charger que le code du template sélectionné par l'utilisateur.