Aller au contenu
Table des matières

CV : Un dépôt, plusieurs parcours de publication

Ce site réunit des CV bilingues, des données structurées, des PDF LaTeX et un blog Hugo. Un script local compile et valide le CV et le blog, puis les publie ensemble depuis docs/ sur main.

Application et outils
  • Mis à jour
  • 1
  • JavaScript · 36.98%
  • MIT
Composants documentés
2Explorer les modules
Documents source
10Lire les instructions
Langages du dépôtJavaScript 36.98%11

Parts calculées à partir des octets GitHub Linguist.

JavaScript36.98%
36.98%584 457 octets
HTML34.21%
34.21%540 538 octets
Python10.17%
10.17%160 751 octets
TeX8.19%
8.19%129 462 octets
Langage%Octets
JavaScript36.98%584 457
HTML34.21%540 538
Python10.17%160 751
TeX8.19%129 462
CSS7.68%121 305
PowerShell0.99%15 654
5 autres langages
Shell0.72%11 367
Batchfile0.54%8 498
Mermaid0.39%6 088
Go Template0.1%1 539
Jinja0.04%600

1. Aperçu

1.1. Pourquoi il existe

Portfolio et CV statique bilingue haute performance avec schémas AEO, CI/CD et zéro dépendance runtime.

1.2. Cas d’usage

Présentation professionnelle et vitrine technique d'ingénierie logicielle.

2. Cas d’utilisation

Source d'antoineboucher.info/CV : CV HTML bilingue, PDF LaTeX, CV en JSON et blogue Hugo avec une page par projet.

Diagramme de cas d’utilisation de CV : Mettre à jour le CV; Compiler les CV en PDF; Rafraîchir les pages projets; Publier le site; Lire le CV (EN ou FR); Parcourir blogue et projetsCVMettre à jour le CVCompiler les CV en PDFRafraîchir les pages projetsPublier le siteLire le CV (EN ou FR)Parcourir blogue et projetsPropriétaire du siteRecruteur ou lecteur«système»GitHub Pages
Acteurs à gauche (personnes) et à droite (systèmes externes) ; chaque ovale est un cas d’utilisation appuyé par les fichiers cités ci-dessous.
Mettre à jour le CV
Propriétaire du site

Le propriétaire modifie index-en.html et index-fr.html, data/resume.*.json et data/cv.yaml ; scripts/build/generate_cv.py produit les fichiers LaTeX skills.tex à partir du YAML.

Compiler les CV en PDF
Propriétaire du site

python build_cv.py build --all compile cv-en/resume.tex et cv-fr/resume.tex avec XeLaTeX dans une image Docker.

Rafraîchir les pages projets
Propriétaire du site

scripts/build/repository_docs.py lit les dépôts publics sans exécuter leur code et écrit hugo/data/repository_*.json, que le shortcode repository-note affiche sous hugo/content/projects/notes/<slug>/.

Publier le site
Propriétaire du siteGitHub Pages

scripts/deploy/publish_site.py lance build_docs.py (Hugo avec HUGO_ENV=production, fusion du sitemap, vérifications), check_public_repos.py et les tests des notes, puis, avec --publish, valide docs/ et pousse main.

Lire le CV (EN ou FR)
Recruteur ou lecteurGitHub Pages

GitHub Pages sert /CV/index-en.html et /CV/index-fr.html, les PDF sous /CV/cv-en/ et /CV/cv-fr/, ainsi que /CV/resume.json ou /CV/resume.md pour la lecture machine.

Parcourir blogue et projets
Recruteur ou lecteurGitHub Pages

Le site Hugo est publié sous /CV/blog/ et /CV/blog/fr/, avec une version Markdown de chaque page, et llms.txt, robots.txt et sitemap.xml copiés à la racine.

2.1. Scénario : Publier une mise à jour du CV

  1. Modifier le poste dans index-en.html et index-fr.html, ainsi que data/resume.en.json et data/resume.fr.json.
  2. Lancer python build_cv.py build --all pour régénérer cv-en/resume.pdf et cv-fr/resume.pdf.
  3. Lancer python scripts/deploy/publish_site.py pour construire le CV et le blogue dans un dossier temporaire, les valider et mettre à jour docs/.
  4. Vérifier docs/ en local, valider les changements de source, puis relancer le script avec --publish pour valider docs/ et pousser main.
  5. Attendre que GitHub Pages (main, /docs) traite la poussée, puis vérifier https://antoineboucher.info/CV/.

Fichiers consultésREADME.mdscripts/deploy/publish_site.pyscripts/deploy/build_docs.pydocs/development/local-publishing.mdbuild_cv.pyscripts/build/generate_cv.pyscripts/build/repository_docs.py

3. Démarrage

Ces commandes viennent de la documentation du dépôt. Elles n’ont pas été exécutées pendant cette revue.

README.md · Hugo blog (Paper)
cd hugo/themes/paper
npm ci
npm run build:css
cd ../..
hugo server -D
README.md · Building CVs
python build_cv.py build --language en
python build_cv.py build --all
python build_cv.py build --all --parallel
python build_cv.py build --language en --output ./output/cv.pdf
python build_cv.py build --language en --clean
python build_cv.py build --language en --verbose
python build_cv.py build --all --ci
README.md · LaTeX CVs
python build_cv.py build --language en
helm/cv-stack/README.md · Installation
helm install cv-stack ./helm/cv-stack
helm install cv-stack ./helm/cv-stack -f my-values.yaml
helm install cv-stack ./helm/cv-stack --namespace cv-stack --create-namespace
tools/medium-mirror/README.md · Setup
cd tools/medium-mirror
npm install
npx playwright install chromium
Commandes déclarées dans les manifestes

4. Références du dépôt

Extraits des guides du dépôt, dans leur langue d’origine. Les liens ouvrent la version du code consultée.

Prérequis et premier essai

4.1. Prerequisites

README.md

  • Python 3.8+ (for build script)
  • Docker (for LaTeX compilation)
  • Git
Lire les instructions complètes ↗

4.2. Installation

README.md

  1. Clone the repository
  2. Install Python dependencies
  3. Build CV PDFs
  4. View locally
Lire les instructions complètes ↗

4.3. Local Development

README.md

  1. Set up environment (see Local Development Guide)
  2. Make changes to HTML or LaTeX files
  3. Test locally using a local HTTP server
  4. Rebuild PDFs if LaTeX files changed
  5. Commit and push changes
Lire les instructions complètes ↗

4.4. 🚀 Quick Start

docs/README.md

  1. Local Development: See Setup Guide
  2. Deploy to GitHub Pages: See GitHub Pages Deployment
  3. Compile CV: See CV Compilation
Lire les instructions complètes ↗

4.5. Prerequisites (README.md)

docs/setup/README.md

Before starting, ensure you have:

  • Python 3.8+ - For the build script
  • Docker - For LaTeX compilation (recommended)
  • Git - For version control
  • Text Editor - For editing files (VS Code, Vim, etc.) Optional but recommended:
  • LaTeX Distribution - For local LaTeX compilation (alternative to Docker)
  • Node.js - For alternative HTTP server
Lire les instructions complètes ↗
Configuration et utilisation

4.6. [Setup](./setup/README.md)

docs/README.md

Get started with the project - installation, requirements, and local development setup.

  • Local Development - Set up your local environment
  • Requirements - System requirements and dependencies
Lire les instructions complètes ↗

4.7. Setup Guide

docs/setup/README.md

This section covers the initial setup and installation of the CV/resume website project.
Lire les instructions complètes ↗

4.8. Configuration

helm/cv-stack/README.md

The following table lists the configurable parameters and their default values:

ParameterDescriptionDefault
namespace.nameNamespace namecv-stack
namespace.createCreate namespacetrue
cvSite.enabledEnable CV sitetrue
cvSite.replicasNumber of CV site replicas2
cvSite.image.repositoryCV site image repositorynginx
cvSite.image.tagCV site image tagalpine
linktreeSite.enabledEnable linktree sitetrue
linktreeSite.replicasNumber of linktree site replicas2
linktreeSite.image.repositoryLinktree site image repositorynginx
linktreeSite.image.tagLinktree site image tagalpine
traefik.enabledEnable Traefiktrue
traefik.replicasNumber of Traefik replicas1
traefik.image.repositoryTraefik image repositorytraefik
Lire les instructions complètes ↗

4.9. Build Script Usage

docs/development/README.md

  • ✅ Always test builds locally before pushing
  • ✅ Use –verbose flag when debugging
  • ✅ Use –clean flag to remove auxiliary files
  • ✅ Use –all –parallel for faster builds
  • ✅ Check build statistics after compilation
  • ✅ Review LaTeX warnings and fix when possible
Lire les instructions complètes ↗
Exploitation et dépannage

4.10. Deployment Issues

README.md

  • GitHub Pages not updating: Check GitHub Actions workflow status
  • Docker container issues: Check logs with docker-compose logs
  • Kubernetes issues: Check pod status with kubectl get pods See Troubleshooting Guide for more details.
Lire les instructions complètes ↗

4.11. Recent Updates

README.md

  • ✅ CV index: Conferences section with Graphquon logos (2024 + 2025); moved out of certifications list
  • ✅ Added Graphquon 2024 and 2025 conference entries
  • ✅ Updated Snapchat Lens statistics (13.97M plays, 20.38M views; blog post refreshed May 2026)
  • ✅ Added DasherControl project
  • ✅ Updated hass-renpho with dates
  • ✅ Improved build script with parallel compilation support
  • ✅ Enhanced documentation structure

Built with ❤️ using LaTeX, Docker, and modern web technologies

Lire les instructions complètes ↗

4.12. [Deployment](./deployment/README.md)

docs/README.md

Deploy the CV website to various platforms and environments.

  • GitHub Pages - Deploy to GitHub Pages
  • Docker - Docker-based deployment
  • Kubernetes - Kubernetes deployment
Lire les instructions complètes ↗

4.13. Deployment Issues (README.md)

docs/README.md

Problem: GitHub Pages not updating

  • Solution: Check GitHub Actions workflow status
  • Solution: Verify Pages is enabled in repository settings
  • Solution: Check workflow logs for errors Problem: Docker container won’t start
  • Solution: Check container logs: docker-compose logs
  • Solution: Verify ports are not in use
  • Solution: Check Docker daemon is running Problem: Kubernetes pods not running
  • Solution: Check pod status: kubectl get pods -n cv-stack
  • Solution: View logs: kubectl logs -n cv-stack
  • Solution: Verify ingress is configured correctly
Lire les instructions complètes ↗

4.14. Deployment Guide

docs/deployment/README.md

This section covers deploying the CV/resume website to various platforms and environments.
Lire les instructions complètes ↗
Développement et contributions

4.15. 🤝 Contributing

README.md

This is a personal CV/resume project. For suggestions or improvements, please open an issue or submit a pull request.
Lire les instructions complètes ↗

4.16. [Development](./development/README.md)

docs/README.md

Development workflows, processes, and best practices.

  • CV Compilation - LaTeX CV compilation process
  • GitHub Actions - GitHub Actions workflows
  • Hugo blog (Paper theme) - Header, menus, i18n, baseURL, mobile menu, dark mode
Lire les instructions complètes ↗

4.17. Option 1: Simple Local Server (Recommended for Quick Testing)

docs/setup/README.md

Use a simple HTTP server to view the website locally: Pros: Simple, no dependencies, fast startup Cons: No LaTeX compilation, basic features only
Lire les instructions complètes ↗

4.18. 2. Test Build Script

docs/setup/README.md

Test the CV build script:
Lire les instructions complètes ↗

4.19. Development Guide

docs/development/README.md

Development workflows, processes, and best practices for the CV/resume website project.
Lire les instructions complètes ↗
Documentation source

10 documents lus parmi 10 candidats.

5. Fonctions et composants 2

Sources du contenu
data/resume.en.json et resume.fr.json contiennent le CV lisible par machine. Les pages index HTML restent les sources de leur mise en page. data/aeo.yaml produit les pages À propos, tandis que Hugo gère les articles Markdown et les notes de projets.
Assemblage et vérification
build_docs.py prépare les pages et ressources, compile Hugo sous le chemin du blog, fusionne le sitemap et vérifie le déploiement avant de copier vers docs. Cette préparation empêche une compilation échouée d’écraser l’arbre publié.

6. Architecture

Ouvrez un composant pour suivre ses connexions, ou explorez le diagramme complet.

Composants du système Contexte
Mermaid Diagramme interactif

Vue générale des composants et des échanges vérifiés dans le dépôt.

Vue statique de l’architecture de CV
Aperçu statique. Le diagramme interactif le remplace après le chargement de Mermaid.
flowchart LR

subgraph group_resume["CV and Resume"]
  node_buildcv["CV Compiler<br/>[build_cv.py]"]
  node_latex_en["English LaTeX CV<br/>[resume.tex]"]
  node_latex_fr["French LaTeX CV<br/>[resume.tex]"]
  node_sections_en["English CV Sections"]
  node_sections_fr["French CV Sections"]
  node_pdf_en["English PDF Resume<br/>[resume.pdf]"]
  node_pdf_fr["French PDF Resume<br/>[resume.pdf]"]
  node_html_resume["HTML Resumes"]
  node_cv_data["CV Data<br/>[cv.yaml]"]
end

subgraph group_content["Portfolio Content"]
  node_hugo_content["Posts Projects Recipes"]
  node_hugo_layouts["Blog Templates"]
  node_papers["Papers and Publications"]
end

subgraph group_web["Website Experiences"]
  node_hugo_site["Hugo Blog"]
  node_linktree["Social Links Page"]
end

subgraph group_integration["External Integration"]
  node_agent_worker["Agent-ready Home Worker<br/>[worker.mjs]"]
  node_map_service["MapMyVisitors"]
end

node_visitor(("Site Visitor"))

node_visitor -->|"views resumes"| node_html_resume
node_visitor -->|"browses blog"| node_hugo_site
node_visitor -->|"opens links"| node_linktree
node_latex_en -->|"includes sections"| node_sections_en
node_latex_fr -->|"includes sections"| node_sections_fr
node_buildcv -->|"compiles source"| node_latex_en
node_buildcv -->|"compiles source"| node_latex_fr
node_buildcv -->|"produces PDF"| node_pdf_en
node_buildcv -->|"produces PDF"| node_pdf_fr
node_hugo_site -->|"renders content"| node_hugo_content
node_hugo_site -->|"uses templates"| node_hugo_layouts
node_visitor -.->|"reads publications"| node_papers
node_html_resume -->|"loads visitor map"| node_map_service


class node_buildcv,node_latex_en,node_latex_fr,node_sections_en,node_sections_fr,node_pdf_en,node_pdf_fr,node_html_resume,node_cv_data toneBlue
class node_hugo_content,node_hugo_layouts,node_papers toneAmber
class node_hugo_site,node_linktree toneMint
class node_agent_worker,node_map_service toneRose
class node_visitor toneIndigo

Un CV et portfolio bilingue avec des CV HTML et PDF, un blogue Hugo, des publications, des liens sociaux et des routes lisibles par les agents. La compilation réunit le contenu édité, les données générées et les vérifications de déploiement.

Composants
17
Connexions
13
Liens appuyés par le code
11/13
Version texte du diagramme
  • JSON du CV et données AEO → CV et À propos générés
  • CV et À propos générés → Compilation de production préparée
  • CV HTML et PDF LaTeX → Compilation de production préparée
  • Markdown Hugo → Compilation de production préparée
  • Compilation de production préparée → Site statique dans docs
Suivre un parcours dans le code

Suivez une modification du blog depuis hugo/content vers Hugo, puis vers le dossier de préparation du déploiement. Le CV suit un autre parcours: modifier un JSON ne réécrit pas automatiquement toutes les sections HTML ou LaTeX manuelles.

7. Dossier technique

Établi à partir du code au commit 2fdf469 (52 fichiers). Chaque élément vient d’une correspondance de motif dans le code: ouvrez le fichier lié avant de vous y fier.

7.1. Couches et modules

Les dossiers sont classés par couche selon leur nom, de l’interface utilisateur jusqu’à l’accès aux données. Comme le classement repose sur les noms seulement, le diagramme ne dit rien des appels entre couches.

Mermaid Vue en couches
flowchart TB
  subgraph L_presentation["Présentation"]
    direction TB
    presentation_0["hugo/layouts<br/>30 fichiers"]
    presentation_1["(root)<br/>6 fichiers"]
    presentation_2["css<br/>5 fichiers"]
    presentation_3["linktree<br/>5 fichiers"]
    presentation_more["+6"]
  end
  subgraph L_interface["Points d’entrée et API"]
    direction TB
    interface_0["tools/medium-mirror<br/>1 fichier"]
  end
  subgraph L_application["Services applicatifs"]
    direction TB
    application_0["scripts/build<br/>5 fichiers"]
    application_1["scripts/verify<br/>5 fichiers"]
    application_2["scripts/html<br/>4 fichiers"]
    application_3["cloudflare/workers<br/>1 fichier"]
    application_more["+2"]
  end
  subgraph L_core["Source principale"]
    direction TB
    core_0["cv-en/latex<br/>9 fichiers"]
    core_1["cv-fr/latex<br/>9 fichiers"]
    core_2["cv-en<br/>2 fichiers"]
    core_3["cv-fr<br/>2 fichiers"]
    core_more["+3"]
  end
  subgraph L_tests["Tests"]
    direction TB
    tests_0["scripts<br/>4 fichiers"]
  end
  subgraph L_hosting["Build, CI et hébergement"]
    direction TB
    hosting_0[".github<br/>69 fichiers"]
    hosting_1["helm<br/>11 fichiers"]
    hosting_2["scripts<br/>11 fichiers"]
    hosting_3["k8s<br/>8 fichiers"]
    hosting_more["+2"]
  end
  L_presentation ~~~ L_interface
  L_interface ~~~ L_application
  L_application ~~~ L_core
  L_core ~~~ L_tests
  L_core ~~~ L_hosting
Modules et couche principale
ModuleCoucheFichiersTypesExtensions
hugo/layoutsPrésentation300.html
cv-en/latexSource principale90.tex
cv-fr/latexSource principale90.tex
(root)Présentation71.html .py
cssPrésentation50.css
linktreePrésentation50.xml .css .html
scripts/buildServices applicatifs50.py
scripts/verifyServices applicatifs50.py
scripts/htmlServices applicatifs40.py
cv-enSource principale30.xml .tex .cls
cv-frSource principale30.xml .tex .cls
hugoPrésentation20.html
hugo/assetsPrésentation20.css
papers/rapportPrésentation20.html

7 modules plus petits ne sont pas affichés.

7.2. Modèle C4

Du contexte du système aux déclarations du code. Chaque niveau conserve les limites des sources disponibles.

UML 1 · Contexte du système
1 · Contexte du système

La vue C4 la plus large : qui utilise le projet et sur quels systèmes et stockages externes il s’appuie. Rendu avec uml-mcp.

Source PlantUML
@startuml
!include <C4/C4_Context>
LAYOUT_LEFT_RIGHT()
Person(P_cli, "Utilisateur CLI")
System(SYS, "CV", "Ce site réunit des CV bilingues, des données structurées, des PDF LaT…")
Rel(P_cli, SYS, "Utilise")
@enduml
UML 2 · Conteneurs
2 · Conteneurs

Un niveau plus près : les parties qui s’exécutent séparément dans le projet, leur langage principal et le chemin des appels entre elles. Rendu avec uml-mcp.

Source PlantUML
@startuml
!include <C4/C4_Container>
LAYOUT_LEFT_RIGHT()
Person(P_cli, "Utilisateur CLI")
System_Boundary(SYS, "CV") {
  Container(C0, "cv-site", "Docker")
  Container(C1, "linktree-site", "Docker")
  Container(C2, "traefik", "Docker")
}
Rel(P_cli, C0, "Utilise")
@enduml
UML 3 · Composants et couches
3 · Composants et couches

Modules regroupés par couche du code. Les limites indiquent l’organisation, sans affirmer une isolation à l’exécution ni des appels. Rendu avec uml-mcp.

Source PlantUML
@startuml
!include <C4/C4_Component>
LAYOUT_TOP_DOWN()
System_Boundary(SYS, "CV") {
Boundary(L0, "Présentation", "layer") {
Component(M0_0, "docs/blog", "HTML, .xml, .css", "1120 fichiers")
Component(M0_1, "hugo/layouts", "HTML", "30 fichiers")
Component(M0_2, "docs", "HTML, .xml", "7 fichiers")
Component(M0_3, "(root)", "HTML", "6 fichiers")
Component(M0_4, "docs/linktree", ".css, .xml, HTML", "6 fichiers")
Component(M0_5, "css", ".css", "5 fichiers")
Component(M0_6, "docs/css", ".css", "5 fichiers")
Component(M0_7, "linktree", ".xml, .css, HTML", "5 fichiers")
Component(M0_more, "+7 modules", "", "")
}
Boundary(L1, "Points d’entrée et API", "layer") {
Component(M1_0, "docs/blog", "HTML, .xml", "12 fichiers")
Component(M1_1, "tools/medium-mirror", ".mjs", "1 fichiers")
}
Boundary(L2, "Services applicatifs", "layer") {
Component(M2_0, "scripts/build", "Python", "5 fichiers")
Component(M2_1, "scripts/verify", "Python", "5 fichiers")
Component(M2_2, "scripts/html", "Python", "4 fichiers")
Component(M2_3, "cloudflare/workers", ".mjs", "1 fichiers")
Component(M2_4, "scripts", "Python", "1 fichiers")
Component(M2_5, "scripts/hugo", ".ps1", "1 fichiers")
}
Boundary(L3, "Source principale", "layer") {
Component(M3_0, "(root)", "Python", "1 fichiers")
Component(M3_1, "docs/blog", "JavaScript", "1 fichiers")
}
Boundary(L4, "Tests", "layer") {
Component(M4_0, "scripts", "Python", "4 fichiers")
}
Boundary(L5, "Build, CI et hébergement", "layer") {
Component(M5_0, ".github", ".md, .yml, JavaScript", "69 fichiers")
Component(M5_1, "docs", "HTML, .xml, .md", "16 fichiers")
Component(M5_2, "helm", ".yaml, .md, .tpl", "11 fichiers")
Component(M5_3, "scripts", "Python, .ps1, .sh", "11 fichiers")
Component(M5_4, "k8s", ".yaml", "8 fichiers")
Component(M5_5, "(root)", ".cv, .nginx, .yml", "4 fichiers")
}
}
@enduml
UML 4 · Code
4 · Code

Déclarations, champs et méthodes sélectionnés, regroupés par fichier source. Aucun héritage ni appel n’est déduit. Rendu avec uml-mcp.

Source PlantUML
@startuml
skinparam backgroundColor transparent
skinparam shadowing false
skinparam roundCorner 10
skinparam defaultFontName Arial
skinparam defaultFontSize 13
skinparam ArrowColor #4e6070
skinparam ArrowFontColor #3d4f5f
skinparam titleFontSize 14
skinparam actorBorderColor #006a62
skinparam actorBackgroundColor #e9f3f4
skinparam usecaseBorderColor #006a62
skinparam usecaseBackgroundColor #e9f3f4
skinparam componentBorderColor #006a62
skinparam componentBackgroundColor #e9f3f4
skinparam interfaceBorderColor #006a62
skinparam interfaceBackgroundColor #ffffff
skinparam nodeBorderColor #4e6070
skinparam nodeBackgroundColor #f4f8fb
skinparam databaseBorderColor #006a62
skinparam databaseBackgroundColor #ffffff
skinparam cloudBorderColor #4e6070
skinparam cloudBackgroundColor #f0f5fa
skinparam artifactBorderColor #006a62
skinparam artifactBackgroundColor #ffffff
skinparam rectangleBorderColor #b0c2d3
skinparam activityBorderColor #006a62
skinparam activityBackgroundColor #e9f3f4
skinparam partitionBorderColor #b0c2d3
skinparam stereotypeCBackgroundColor #ffffff
top to bottom direction
hide empty members
package "CV" {
package "build_cv.py" as F0 {
class "LaTeXLogStats" as T0_0 {
  errors
  warnings
  overfull_boxes
  underfull_boxes
  pages
  has_fatal_error
}
}
object "build_cv.py" as FN0 {
  parse_latex_log()
  log()
  check_docker()
  get_cv_path()
  build_image()
  check_latex_quality()
}
object "scripts/html/patch_cv_html.py" as FN1 {
  failed()
  loadMap()
  initParticles()
  wrap_section_summaries()
  repl()
  patch_file()
}
object "tools/medium-mirror/import.mjs" as FN2 {
  pickSrcsetUrl()
  resolveUrl()
  extFromUrl()
  stripNoise()
  yamlEscape()
  extractArticleHtml()
}
object "scripts/verify/verify_deploy_build.py" as FN3 {
  q()
  validate_blog_nav()
  validate_agent_ready()
  validate_cv_pdfs()
  main()
}
object "scripts/verify/verify_meta_descriptions.py" as FN4 {
  _first_group()
  extract()
  check_file()
  main()
}
object "scripts/verify/verify_cv_pdf_text.py" as FN5 {
  pdftotext()
  check_pdf()
  main()
}
}
@enduml

7.3. Flux de données

Les appels du diagramme GitDiagram, dans l’ordre où on les rencontre depuis les points d’entrée. GitDiagram produit ce graphe par IA; les chemins de fichiers cités ont été comparés à l’arbre du dépôt.

Mermaid Diagramme de séquence
sequenceDiagram
  autonumber
  participant P0 as CV Compiler
  participant P1 as English LaTeX CV
  participant P2 as French LaTeX CV
  participant P3 as English PDF Resume
  participant P4 as French PDF Resume
  participant P5 as Site Visitor
  participant P6 as HTML Resumes
  participant P7 as Hugo Blog
  participant P8 as Social Links Page
  participant P9 as Papers and Publications
  participant P10 as English CV Sections
  participant P11 as French CV Sections
  participant P12 as MapMyVisitors
  participant P13 as Posts Projects Recipes
  participant P14 as Blog Templates
  P0->>P1: compiles source
  P0->>P2: compiles source
  P0->>P3: produces PDF
  P0->>P4: produces PDF
  P5->>P6: views resumes
  P5->>P7: browses blog
  P5->>P8: opens links
  P5--)P9: reads publications
  P1->>P10: includes sections
  P2->>P11: includes sections
  P6->>P12: loads visitor map
  P7->>P13: renders content
  P7->>P14: uses templates
Étapes en texte
  1. CV Compiler vers English LaTeX CV compiles source
  2. CV Compiler vers French LaTeX CV compiles source
  3. CV Compiler vers English PDF Resume produces PDF
  4. CV Compiler vers French PDF Resume produces PDF
  5. Site Visitor vers HTML Resumes views resumes
  6. Site Visitor vers Hugo Blog browses blog
  7. Site Visitor vers Social Links Page opens links
  8. Site Visitor vers Papers and Publications reads publications
  9. English LaTeX CV vers English CV Sections includes sections
  10. French LaTeX CV vers French CV Sections includes sections
  11. HTML Resumes vers MapMyVisitors loads visitor map
  12. Hugo Blog vers Posts Projects Recipes renders content
  13. Hugo Blog vers Blog Templates uses templates

7.4. Interface publique

Du code extérieur peut utiliser tout ce qui est listé ici. Le projet déclare aussi 1 types publics.

Ligne de commande 13

7.5. Interface privée

Ces noms sont internes selon les conventions du langage: tiret bas initial, private, static ou pub(crate).

Assistant préfixé _
9

Modules privés

scripts/_repo.py

7.6. Entités et modèle de données 1

EntitéNaturePremiers champs
LaTeXLogStatsDataclasserrors, warnings, overfull_boxes, underfull_boxes, pages, has_fatal_error

7.7. Logique métier

Aucune classe n’a été extraite. Voici les plus gros fichiers source et leurs fonctions.

build_cv.py
parse_latex_log, log, check_docker, get_cv_path, build_image, check_latex_quality
scripts/html/patch_cv_html.py
failed, loadMap, initParticles, wrap_section_summaries, repl, patch_file
tools/medium-mirror/import.mjs
pickSrcsetUrl, resolveUrl, extFromUrl, stripNoise, yamlEscape, extractArticleHtml
scripts/verify/verify_deploy_build.py
q, validate_blog_nav, validate_agent_ready, validate_cv_pdfs, main
scripts/verify/verify_meta_descriptions.py
_first_group, extract, check_file, main
scripts/verify/verify_cv_pdf_text.py
pdftotext, check_pdf, main

7.8. Base de données et persistance

7.9. Intégrations externes

Clients HTTP

fetch

Hôtes nommés dans le code

7.10. Stack et dépendances

Python requirements.txt 3 à l’exécution

Ouvrir le manifeste

Node.js hugo/package.json 5 dev

Ouvrir le manifeste

Node.js tools/medium-mirror/package.json 4 à l’exécution

Ouvrir le manifeste

Dépendances externes

12 paquets déclarés (7 à l’exécution, 5 pour le développement) dans requirements.txt, hugo/package.json, tools/medium-mirror/package.json.

Tableau des paquets 12
Dépendances externes
PaquetVersionUsageRôleRegistre
typer>=0.9.0exécutionLigne de commandepypi.org
rich>=13.0.0exécutionLigne de commandepypi.org
tqdm>=4.66.0exécutionLigne de commandepypi.org
@tailwindcss/cli^4.1.18développementInterface utilisateurnpmjs.com
@tailwindcss/typography^0.5.16développementInterface utilisateurnpmjs.com
prettier^3.4.2développementAnalyse et formatagenpmjs.com
prettier-plugin-go-template^0.0.15développementAnalyse et formatagenpmjs.com
tailwindcss^4.1.18développementInterface utilisateurnpmjs.com
cheerio1.0.0-rc.12exécutionExtraction web et analysenpmjs.com
playwright^1.49.0exécutionTestsnpmjs.com
turndown^7.2.0exécutionA library that converts HTML to Markdownnpmjs.com
turndown-plugin-gfm^1.0.2exécutionTurndown plugin to add GitHub Flavored Markdown extensions.npmjs.com

7.11. Pipeline CI/CD

5 workflows GitHub Actions, 7 tâches. Chaque boîte est une tâche ; les boîtes à double bord publient ou déploient, et les flèches suivent les dépendances needs.

Mermaid Déroulement du pipeline
flowchart LR
  subgraph wf0["Compile LaTeX CV"]
    direction LR
    wf0_compile["compile<br/>ubuntu-latest"]
  end
  subgraph wf1["Deploy to GitHub Pages"]
    direction LR
    wf1_deploy[["deploy<br/>ubuntu-latest"]]
  end
  subgraph wf2["Lighthouse CI"]
    direction LR
    wf2_lighthouse[["lighthouse<br/>ubuntu-latest"]]
  end
  subgraph wf3["Link check"]
    direction LR
    wf3_lychee["lychee<br/>ubuntu-latest"]
  end
  subgraph wf4["Quality checks"]
    direction LR
    wf4_spellcheck["spellcheck<br/>ubuntu-latest"]
    wf4_html_validate["html-validate<br/>ubuntu-latest"]
    wf4_en_fr_parity[["en-fr-parity<br/>ubuntu-latest"]]
  end
  t0(["push · lancement manuel"])
  t1(["push · demande de fusion · lancement manuel"])
  t2(["push · demande de fusion · lancement manuel…"])
  d0[("GitHub Pages")]
  t0 --> wf0_compile
  t0 --> wf1_deploy
  wf1_deploy -.-> d0
  t1 --> wf2_lighthouse
  t2 --> wf3_lychee
  t1 --> wf4_spellcheck
  t1 --> wf4_html_validate
  t1 --> wf4_en_fr_parity
Workflows, déclencheurs, tâches et cibles
WorkflowDéclencheursTâchesPublie vers
Compile LaTeX CV
.github/workflows/compile-cv.yml
push, lancement manuel
  • compile ubuntu-latest
    Checkout repository · Set up Python · Install Python dependencies · Set up Docker Buildx · Verify Docker is running · Verify required files exist
—
Deploy to GitHub Pages
.github/workflows/deploy.yml
push, lancement manuel
  • deploy ubuntu-latest
    Checkout · Set up Python · Setup Pages · Install CI Python dependencies · Test sitemap merge script · Setup Hugo
GitHub Pages
Lighthouse CI
.github/workflows/lighthouse.yml
push, demande de fusion, lancement manuel
  • lighthouse ubuntu-latest
    actions/checkout · Set up Python · Setup Hugo · Setup Node · Build minimal _site for CV pages · Run Lighthouse CI
—
Link check
.github/workflows/link-check.yml
push, demande de fusion, lancement manuel, planification
  • lychee ubuntu-latest
    Checkout repository · Check links · Link check report (advisory)
—
Quality checks
.github/workflows/quality.yml
push, demande de fusion, lancement manuel
  • spellcheck ubuntu-latest
    actions/checkout · Set up Python · Install spell tools · Locale spellcheck (EN codespell, FR aspell) · Spellcheck report (advisory)
  • html-validate ubuntu-latest
    actions/checkout · Setup Node · Validate static HTML
  • en-fr-parity ubuntu-latest
    actions/checkout · Set up Python · Install CI dependencies · Validate CV data schema · EN/FR HTML parity · Generated LaTeX matches data/cv.yaml
—

7.12. Déploiement

Mermaid Schéma de déploiement
flowchart LR
  repo[("Dépôt GitHub")]
  ci[["GitHub Actions<br/>5 workflows"]]
  image["Image Docker<br/>FROM texlive/texlive:latest"]
  pub_GitHub_Pages[("GitHub Pages")]
  host_Vercel("Vercel<br/>vercel.json")
  host_Kubernetes_manifests("Kubernetes<br/>helm/cv-stack/")
  host_Static_site_generator("Site statique<br/>hugo/hugo.toml")
  subgraph compose["Docker Compose"]
    svc_cv_site["cv-site"]
    svc_linktree_site["linktree-site"]
    svc_traefik["traefik"]
  end
  repo -->|"push ou demande de fusion"| ci
  ci -->|"docker build"| image
  ci -->|"publie"| pub_GitHub_Pages
  ci -.->|"configuré"| host_Vercel
  ci -.->|"configuré"| host_Kubernetes_manifests
  ci -.->|"configuré"| host_Static_site_generator
  image -->|"docker compose up"| compose
UML Déploiement
Déploiement

Le nœud extérieur est l’endroit où le code s’exécute. Chaque image de base pointe vers ce qu’elle construit, les flèches pleines mènent aux bases de données et les pointillées aux services externes. Rendu avec uml-mcp.

Source PlantUML
@startuml
skinparam backgroundColor transparent
skinparam shadowing false
skinparam roundCorner 10
skinparam defaultFontName Arial
skinparam defaultFontSize 13
skinparam ArrowColor #4e6070
skinparam ArrowFontColor #3d4f5f
skinparam titleFontSize 14
skinparam actorBorderColor #006a62
skinparam actorBackgroundColor #e9f3f4
skinparam usecaseBorderColor #006a62
skinparam usecaseBackgroundColor #e9f3f4
skinparam componentBorderColor #006a62
skinparam componentBackgroundColor #e9f3f4
skinparam interfaceBorderColor #006a62
skinparam interfaceBackgroundColor #ffffff
skinparam nodeBorderColor #4e6070
skinparam nodeBackgroundColor #f4f8fb
skinparam databaseBorderColor #006a62
skinparam databaseBackgroundColor #ffffff
skinparam cloudBorderColor #4e6070
skinparam cloudBackgroundColor #f0f5fa
skinparam artifactBorderColor #006a62
skinparam artifactBackgroundColor #ffffff
skinparam rectangleBorderColor #b0c2d3
skinparam activityBorderColor #006a62
skinparam activityBackgroundColor #e9f3f4
skinparam partitionBorderColor #b0c2d3
skinparam stereotypeCBackgroundColor #ffffff
node "Docker Compose" as H {
  node "cv-site" as N0 <<container>>
  node "linktree-site" as N1 <<container>>
  node "traefik" as N2 <<container>>
}
artifact "FROM texlive/texlive:latest" as IMG0
IMG0 ..> N0 : construit
artifact "FROM nginx:alpine" as IMG1
IMG1 ..> N0 : construit
cloud "Vercel" as X0
X0 ..> N0
@enduml

Où il s’exécute

Publié vers

Services Compose

cv-site linktree-site traefik

Images Docker de base

texlive/texlive:latest nginx:alpine

7.13. Supervision

Ce que le code consigne, mesure et expose pour savoir s’il fonctionne.

Vérifications de santé des conteneurs

7.14. Sécurité

Contrôles

Chaîne d’approvisionnement

7.15. Tests automatisés

Fichiers de test
4
Fichiers source
98
Cas de test, environ
13
Tests unitaires
4

Aucun rapport chiffré de couverture dans les sources analysées.

Où sont les tests

scripts/tests 4

Rien trouvé pour: Services.

8. Types et structure des fichiers

3 types déclarés, dont 3 dans l’aperçu des relations de base.

Diagramme des types
classDiagram
direction TB
class tc629f4786497["LaTeXLogStats"] {
}
class tc217ab0df529["MergeRootSitemapTests"] {
  test_flattens_sitemapindex_and_adds_static_pages()
  test_urlset_passthrough()
}
class tb2eba65b8551["RenderResumeMdTests"] {
  test_render_en_contains_required_headings()
  test_all_locales_exit_zero()
}
class b539fd1ca9096["unittest.TestCase"] {
  <<unresolved_base>>
}
b539fd1ca9096 <|-- tc217ab0df529
class b18f4b7dc7f0d["unittest.TestCase"] {
  <<unresolved_base>>
}
b18f4b7dc7f0d <|-- tb2eba65b8551

Les bases non résolues restent identifiées; les signatures complètes ne sont pas reconstruites.

9. Référence

43 / 43 fichiers admissibles lus (2646 dans l’arbre); 0 trop volumineux, 0 échec de lecture et 0 diagnostic de syntaxe.

Ce que couvre l’analyse

Les dossiers connus de dépendances et de compilation, les fichiers d’identifiants et les binaires sont exclus. La collecte couvre les README, les manifestes reconnus et les fichiers source pris en charge.

Les statistiques Linguist couvrent l’ensemble du dépôt et peuvent inclure d’autres langages.

11. Fichiers à lire 4

12. Glossaire

Dépôt

Les fichiers source, la configuration et l’historique versionné d’un projet.

README

Le document d’entrée du dépôt, qui présente généralement son rôle et son installation.

Dépendance

Une bibliothèque, un outil ou un service nécessaire à la compilation ou à l’exécution d’un composant.

Interface en ligne de commande

Une interface textuelle où les commandes et arguments choisissent les opérations. Les codes de retour permettent aux scripts de détecter un succès ou un échec.

Compilation

Les étapes qui transforment les sources et dépendances en programme exécutable ou en livrable distribuable.

Mermaid

Un langage de diagrammes textuel. Les nœuds et liens décrivent un modèle ; le diagramme n’exécute pas le projet.

13. Références

  1. antoinebou12. (2026, 5 novembre). CV. [Software repository] github.com.
  2. antoinebou12. (2026, 5 novembre). CV: README. [Repository documentation] github.com.
  3. antoinebou12. (2026, 5 novembre). scripts/deploy/build_docs.py. [Source file] github.com.
  4. antoinebou12. (2026, 5 novembre). scripts/build/render_resume_md.py. [Source file] github.com.
  5. antoinebou12. (2026, 5 novembre). scripts/build/generate_aeo_content.py. [Source file] github.com.
  6. antoinebou12. (2026, 5 novembre). hugo/hugo.toml. [Source file] github.com.
  7. Boucher, A. (2026, 24 octobre). Refonte du site avec Hugo (partie 2). [Project article] antoineboucher.info.
  8. Boucher, A. (2026, 23 octobre). CV : Un dépôt, plusieurs parcours de publication. [Project article] antoineboucher.info.

Les sources sans date de publication indiquent la date de leur dernière vérification, le 5 novembre 2026. Les liens des fichiers conservent la révision inspectée lorsqu’elle est disponible.