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.
- Langages
- 11Répartition du code
- 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.
| Langage | % | Octets |
|---|---|---|
| JavaScript | 584 457 | |
| HTML | 540 538 | |
| Python | 160 751 | |
| TeX | 129 462 | |
| CSS | 121 305 | |
| PowerShell | 15 654 |
5 autres langages
| Shell | 0.72% | 11 367 |
| Batchfile | 0.54% | 8 498 |
| Mermaid | 0.39% | 6 088 |
| Go Template | 0.1% | 1 539 |
| Jinja | 0.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.
- 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
- Modifier le poste dans index-en.html et index-fr.html, ainsi que data/resume.en.json et data/resume.fr.json.
- Lancer python build_cv.py build --all pour régénérer cv-en/resume.pdf et cv-fr/resume.pdf.
- Lancer python scripts/deploy/publish_site.py pour construire le CV et le blogue dans un dossier temporaire, les valider et mettre à jour docs/.
- Vérifier docs/ en local, valider les changements de source, puis relancer le script avec --publish pour valider docs/ et pousser main.
- 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.
cd hugo/themes/paper
npm ci
npm run build:css
cd ../..
hugo server -Dpython 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 --cipython build_cv.py build --language enhelm 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-namespacecd tools/medium-mirror
npm install
npx playwright install chromiumCommandes 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
4.2. Installation
README.md
- Clone the repository
- Install Python dependencies
- Build CV PDFs
- View locally
4.3. Local Development
README.md
- Set up environment (see Local Development Guide)
- Make changes to HTML or LaTeX files
- Test locally using a local HTTP server
- Rebuild PDFs if LaTeX files changed
- Commit and push changes
4.4. 🚀 Quick Start
docs/README.md
- Local Development: See Setup Guide
- Deploy to GitHub Pages: See GitHub Pages Deployment
- Compile CV: See CV Compilation
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
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
4.7. Setup Guide
docs/setup/README.md
4.8. Configuration
helm/cv-stack/README.md
The following table lists the configurable parameters and their default values:
| Parameter | Description | Default |
|---|---|---|
| namespace.name | Namespace name | cv-stack |
| namespace.create | Create namespace | true |
| cvSite.enabled | Enable CV site | true |
| cvSite.replicas | Number of CV site replicas | 2 |
| cvSite.image.repository | CV site image repository | nginx |
| cvSite.image.tag | CV site image tag | alpine |
| linktreeSite.enabled | Enable linktree site | true |
| linktreeSite.replicas | Number of linktree site replicas | 2 |
| linktreeSite.image.repository | Linktree site image repository | nginx |
| linktreeSite.image.tag | Linktree site image tag | alpine |
| traefik.enabled | Enable Traefik | true |
| traefik.replicas | Number of Traefik replicas | 1 |
| traefik.image.repository | Traefik image repository | traefik |
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
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.
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
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
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
4.14. Deployment Guide
docs/deployment/README.md
Développement et contributions
4.15. 🤝 Contributing
README.md
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
4.17. Option 1: Simple Local Server (Recommended for Quick Testing)
docs/setup/README.md
4.18. 2. Test Build Script
docs/setup/README.md
4.19. Development Guide
docs/development/README.md
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.
JSON du CV et données AEO
CV et À propos générés
CV HTML et PDF LaTeX
Markdown Hugo
Compilation de production préparée
- Depuis CV et À propos générés
- Depuis CV HTML et PDF LaTeX
- Depuis Markdown Hugo
- Vers Site statique dans docs
Site statique dans docs
Mermaid Diagramme interactif
Vue générale des composants et des échanges vérifiés dans le dépôt.

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 toneIndigoUn 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
| Module | Couche | Fichiers | Types | Extensions |
|---|---|---|---|---|
hugo/layouts | Présentation | 30 | 0 | .html |
cv-en/latex | Source principale | 9 | 0 | .tex |
cv-fr/latex | Source principale | 9 | 0 | .tex |
(root) | Présentation | 7 | 1 | .html .py |
css | Présentation | 5 | 0 | .css |
linktree | Présentation | 5 | 0 | .xml .css .html |
scripts/build | Services applicatifs | 5 | 0 | .py |
scripts/verify | Services applicatifs | 5 | 0 | .py |
scripts/html | Services applicatifs | 4 | 0 | .py |
cv-en | Source principale | 3 | 0 | .xml .tex .cls |
cv-fr | Source principale | 3 | 0 | .xml .tex .cls |
hugo | Présentation | 2 | 0 | .html |
hugo/assets | Présentation | 2 | 0 | .css |
papers/rapport | Présentation | 2 | 0 | .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
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
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
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
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
- CV Compiler vers English LaTeX CV compiles source
- CV Compiler vers French LaTeX CV compiles source
- CV Compiler vers English PDF Resume produces PDF
- CV Compiler vers French PDF Resume produces PDF
- Site Visitor vers HTML Resumes views resumes
- Site Visitor vers Hugo Blog browses blog
- Site Visitor vers Social Links Page opens links
- Site Visitor vers Papers and Publications reads publications
- English LaTeX CV vers English CV Sections includes sections
- French LaTeX CV vers French CV Sections includes sections
- HTML Resumes vers MapMyVisitors loads visitor map
- Hugo Blog vers Posts Projects Recipes renders content
- 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
_existsscripts/ci/spellcheck.py:45_hugo_markdownscripts/ci/spellcheck.py:49_validate_aspell_pwsscripts/ci/spellcheck.py:99
Modules privés
7.6. Entités et modèle de données 1
| Entité | Nature | Premiers champs |
|---|---|---|
LaTeXLogStats | Dataclass | errors, 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.pyparse_latex_log, log, check_docker, get_cv_path, build_image, check_latex_qualityscripts/html/patch_cv_html.pyfailed, loadMap, initParticles, wrap_section_summaries, repl, patch_filetools/medium-mirror/import.mjspickSrcsetUrl, resolveUrl, extFromUrl, stripNoise, yamlEscape, extractArticleHtmlscripts/verify/verify_deploy_build.pyq, validate_blog_nav, validate_agent_ready, validate_cv_pdfs, mainscripts/verify/verify_meta_descriptions.py_first_group, extract, check_file, mainscripts/verify/verify_cv_pdf_text.pypdftotext, check_pdf, main
7.8. Base de données et persistance
7.9. Intégrations externes
Clients HTTP
Hôtes nommés dans le code
antoineboucher.info4 fichiersscripts/ci/verify-deploy-lychee.sh:17www.sitemaps.org2 fichiersscripts/deploy/merge_root_sitemap.py:16cdn.clustrmaps.com1 fichiersscripts/html/patch_cv_html.py:152mapmyvisitors.com1 fichiersscripts/html/patch_cv_html.py:22
7.10. Stack et dépendances
Python requirements.txt 3 à l’exécution
Node.js hugo/package.json 5 dev
Node.js tools/medium-mirror/package.json 4 à l’exécution
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
| Paquet | Version | Usage | Rôle | Registre |
|---|---|---|---|---|
typer | >=0.9.0 | exécution | Ligne de commande | pypi.org |
rich | >=13.0.0 | exécution | Ligne de commande | pypi.org |
tqdm | >=4.66.0 | exécution | Ligne de commande | pypi.org |
@tailwindcss/cli | ^4.1.18 | développement | Interface utilisateur | npmjs.com |
@tailwindcss/typography | ^0.5.16 | développement | Interface utilisateur | npmjs.com |
prettier | ^3.4.2 | développement | Analyse et formatage | npmjs.com |
prettier-plugin-go-template | ^0.0.15 | développement | Analyse et formatage | npmjs.com |
tailwindcss | ^4.1.18 | développement | Interface utilisateur | npmjs.com |
cheerio | 1.0.0-rc.12 | exécution | Extraction web et analyse | npmjs.com |
playwright | ^1.49.0 | exécution | Tests | npmjs.com |
turndown | ^7.2.0 | exécution | A library that converts HTML to Markdown | npmjs.com |
turndown-plugin-gfm | ^1.0.2 | exécution | Turndown 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
| Workflow | Déclencheurs | Tâches | Publie vers |
|---|---|---|---|
Compile LaTeX CV.github/workflows/compile-cv.yml | push, lancement manuel |
| — |
Deploy to GitHub Pages.github/workflows/deploy.yml | push, lancement manuel |
| GitHub Pages |
Lighthouse CI.github/workflows/lighthouse.yml | push, demande de fusion, lancement manuel |
| — |
Link check.github/workflows/link-check.yml | push, demande de fusion, lancement manuel, planification |
| — |
Quality checks.github/workflows/quality.yml | push, demande de fusion, lancement manuel |
| — |
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
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
- Image Docker ×2
- Pile Docker Compose
- Vercel
- Manifestes Kubernetes ×19
- Générateur de site statique
- Workflow de déploiement CI ×3
Publié vers
Services Compose
cv-site linktree-site traefik
Images Docker de base
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
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
- antoinebou12. (2026, 5 novembre). CV. [Software repository] github.com.
- antoinebou12. (2026, 5 novembre). CV: README. [Repository documentation] github.com.
- antoinebou12. (2026, 5 novembre). scripts/deploy/build_docs.py. [Source file] github.com.
- antoinebou12. (2026, 5 novembre). scripts/build/render_resume_md.py. [Source file] github.com.
- antoinebou12. (2026, 5 novembre). scripts/build/generate_aeo_content.py. [Source file] github.com.
- antoinebou12. (2026, 5 novembre). hugo/hugo.toml. [Source file] github.com.
- Boucher, A. (2026, 24 octobre). Refonte du site avec Hugo (partie 2). [Project article] antoineboucher.info.
- 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.