# 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](../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 ```json { "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) ```json "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 ». ```json "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), des `points`, ou les deux ; `outils` ajoute 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) ```json "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. ```json "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** ```json { "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 ». ```json {"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.pptx` a 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.py` la 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 met `assets/exemple.json`, embarque les polices, puis vérifie que `remplir_cv.py` relit la trame et redonne son texte. Il se lance depuis le dépôt adalan-skills, à côté du skill `charte-graphique-adalan` dont 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 relisant `assets/exemple.json`. Après une modification de l'exemple, relancer `dessiner_trame.py` : `remplir_cv.py` refuse 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 skill `presentation-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, dans `assets/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.py` les 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 dans `assets/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 de `assets/web/`, copies de ceux de `charte-graphique-adalan` : les recopier si la charte les change. - Le PDF est l'impression de cette page par un navigateur Chromium (`@page` A4 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 » de `cv.css`. - Les textes fixes (titres des cartes, pied de page, bouton d'enregistrement) sont dans `LIBELLES`, au début de `remplir_cv.py`, communs aux trois formats ; la slide « À propos » est dans `TEXTES_A_PROPOS`, commune elle aussi. - L'estimation de la place (`CHASSE_MOYENNE` dans `remplir_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.