Site web à l'adresse manu.quebec. https://manu.quebec
  • HTML 47%
  • JavaScript 25.2%
  • CSS 24.1%
  • Shell 3.7%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Manu e46a109a02
All checks were successful
Valider, minimifier et déployer / test (push) Successful in 28s
Valider, minimifier et déployer / build-and-deploy (push) Successful in 20s
chore(ci): migrer les alias GitHub vers les variables Forgejo natives et ajouter le workflow de mise à jour automatique des dépendances
- Remplacer github.sha → forgejo.sha, github.workspace → forgejo.workspace, secrets.GITHUB_TOKEN → secrets.FORGEJO_TOKEN, github.repository → forgejo.repository
- Adapter build.sh : GITHUB_SHA → FORGEJO_SHA
- Ajouter .forgejo/workflows/update-deps.yml (quotidien 11h UTC, npm-check-updates, PR automatique via API Forgejo)
2026-09-16 00:56:02 -04:00
.forgejo/workflows chore(ci): migrer les alias GitHub vers les variables Forgejo natives et ajouter le workflow de mise à jour automatique des dépendances 2026-09-16 00:56:02 -04:00
images seo: métadonnées Open Graph complètes et icônes PWA 192/512 2026-08-11 19:45:02 -04:00
polices Mise à jour complète de la page. 2026-07-19 11:27:57 -04:00
test chore: harmonisation inter-projets — robots.txt, vm.Script helper et headers 2026-09-11 21:50:21 -04:00
.editorconfig chore: optimisations de la stack et nettoyage 2026-09-08 19:47:17 -04:00
.gitignore feat: migration ESLint 10, Vitest, Prettier et script build.sh local 2026-08-30 23:40:26 -04:00
.node-version chore: aligner la stack sur Node 24 LTS (ajout .node-version) 2026-08-25 09:46:37 -04:00
.prettierignore feat: migration ESLint 10, Vitest, Prettier et script build.sh local 2026-08-30 23:40:26 -04:00
.prettierrc feat: migration ESLint 10, Vitest, Prettier et script build.sh local 2026-08-30 23:40:26 -04:00
.stylelintrc.json chore: améliorations PWA, accessibilité et qualité 2026-09-11 20:20:33 -04:00
apple-touch-icon.png Ajout du favicon multi-résolution et de l'icône tactile Apple. 2026-07-19 11:51:12 -04:00
build.sh chore(ci): migrer les alias GitHub vers les variables Forgejo natives et ajouter le workflow de mise à jour automatique des dépendances 2026-09-16 00:56:02 -04:00
eslint.config.js test: ajout de @vitest/coverage-v8 et du script test:coverage 2026-09-10 22:08:26 -04:00
favicon.ico Ajout du favicon multi-résolution et de l'icône tactile Apple. 2026-07-19 11:51:12 -04:00
index.html ci: améliorations complètes des workflows et du code 2026-09-13 11:32:10 -04:00
manifest.json chore: améliorations PWA, accessibilité et qualité 2026-09-11 20:20:33 -04:00
package-lock.json chore: améliorations PWA, accessibilité et qualité 2026-09-11 20:20:33 -04:00
package.json test: ajout de @vitest/coverage-v8 et du script test:coverage 2026-09-10 22:08:26 -04:00
README.md docs: mise à jour du README et revert du lien de commit 2026-09-12 16:42:44 -04:00
robots.txt ci: améliorations complètes des workflows et du code 2026-09-13 11:32:10 -04:00
script.js chore: améliorations PWA, accessibilité et qualité 2026-09-11 20:20:33 -04:00
sitemap.xml fix: corriger le cache SW et automatiser le lastmod sitemap 2026-09-10 22:59:29 -04:00
style.css chore: améliorations PWA, accessibilité et qualité 2026-09-11 20:20:33 -04:00
sw.js ci: améliorations complètes des workflows et du code 2026-09-13 11:32:10 -04:00
test-html.js fix: validation HTML hors-ligne via html-validate + conformité HTML 2026-09-05 13:33:59 -04:00
theme-init.js fix: améliorations de robustesse et accessibilité 2026-09-10 16:09:33 -04:00
vitest.config.js test: ajout de @vitest/coverage-v8 et du script test:coverage 2026-09-10 22:08:26 -04:00

manu.quebec — Libre et fédéré

Valider, minimifier et déployer HTML5 CSS3 JavaScript

Site web personnel de Manu — Administrateur système Linux, passionné du Fédivers et du protocole ActivityPub.

Demo : https://manu.quebec

Stack technique

  • Site statique HTML/CSS/JS natif (aucun framework)
  • Polices : Inter (5 graisses) + JetBrains Mono (2 graisses), auto-hébergées en WOFF2
  • Node.js 24 (CI) pour les outils de validation et minification
  • PWA : Service Worker avec cache versionné par commit

Structure du projet

index.html       → Page unique (lang=fr, OG, Twitter Cards, JSON-LD inline)
style.css        → ~1740 lignes, variables CSS, thèmes sombre/clair, animations
theme-init.js    → Initialisation immédiate du thème dans le <head> (anti-flash)
script.js        → Menu mobile, animations au défilement, modale QR, bascule de
                   thème, verrou de défilement partagé, pause onglet caché,
                   enregistrement du Service Worker
sw.js            → Service Worker PWA (cache versionné par %%COMMIT_HASH%%)
manifest.json    → Manifeste PWA (standalone, theme_color #0A0F1C)
build.sh         → Minification + optimisation PNG + injection placeholders
test/            → 4 suites vitest (structure DOM, styles CSS, thème, script)
test-html.js     → Validation HTML (vnu W3C ou repli local html-validate)
images/          → Logo, avatar, code QR, icônes PWA 192/512, og-image
polices/         → Inter + JetBrains Mono (WOFF2)
robots.txt       → Bloque les bots IA/scraping, autorise le reste
sitemap.xml      → Sitemap avec %%BUILD_DATE%% (remplacé à la build)

Développement

Aucune étape de build pour le développement. Ouvrir index.html directement ou servir localement :

npx serve .                    # serveur local
python3 -m http.server 8000    # alternative

npm install
npm test    # 4 couches : html-validate → stylelint → eslint → vitest (42 tests)

Build

En CI, chaque fichier est minifié (terser, clean-css-cli, html-minifier-terser), les PNG sont optimisés (pngquant lossy puis oxipng lossless, étape best-effort), et les placeholders %%COMMIT_SOURCE_URL%% / %%COMMIT_HASH%% sont remplacés par les valeurs du commit. Le résultat est poussé en force-push vers la branche dist.

npm run build   # produit dist/ avec statistiques de compression

Fonctionnalités

  • CSP : servie par Caddy (en-tête HTTP, pas dans le HTML) — default-src 'none', script-src 'self' strict, style-src 'self', complétée par HSTS, X-Content-Type-Options: nosniff, Referrer-Policy, Permissions-Policy
  • PWA : manifest.json + Service Worker (Network First pour HTML, Cache First pour les assets statiques, page hors-ligne de secours)
  • Thème clair/sombre : bascule dans la navigation, préférence sauvegardée (localStorage), suivi de prefers-color-scheme, init anti-flash dans le <head>
  • Accessibilité : lien d'évitement, .sr-only, prefers-reduced-motion, modale QR navigable au clavier avec piège de focus, verrou de défilement partagé, repli sans IntersectionObserver
  • Open Graph / Twitter Cards : summary_large_image, locale fr_CA
  • JSON-LD inline : données structurées Schema.org dans le <head>
  • Responsive : breakpoints 900px, 768px et 480px

Infrastructure

  • Hébergement : VPS chez OVHcloud derrière Caddy (reverse proxy)
  • CI/CD : Forgejo Actions — push main → tests → build → force-push dist → webhook