Architecture du site

Le site suit la séparation de Hugo entre contenu, présentation, ressources statiques, configuration, sortie générée et service de recherche facultatif.

Structure du dépôt

.
├── content/
│   ├── _index.org
│   ├── about/
│   ├── research/
│   ├── engineering/
│   ├── software/
│   ├── projects/
│   ├── debian/
│   ├── digital-rights/
│   ├── politics/
│   └── website/
├── layouts/
│   ├── _default/
│   └── home.html
├── scripts/
│   ├── build_search_index.py
│   └── check_site.py
├── server/
│   └── search.cgi
├── static/
│   ├── css/
│   └── files/
├── hugo.toml
└── Makefile

Modèle de contenu

Org Mode reste le format de rédaction.

Une section est représentée par un répertoire contenant un fichier _index.org. Par exemple :

content/research/_index.org
content/research/electrochemical-noise.org
content/research/pem-fuel-cells.org

La hiérarchie est donc représentée par le système de fichiers plutôt que par des préfixes numériques intégrés aux titres visibles des pages.

L'ordre dans une section est contrôlé par des métadonnées telles que :

#+title: PEMFC Multiphysics Modelling
#+weight: 40

Cela conserve des titres sémantiques tout en permettant une navigation déterministe.

Layouts

Les templates Hugo définissent la structure HTML commune.

Le template de base contient l'enveloppe du document, la feuille de style, la navigation horizontale, la zone de contenu et le pied de page. Les templates de section et de page simple ne définissent que la partie qui diffère.

Les éléments d'interface partagés sont définis une seule fois dans les templates communs plutôt que dupliqués dans les sources Org individuelles.

Cela maintient la cohérence du HTML généré tout en laissant les fichiers de contenu centrés sur le matériau propre à chaque page.

Fichiers statiques

Les fichiers placés sous static/ sont copiés directement vers le site généré.

Ce dépôt y conserve la feuille de style, les documents PDF, robots.txt et le fichier de vérification du moteur de recherche. Aucun JavaScript n'est livré aux visiteurs.

Sortie générée

L'exécution de Hugo crée public/.

Le répertoire public/ est un artefact de build, pas une source, et il est exclu de Git.

nginx sert ce répertoire généré après déploiement.

Recherche

La lecture du site lui-même ne nécessite que des fichiers statiques.

La recherche plein texte est un composant serveur facultatif. Pendant le build, scripts/build_search_index.py extrait le texte du HTML généré et crée un index SQLite FTS5. Le programme CGI server/search.cgi interroge cet index en lecture seule.

Le formulaire de recherche est du HTML ordinaire utilisant une requête GET vers le point d'entrée CGI. Il ne nécessite pas JavaScript.

Le site ne fournit pas de sélecteur manuel de thème. Le mode de couleur suit la préférence du navigateur ou du système via CSS color-scheme ; aucun JavaScript, cookie ou état de thème côté serveur n'est nécessaire.

Le composant de recherche est donc séparé du rendu des pages et peut échouer ou être désactivé sans empêcher l'accès au site statique.

Sitemap et index de sections

Hugo dérive la structure du site du contenu plutôt que d'un analyseur de titres personnalisé. Les pages de section peuvent énumérer leurs enfants via les templates, et Hugo peut générer un sitemap XML à partir du même modèle de pages.

Le changement architectural important est donc :

ancien : conventions de titres -> analyse Elisp personnalisée -> navigation
nouveau : hiérarchie du contenu + métadonnées -> modèle de pages Hugo -> navigation