đź’» Architecture Frontend CV-builder
|
Note
|
📺 Diagrammes SVG de ce document
Documents liĂ©s : Cas d’utilisation · Diagramme de classes · Architecture backend |
Track Technique 2TUP — Phase 1 : Choix d’architecture
Style d’architecture : Single Page Application Vue 3 intĂ©grĂ©e au frontend ClaraJob
(clarajob-front-gui). Le CV-builder expose 2 routes seulement :
/cv-builder (authentifiée, vue racine CvWorkspaceView) et /cv/:token (publique, CvPublicView).
La navigation interne se fait sans changement de route, par le paramètre de requête ?screen=
(16 écrans), avec un état global centralisé dans un store Pinia unique (useCvBuilderStore).
| Composant | Technologie | RĂ´le |
|---|---|---|
Framework |
Vue 3.5 (Composition API, |
Composants UI, réactivité |
Langage |
TypeScript 5.9 |
Typage statique ( |
État global |
Pinia 3 |
Store unique |
Routing |
Vue Router 4 |
2 routes ; navigation interne par |
Client HTTP |
axios |
Client partagé ( |
UI |
Tailwind CSS 3.4 (+ styles scoped) |
Design system, mise en page |
Éditeur riche |
TipTap 3 ( |
Édition de texte riche ( |
Utilitaires |
|
Debounce auto-save/preview, drag & drop, validation des actions IA |
Build |
Vite 7 |
Bundling, HMR, lazy-loading des 57 layouts |
Diagramme en couches
Lecture du diagramme :
-
Vue racine —
CvWorkspaceView(route/cv-builder) sĂ©lectionne l’Ă©cran actif d’après?screen=et porte l’auto-save (watchDebounced2 s surstore.cvData) ; elle est habillĂ©e parCvAppShell+CvSidebarNavet monte en permanenceCvPrintDocument(rendu d’impression). -
Écrans — 16 écrans internes :
init,list,templates,design,workspace,ai-coach,ats,adapt,interview,collab,share,versions,extras,admin,preview,public. -
Composants d’Ă©dition/rendu —
EditorSidebar,EditorFormContainer(9 formulaires de section),EditorPreviewPanel→CvLivePreview→CvMiniPreviewqui charge paresseusement les 57 layouts (CvLayout*.vue) ;CvPagedPreview(pagination A4) etCvPrintDocument(export PDF). -
Composables —
useAiChat(singleton module-level : messages, undoStack,executeAction),useCvScoring(score calculé côté client),useCvTemplates(catalogue des templates),useCvVectorExport(window.print()),useCvPersistence(backend si authentifié, fallbacklocalStorage). -
Store Pinia unique —
useCvBuilderStore:cvData, template/design sélectionné,currentCvId,savedCvs,lastSavedAt, actionsautoSave(),loadExistingCv(),createNewCv(). -
Services API — 7 services réels :
cvDocumentService,cvAiService,chatService,aiService,cvVersionService,cvShareService,variantService→ backend REST/api/v1.
|
Important
|
Écrans maquettes et données en dur (état réel du code) :
|
Hiérarchie des composants
Règles de composition :
-
Un seul point d’entrĂ©e par route :
CvWorkspaceViewcompose les 16 écrans ;CvPublicView(route/cv/:token) rend directementCvMiniPreviewavec les données publiques. -
Les écrans composent des composants métier ;
CvMiniPreviewest le composant de rendu partagé par tout le monde (éditeur, templates, aperçu, export, impression, vue publique). -
Le chat Clara est découpé :
AiCoachTab→ChatMessageBubble→ChatQuickActions/ChatActionPreview; l’Ă©tat du chat vit dans le composable singletonuseAiChat, pas dans un composant. -
Les 57 layouts sont des composants purs (props
data,accentColor… → rendu HTML/CSS), chargés à la demande viadefineAsyncComponent.
Flux de données
Trois flux structurent l’application :
-
Auto-save — saisie dans un formulaire → mutation directe de
store.cvData→watchDebounced2000 ms (CvWorkspaceView) →store.autoSave()→PUT /api/v1/cv-documents/{id}(ouPOSTà la création ; fallbacklocalStoragehors authentification) → mise à jour delastSavedAt. -
Chat IA (Clara) — message utilisateur →
POST /api/v1/ai/chat(message +cvData
historique) → la rĂ©ponse contient des actions ; les actions informatives (suggestion, score, template) sont exĂ©cutĂ©es immĂ©diatement, les actions modifiantes sont proposĂ©es en quick actions et attendent la validation de l’utilisateur →executeAction()valide l’action (zod), prend un snapshot d’annulation (undoStack), mute le store → l’auto-save standard persiste le rĂ©sultat. -
Rendu live —
CvLivePreviewobservestore.cvDataavecwatchDebounced300 ms et pousse une copie versCvMiniPreview(layout sĂ©lectionnĂ©) ; l’export PDF passe paruseCvVectorExport→window.print()surCvPrintDocument(@media print), le PDF est produit par le navigateur — pas d’appel backend d’export.
Sync Gate 2 — Vérification track fonctionnel ↔ track technique
| UC | Chemin technique frontend | Statut |
|---|---|---|
UC01 — Créer un CV de zéro |
|
âś… couvert |
UC02 — Importer depuis le profil |
|
âś… couvert |
UC03 — Importer un CV PDF |
|
âś… couvert |
UC04 — Générer un CV complet par IA |
|
âś… couvert |
UC05 — Lister / ouvrir / supprimer ses CV |
|
âś… couvert |
UC06 — Éditer les sections |
|
âś… couvert |
UC07 — Choisir un template |
|
âś… couvert |
UC08 — Personnaliser le design |
|
âś… couvert |
UC09 — Prévisualiser le CV |
|
âś… couvert |
UC10 — Exporter en PDF |
|
âś… couvert |
UC11 — Dialoguer avec Clara |
|
âś… couvert |
UC12 — Reformuler un texte par IA |
|
âś… couvert |
UC13 — Générer une section par IA |
|
âś… couvert |
UC14 — Adapter le CV à une offre |
|
âś… couvert |
UC15 — Gérer les variantes |
|
âś… couvert |
UC16 — Sauvegarde automatique |
|
âś… couvert |
UC17 — Gérer les versions |
|
âś… couvert |
UC18 — Partager le CV (lien public) |
|
âś… couvert (KPI maquette) |
UC19 — Consulter un CV partagé |
route |
âś… couvert |
Verdict Sync Gate 2 : les 19 cas d’utilisation rĂ©els ont un chemin technique complet
(écran → store/composable → service API → backend /api/v1). Les écrans collab, interview et
extras sont hors périmètre fonctionnel (maquettes « coming soon ») ; le score ATS est calculé
cĂ´tĂ© client (useCvScoring) et l’analyse de mots-clĂ©s ATS reste Ă brancher — design validĂ©
avec ces réserves explicites.