No description
  • JavaScript 50.8%
  • CSS 25.4%
  • HTML 23%
  • PowerShell 0.8%
Find a file
Renard 1ba86189c4
All checks were successful
Pipeline Librenard / Reniflage — tests unitaires (push) Successful in 6s
Pipeline Librenard / Vigilance — audit npm (push) Successful in 5s
Pipeline Librenard / Tissage — build du site et patrouille (push) Successful in 34s
💄 style(outils): retirer la tuile pastel des logos et les agrandir à 160px
2026-07-11 21:42:38 +02:00
.forgejo 🐛 fix(ci): fusionner build et patrouille pour éviter le 413 nginx 2026-07-10 22:27:25 +02:00
css 💄 style(outils): retirer la tuile pastel des logos et les agrandir à 160px 2026-07-11 21:42:38 +02:00
error 🔗 refactor(links): renommer GitLab en Code Source vers le nouveau dépôt 2026-07-10 20:18:09 +02:00
images feat(outils): ajouter BentoPDF à la page des outils libres 2026-07-11 21:19:06 +02:00
js 💄 style(outils): hero pleine largeur avec badges à la place du simple en-tête texte 2026-07-11 21:36:16 +02:00
scripts feat(outils): ajouter BentoPDF à la page des outils libres 2026-07-11 21:19:06 +02:00
vendor feat(build): recherche Pagefind, miroir images WebP et zero CDN runtime 2026-07-05 14:26:53 +02:00
.env.example feat(build): recherche Pagefind, miroir images WebP et zero CDN runtime 2026-07-05 14:26:53 +02:00
.gitattributes 💄 fix(wiki): empeche le fond des callouts de passer sous une image flottante 2026-07-01 18:13:40 +02:00
.gitignore 🐛 fix(ci): versionner js/wiki ignoré par le pattern wiki/ dans .gitignore 2026-07-05 16:21:28 +02:00
a-propos.html 💄 style(a-propos): illustrer le hero avec le renard en questionnement 2026-07-11 14:01:01 +02:00
AGENTS.md chore(agents) : Mets à jour agent.md 2026-07-01 08:33:53 +02:00
contact.html 💄 style(contact): illustrer le hero avec le renard tout content 2026-07-11 13:37:21 +02:00
index.html feat(accueil): baser le flux du wiki sur les dernières pages modifiées 2026-07-11 09:20:33 +02:00
outils.html 💄 style(outils): retirer la tuile pastel des logos et les agrandir à 160px 2026-07-11 21:42:38 +02:00
package-lock.json feat(build): recherche Pagefind, miroir images WebP et zero CDN runtime 2026-07-05 14:26:53 +02:00
package.json feat(build): recherche Pagefind, miroir images WebP et zero CDN runtime 2026-07-05 14:26:53 +02:00
projets.html 🐛 fix(wiki): restaurer le SPA live tout en gardant les pages statiques pour le partage 2026-07-11 10:56:59 +02:00
README.md 🐛 fix(wiki): restaurer le SPA live tout en gardant les pages statiques pour le partage 2026-07-11 10:56:59 +02:00
robots.txt initial commit 2026-06-30 07:12:44 +02:00
site.webmanifest initial commit 2026-06-30 07:12:44 +02:00
sitemap.xml 🔧 chore(build): rafraîchir wiki.html et sitemap depuis le dernier manifest 2026-07-11 21:31:41 +02:00
wiki.html 🔧 chore(build): rafraîchir wiki.html et sitemap depuis le dernier manifest 2026-07-11 21:31:41 +02:00

La mascotte Librenard

Librenard

Pour un internet plus libre et curieux.

Le code source de librenard.fr : petits guides, projets auto-hébergés et trucs que je bricole. Sérieux dans le fond, pas dans la forme.

Le site · Le wiki · Les outils


C'est quoi, ce terrier ?

Un site statique, du HTML, du CSS, du JavaScript. Pas de framework, pas de CDN au runtime, pas de cookie, pas de tracking. Juste un renard qui documente ce qu'il apprend : auto-hébergement avec YunoHost, logiciels libres, et un wiki BookStack qui grandit petit à petit.

Le seul outil un peu malin du terrier, c'est le script de build : il interroge l'API BookStack, prérend le wiki en pages statiques, rapatrie les images, indexe la recherche et génère le sitemap. Une fois construit, le site vit tout seul.

Faire tourner la machine

Il vous faut Node.js 18 ou plus (le fetch natif est requis).

npm install        # dépendances + polices et libs self-hostées (vendor/)
npm run build      # construit tout : pages, wiki prérendu, sitemap, recherche

Pas d'accès à l'API BookStack sous la patte ? Le build sait travailler hors ligne :

npm run build -- --no-wiki

Toutes les commandes

Commande Ce qu'elle fait
npm run build Génère les pages, le prérendu du wiki, le sitemap, robots.txt et le manifest
npm run build -- --no-wiki Build sans le prérendu wiki (hors ligne, sans API BookStack)
npm test Tests unitaires des helpers de build
npm run check:links Vérifie les liens internes
npm run check:links:external Vérifie aussi les liens externes
npm run verify Tests + build + vérification des liens, le tout en un

Le prérendu du wiki (ou : comment plaire aux moteurs de recherche)

Au build, scripts/lib/wiki-prerender.mjs interroge l'API BookStack et fabrique une vraie page statique pour chaque contenu :

  • wiki/<livre>.html : le sommaire d'un livre
  • wiki/<livre>/<article>.html : l'article complet, avec table des matières, navigation précédent/suivant et JSON-LD

Ces pages sont les URL canoniques et partageables du contenu : chacune porte le titre, la description et la couverture du livre en balises OpenGraph/Twitter. Elles sont listées dans le sitemap avec la vraie date de mise à jour BookStack.

La navigation depuis le site (flux d'accueil, cartes de livres, liens #/book/... sur wiki.html) passe par le mini-SPA : le contenu est relu en direct depuis l'API BookStack à chaque visite, sans attendre un rebuild. Pour une preview correcte sur un réseau social, partagez l'URL statique (wiki/bases-de-linux.html, etc.), pas la route hash.

Deux règles du terrier :

  1. Ne rien éditer à la main dans wiki/. Le dossier est rasé et régénéré à chaque build.
  2. Le token API se lit depuis la variable d'environnement BOOKSTACK_TOKEN (voir .env.example), à défaut depuis js/wiki/api.js.

Les étagères publiées se configurent dans scripts/lib/site-template.mjs (site.wikiShelves) et doivent correspondre aux attributs data-shelf de wiki.html et projets.html.

Le build génère aussi :

  • pagefind/ : index de recherche offline (Pagefind) sur les pages wiki statiques
  • images/wiki/ : miroir local des images BookStack, converties en WebP avec lazy loading
  • vendor/ et css/fonts.css : polices, highlight.js et OpenDyslexic self-hostés, zéro CDN au runtime

La patrouille (CI)

Chaque push déclenche le pipeline Forgejo Actions (.forgejo/workflows/ci.yml) :

  • Reniflage : les tests unitaires flairent les régressions
  • Vigilance : npm audit surveille les dépendances
  • Tissage et patrouille : build complet du site, puis vérification de la recherche Pagefind, du sitemap et des liens internes

Sur main, le build est complet (avec prérendu wiki). Sur les branches et PR, il tourne en --no-wiki pour ne pas marteler l'API.

Plan du terrier

├── index.html, projets.html, ...   Pages du site (générées, contenu éditable dedans)
├── css/                            Styles, découpés par usage
├── js/                             Script global + JS du wiki (js/wiki/)
├── scripts/                        Build, vérification des liens, et leurs tests
│   └── lib/                        Prérendu wiki, images, Pagefind, templates
├── wiki/                           Pages wiki statiques (générées, ne pas toucher)
├── vendor/, pagefind/              Assets self-hostés et index de recherche (générés)
└── .forgejo/                       La patrouille (CI)

Licence

Le contenu est sous licence CC BY-NC 4.0. Servez-vous, citez la source, pas d'usage commercial.

Fait avec du HTML à la main et une quantité déraisonnable de renards.