Application web de création de CV : assistant pas-à-pas, 14 modèles, import PDF/DOCX,
export PDF (texte réel, lisible par les ATS) / Word / JSON, et fonctions IA (analyse et
traduction FR↔EN via Gemini). React 19 + Vite, sans base de données — les données du CV
sont conservées dans le localStorage du navigateur.
npm install
npm run dev # serveur de dev ViteLes fonctions IA passent par une fonction serverless (
/api/gemini) quevite devne sert pas. Pour les tester en local, lancezvercel dev(voir ci-dessous).
| Commande | Rôle |
|---|---|
npm run dev |
Serveur de développement (HMR) |
npm run build |
Build de production dans dist/ |
npm run preview |
Sert le build de production |
npm run lint |
ESLint |
npm test |
Tests unitaires (Vitest) |
npm run test:watch |
Tests en mode watch |
Node 20.19+ / 22.12+ requis (Vite 8). Sous Node 18, vite échoue avec CustomEvent is not defined.
La clé Gemini est uniquement côté serveur — elle ne doit jamais se retrouver dans le
bundle navigateur. La variable n'a donc pas de préfixe VITE_.
cp .env.example .env
# puis renseigner :
GEMINI_API_KEY=...- Local :
npm i -g vercelpuisvercel dev(sert l'app et/api). - Production (Vercel) : définir
GEMINI_API_KEYdans Project → Settings → Environment Variables.
Sans clé configurée, les fonctions IA (analyse à l'import, traduction) sont simplement indisponibles — le reste de l'application fonctionne normalement.
- État global unique dans
src/context/CvContext.jsx(contenu du CV + navigation), persisté enlocalStorage(débouncé), routing par hash maison. - Les modèles (
src/templates/) sont des composants présentationnels nourris parmapCvDataToTemplate(src/utils/templateMapper.js) — ils ne lisent jamaiscvDatadirectement. - Aperçu mis à l'échelle de façon responsive via
src/components/Preview/ScaledPreview.jsx. - Export PDF par impression navigateur (
src/utils/printCv.js) → texte vectoriel sélectionnable.
Détails complets pour les contributeurs (et agents) dans CLAUDE.md.
Logique pure couverte par Vitest : mapping des données (templateMapper) et parsing du
texte de CV importé (cvTextParser).
npm test