Application web de génération de CV, développée avec FastAPI et SQLite.
- Authentification — Connexion / inscription sécurisée (JWT, cookie httponly)
- Gestion du profil — Téléphone, LinkedIn, bio multi-langue
- Expériences professionnelles — Éditeur de texte riche (Quill), dates MM/YYYY, durée calculée, autocomplete localisation
- Formations — Diplômes et établissements
- Certifications — Avec dates d'obtention et d'expiration Compétences — Hard skills et soft skills avec niveau (1 à 4)
- Import de template Word — L'admin importe un
.docxavec des balises{{BALISE}} - Export CV — Génération en
.docxou.pdfà partir du template - Multi-langue — 5 langues par défaut (FR 🇫🇷, EN 🇬🇧, ES 🇪🇸, IT 🇮🇹, DE 🇩🇪), drapeaux interactifs sur tous les formulaires
- Dashboard — Indicateurs (expériences, formations, certifications, hard/soft skills), timeline interactive des expériences, donut de complétion, nuage de compétences animé
- Sidebar — Navigation latérale repliable (icônes seules ou avec labels), état mémorisé dans
localStorage - Timeline vis-timeline — Barres colorées (indigo/jaune), labels externes pour les expériences courtes, années significatives uniquement sur l'axe
- Nuage de compétences — Mots flottants animés, taille proportionnelle au poids (niveau × occurrences dans les expériences), hard skills en orange sanguine, soft skills en vert
- Thème clair / sombre — Détecte automatiquement la préférence système, toggle dans la sidebar
- Rôles — Utilisateur standard / Administrateur par organisation
| Composant | Technologie |
|---|---|
| Backend | FastAPI |
| ORM | SQLAlchemy 2.0 |
| Base de données | SQLite |
| Schémas | Pydantic v2 |
| Auth | JWT via python-jose + passlib |
| Templates HTML | Jinja2 + Bootstrap 5.3 |
| Éditeur riche | Quill.js (CDN) |
| Graphique | Chart.js (CDN) |
| Timeline | vis-timeline (CDN) |
| Drapeaux | flagcdn.com (SVG) |
| Autocomplete | Nominatim / OpenStreetMap |
| Génération DOCX | python-docx |
| Export PDF | WeasyPrint |
- Python 3.12 (requis — Python 3.14 non supporté par
pydantic-core) - pip
# 1. Cloner le dépôt
git clone https://github.com/Alist3rCode/cv-generator.git
cd cv-generator
# 2. Installer les dépendances
py -3.12 -m pip install -r requirements.txt
# 3. (Optionnel) Créer un compte admin de démo
py -3.12 seed.py
# 4. Lancer l'application
py -3.12 -m uvicorn main:app --reload --port 9000L'application est accessible sur http://localhost:9000
Les 5 langues par défaut (fr, gb, es, it, de) sont créées automatiquement au premier démarrage.
| Champ | Valeur |
|---|---|
admin@example.com |
|
| Mot de passe | admin1234 |
Important : Changez ce mot de passe avant toute utilisation en production.
cv-generator/
├── main.py # Point d'entrée FastAPI + filtres Jinja2
├── models.py # Modèles SQLAlchemy
├── schemas.py # Schémas Pydantic
├── database.py # Configuration SQLite
├── seed.py # Données initiales (admin + langues)
├── requirements.txt
│
├── routers/
│ ├── auth.py # Login / logout / JWT
│ ├── users.py # Inscription, liste utilisateurs
│ ├── profile.py # Dashboard + profil + bio multi-langue
│ ├── experiences.py # CRUD expériences (multi-langue via GID)
│ ├── formations.py # CRUD formations
│ ├── certifications.py # CRUD certifications
│ ├── competences.py # CRUD compétences
│ ├── templates.py # Import templates Word (admin)
│ └── exports.py # Génération et téléchargement CV
│
├── services/
│ └── cv_generator.py # Moteur de génération DOCX/PDF
│
├── static/
│ ├── style.css # Styles globaux (sidebar, timeline, nuage de mots…)
│ └── favicon.png
│
├── templates/
│ ├── base.html # Layout principal (sidebar repliable, dark mode, autocomplete)
│ ├── macros.html # Macros Jinja2 (lang_tabs, unsaved_guard)
│ ├── auth/
│ ├── profile/ # dashboard.html, edit.html
│ ├── experiences/
│ ├── formations/
│ ├── certifications/
│ ├── competences/
│ └── exports/
│
├── uploads/ # Templates Word importés (ignoré par git)
└── exports/ # CV générés (ignoré par git)
Tous les contenus traduisibles (expériences, formations, certifications, compétences) utilisent un GID (Group ID) — un UUID partagé entre toutes les traductions d'une même entrée.
- La liste affiche une entrée par GID (langue principale)
- En mode édition, des onglets drapeaux permettent de basculer entre les langues
- Un onglet clignote si des modifications ne sont pas encore sauvegardées
La bio est par utilisateur × langue (pas de GID).
| Fonctionnalité | Description |
|---|---|
| Bouton Enregistrer | Passe en bleu (btn-primary) si le formulaire a des modifications non sauvegardées |
| Alerte quitter | Pop-up navigateur si vous tentez de quitter une page avec des modifications non sauvegardées |
| Page vide | Expériences / formations / certifications / compétences vides redirigent directement vers le formulaire d'ajout |
| Thème | Détecte la préférence système (clair/sombre), modifiable via la sidebar, mémorisé dans localStorage |
| Sidebar | Repliable (icônes seules), état persisté dans localStorage |
| Autocomplete localisation | Suggestions Nominatim avec navigation clavier (↑ ↓ Entrée Échap) sur tous les champs de localisation |
| Picker compétences | Ajout/retrait de compétences depuis le formulaire d'expérience, avec création inline |
| Suppression compétence | Modale de confirmation listant les expériences impactées avant suppression |
Créez un fichier .docx avec les balises suivantes :
| Balise | Description |
|---|---|
{{NOM}} |
Nom de famille |
{{PRENOM}} |
Prénom |
{{EMAIL}} |
Adresse email |
{{TELEPHONE}} |
Numéro de téléphone |
{{LINKEDIN}} |
URL LinkedIn |
{{BIO}} |
Texte de présentation |
Créez un tableau avec une ligne modèle — l'application la duplique pour chaque entrée.
Expériences : {{EXP_TITRE}} {{EXP_ENTREPRISE}} {{EXP_LOCATION}} {{EXP_DEBUT}} {{EXP_FIN}} {{EXP_DUREE}} {{EXP_SUMMARY}} {{EXP_DESC}}
Formations : {{FORM_DIPLOME}} {{FORM_ETAB}} {{FORM_DEBUT}} {{FORM_FIN}}
Certifications : {{CERT_TITRE}} {{CERT_ORG}} {{CERT_DATE}} {{CERT_FIN}}
Compétences : {{HARD_NOM}} {{HARD_NIVEAU}} · {{SOFT_NOM}} {{SOFT_NIVEAU}}
- Import de CV existant (PDF / Word) via IA
- Import depuis l'export LinkedIn (ZIP)
- Traduction automatique des champs
- Gestion admin des utilisateurs d'une organisation
- Aperçu CV avant export
- Support photo de profil
- Éditeur riche pour les descriptions de formations
Projet interne — tous droits réservés.