Le contenu du CV
Le CV s'écrit dans un fichier JSON, puis scripts/remplir_cv.py le place dans la trame. Ce fichier décrit chaque champ, la zone de la trame où il va et la façon de le rédiger. ../assets/exemple.json est un exemple complet, en français et en anglais : c'est le contenu de la trame, pour une consultante fictive.
Structure
{
"fr": { …le CV en français… },
"en": { …le même CV en anglais… }
}Une seule clé suffit pour un CV dans une seule langue. Pour un CV bilingue, ou pour le CV et sa traduction, les deux versions ont la même structure : même nombre d'axes, de points d'expertise, de rubriques, de missions et de blocs de zoom, mêmes années. Le script le vérifie.
Couverture et en-tête
| Champ | Où | Règle | Exemple |
|---|---|---|---|
prenom |
Couverture, en grand, avec son initiale en filigrane ; en-tête de chaque slide | Le prénom seul, sans nom de famille | Camille |
titre |
Après le prénom | Accordé à la personne : « Consultante experte », « Consultant expert » ; en anglais « Expert Consultant » | Consultante experte |
domaines |
Sous-titre de couverture ; sur-titre de l'en-tête de chaque slide, en capitales | Deux ou trois domaines, courts | PMO & transformation data |
anciennete |
Sous-titre de couverture, après les domaines | « n ans dans / en … » | 15 ans en banque et gestion d'actifs |
accroche |
En-tête de chaque slide, sous le prénom | « n ans d'expérience en … » | 15 ans d'expérience en pilotage de programmes data et réglementaires |
date |
Sur-titre de la couverture, après « Curriculum vitae » | La date du jour, en toutes lettres | 30 septembre 2026, 30 September 2026 |
Le sous-titre de couverture se compose tout seul : « domaines — anciennete ». Un prénom composé passe sur deux lignes ; le bloc monte d'autant.
Slide de synthèse
Trois cartes. Elle donne tout le parcours d'un coup d'œil.
Parcours professionnel (carte de gauche)
| Champ | Règle |
|---|---|
profil |
Un paragraphe de trois ou quatre lignes : le métier, l'ancienneté, les secteurs, ce qui distingue la personne |
axes |
Trois ou quatre axes d'expertise, sous la forme « Axe : détail » ; « Axe : » passe en gras. Jamais la liste des postes, déjà à droite |
Encart d'expertise (carte encre sous le parcours)
"expertise": {
"titre": "Expertise IA",
"points": ["Copilot M365 au quotidien : comptes rendus, supports de comité, reporting", "…"]
}Par défaut « Expertise IA » (« AI expertise ») : les outils, les cas d'usage et les formations IA que la source cite vraiment, trois ou quatre points. Si la source n'en cite aucun, le demander ; faute de réponse, l'encart prend un autre titre (« Certifications et méthodes », par exemple) plutôt que d'inventer un usage de l'IA.
Profil (carte du milieu)
Une liste de rubriques, dans cet ordre : savoir-faire, fonctionnelles, savoir-être, métiers et diplômes. Le script écrit le nom de la rubrique en sur-titre, en capitales : « SAVOIR-FAIRE ».
"competences": [
{"rubrique": "Savoir-faire", "blocs": [
{"titre": "Pilotage de programme", "points": ["Cadrage, planning directeur et budget", "Comitologie et reporting de direction"]}
]},
{"rubrique": "Fonctionnelles", "points": ["…"], "outils": "Jira, MS Project, Power BI"},
{"rubrique": "Savoir-être", "points": ["…"]},
{"rubrique": "Métiers & diplômes", "points": ["…", "Français natif · Anglais courant"]}
]- Une rubrique a des
blocs(un titre en gras et ses points), despoints, ou les deux ;outilsajoute la ligne « Outils : » et la liste, en police machine. - Deux ou trois blocs de savoir-faire, deux ou trois points par bloc, une ligne par point.
- En anglais, les rubriques de la trame s'appellent « Technical skills », « Functional », « Soft skills », « Sectors & qualifications ».
C'est la carte qui déborde le plus vite : l'exemple la remplit presque. Pour ajouter une ligne, en retirer une ailleurs.
Synthèse des projets et des missions (carte de droite)
"missions": [
{"titre": "Directrice de projet data | Exemple Gestion — Paris (2022-2026)",
"resume": "Pilotage de la refonte du reporting réglementaire et ESG : 12 flux de données, 3 équipes métiers, 2,5 M€ de budget."}
]- Toutes les expériences, de la plus récente à la plus ancienne. Ne jamais s'arrêter aux dernières années : le lecteur doit voir toute la profondeur du parcours. Pour gagner de la place, raccourcir les résumés des plus anciennes.
- Titre :
Poste | Client — Ville (début-fin). Une mission en cours s'écrit(2023-aujourd'hui)ou(2023-present). Le script en fait deux lignes, ici comme dans le zoom : le poste, puis les années et « Client — Ville ». Sans « | », tout le titre devient le poste. - Résumé : une ou deux phrases nominales, avec les chiffres qui comptent.
- Un client que la source ne nomme pas, ou dont le nom ne doit pas sortir, se décrit par son secteur : « une banque de financement », « un groupe industriel ».
Slides de zoom
Le détail des missions, deux cartes par slide. zoom est une liste de slides ; le script ajoute autant de slides de zoom que la liste en compte.
"zoom": [
{"gauche": [ …blocs… ], "droite": [ …blocs… ]},
{"gauche": [ …blocs… ], "droite": [ …blocs… ]}
]Chaque colonne est une liste de blocs, l'un sous l'autre. Un bloc est une expérience ou une rubrique.
Expérience
{
"titre": "Directrice de projet data | Exemple Gestion — Paris (2022-2026)",
"mission": "piloter la refonte du reporting réglementaire et ESG d'une société de gestion.",
"blocs": [{"titre": "Pilotage du programme", "points": ["Cadrer le programme et construire le planning directeur", "…"]}],
"chiffres": "Volumes : 12 flux de données, 3 équipes métiers, 2,5 M€ de budget.",
"environnement": "Jira, Power BI, Excel, Copilot M365"
}| Champ | Règle |
|---|---|
titre |
Identique, au caractère près, au titre de la même mission dans la synthèse : mêmes dates |
mission |
L'objectif de la mission, à l'infinitif, sans majuscule : le script écrit « Mission : » (« Assignment: ») devant |
points ou blocs |
Trois ou quatre puces à l'infinitif ; pour une mission riche, deux ou trois blocs à titre, de trois puces chacun |
chiffres |
Facultatif. Une phrase avec les volumes : budgets, équipes, utilisateurs, commencée par un libellé (« Volumes : »), mis en gras |
environnement |
Facultatif. Outils et contexte ; le script écrit « Environnement : » (« Environment: ») devant, et la liste en police machine |
Rubrique : un titre, écrit en sur-titre, et ses points, pour « Autres expériences », « Formation », « Langues ».
{"rubrique": "Formation", "points": ["Master Finance d'entreprise — École Exemple, Paris (2011)"]}Mise en page
- Ordre antichronologique, colonne de gauche puis colonne de droite, slide après slide.
- Deux à quatre expériences par slide, selon leur longueur : une expérience détaillée en blocs occupe presque une colonne, une expérience à trois puces un tiers.
- Les expériences anciennes ou secondaires se regroupent dans une rubrique « Autres expériences », une ligne chacune :
Poste, Client (années) : l'essentiel. - Formation et langues dans le dernier espace libre, en fin de dernière slide.
- Équilibrer les deux colonnes. Si le script signale une colonne trop pleine, passer un bloc dans l'autre colonne ou sur une nouvelle slide plutôt que de tasser.
Style
- Phrases nominales, ou verbes à l'infinitif dans les puces ; pas de « je ».
- Des chiffres concrets : budgets, volumes, taille des équipes, nombre de projets ou d'utilisateurs.
- Un point de la forme « Libellé : détail » (libellé de 70 caractères au plus) a son libellé en gras : c'est la seule mise en valeur qui se décide dans le JSON, le reste vient de la trame.
- Le vocabulaire du métier de la personne, tel que la source l'emploie.
- Typographie française : espace avant « : », « M€ » et « K€ » après le nombre (2,5 M€), guillemets « ».
- Anglais : britannique (programme, organisation), mêmes chiffres, symbole avant le nombre et sans espace (€2.5M, €500K), pas d'espace avant « : ».
PDF et page web
Le même JSON donne le PDF et la page HTML : rien de plus à écrire, et les règles de place de la trame valent aussi pour eux.
- Le bandeau reprend la couverture : la date en sur-titre, le prénom, le titre, «
domaines—anciennete», l'initiale du prénom en filigrane. - La synthèse passe sur deux colonnes de cartes : le parcours (
accroche,profil,axes) et le fil des missions à gauche ; les compétences et l'encart d'expertise à droite. Dans le PDF, elle tient en page 1 quand elle tient dans la slide de synthèse ; une carte en trop passe en page 2, où le zoom la suit. - Le zoom garde les colonnes du JSON : chaque slide de zoom donne une rangée de deux colonnes, gauche puis droite, que la page web empile sur mobile. Chaque expérience et chaque rubrique y devient une carte.
- « À propos » reprend la slide ; dans le PDF, c'est la dernière page, en dos de couverture.
- À l'affichage, le script ajoute les espaces insécables de la typographie française : avant « : », dans les guillemets, fines avant « ; ! ? ».
La trame, la page web et les scripts
À lire seulement pour faire évoluer le skill, jamais pour rédiger un CV.
assets/trame-cv.pptxa sept slides : couverture, synthèse et zoom en français, « À propos », puis couverture, synthèse et zoom en anglais. Le script garde celles de la langue demandée et retire les autres.- La trame ne se retouche pas à la main :
scripts/dessiner_trame.pyla redessine d'après la charte graphique (fonds encre et clair avec leurs courbes de niveau et leurs halos, cartes en diagonale, logo en SVG, styles de texte), y metassets/exemple.json, embarque les polices, puis vérifie queremplir_cv.pyrelit la trame et redonne son texte. Il se lance depuis le dépôt adalan-skills, à côté du skillcharte-graphique-adalandont il lit les motifs et les logos :uv run scripts/dessiner_trame.py. Mesures, couleurs et styles sont en tête du script, en px d'une scène de 1920 × 1080 comme le modèle de présentation de la charte. - Le script de remplissage repère les zones de texte par le nom de leur forme (
cv:entete,cv:parcours,cv:gauche…, visibles dans le volet Sélection de PowerPoint). Chaque paragraphe qu'il écrit copie un paragraphe modèle de la trame, avec tous ses runs : comme la trame est l'exemple mis en page, il retrouve le modèle de chaque rôle (poste, point, rubrique…) en relisantassets/exemple.json. Après une modification de l'exemple, relancerdessiner_trame.py:remplir_cv.pyrefuse une trame qui ne correspond plus à l'exemple, et dit laquelle des deux reprendre. - Le texte de la slide « À propos » est dans
TEXTES_A_PROPOS, en français et en anglais, repris du skillpresentation-adalan. Il se met à jour là, pas dans la trame. - Les polices sont Mona Sans et Monaspace Neon, figées aux graisses et chasses de la charte par
scripts/preparer_polices.py, qui ajoute aussi le petit carré en diagonale des sur-titres et des puces. Leur licence (OFL, dansassets/polices/OFL.txt) réserve les noms « Mona » et « Monaspace » : une version modifiée porte un autre nom, d'où adalan Sans, adalan Sans Light, adalan Display, adalan Heading, adalan Mono et adalan Mono Medium.dessiner_trame.pyles embarque dans la trame, et chaque CV les garde. scripts/cv_web.pyécrit la page HTML : la structure en Python, la mise en forme dansassets/web/cv.css, avec les tokens de la charte, pour l'écran et pour l'impression A4. Il intègre à la page les polices.woff2, le logo et les courbes de niveau deassets/web/, copies de ceux decharte-graphique-adalan: les recopier si la charte les change.- Le PDF est l'impression de cette page par un navigateur Chromium (
@pageA4 portrait, pied de page et pagination dans les marges, « À propos » sur une page sans marge) : la mise en page du PDF se change dans la partie « Impression » decv.css. - Les textes fixes (titres des cartes, pied de page, bouton d'enregistrement) sont dans
LIBELLES, au début deremplir_cv.py, communs aux trois formats ; la slide « À propos » est dansTEXTES_A_PROPOS, commune elle aussi. - L'estimation de la place (
CHASSE_MOYENNEdansremplir_cv.py) repose sur la chasse moyenne de ces polices : la mesurer à nouveau si elles changent. - Le script retire de chaque CV la vignette, les auteurs de commentaires, les étiquettes et les métadonnées qu'un enregistrement dans PowerPoint, SharePoint ou Google Slides aurait laissés dans la trame (
RELATIONS_RETIREES) : la vignette montrerait la couverture de l'exemple dans l'aperçu du fichier.