Skip to content

Commit 41eb0d3

Browse files
ferr079claude
andcommitted
fix: harmonize stats across all pages
- SSO Authentik: 8 → 6 (actual: Forgejo, Immich, Semaphore, Proxmox×2, Jellyfin) - Ansible playbooks: 13 → 12 (actual Semaphore template count) - HTTPS services: 20+ → 25+ (28 traefik conf.d files) - Defensive layers: 6 → 7 (7 sections on security page) Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 5c4e70b commit 41eb0d3

8 files changed

Lines changed: 22 additions & 22 deletions

File tree

src/pages/fr/index.astro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ const cards = [
4242
{
4343
icon: '&#9881;',
4444
title: 'IaC, CI/CD & Automatisation',
45-
description: 'Ansible via Semaphore pour le déploiement — 13 playbooks couvrent du hardening SSH au déploiement d\'agents. CI/CD sur Forgejo Runner (Podman). Configs versionnées. Unattended upgrades partout.',
45+
description: 'Ansible via Semaphore pour le déploiement — 12 playbooks couvrent du hardening SSH au déploiement d\'agents. CI/CD sur Forgejo Runner (Podman). Configs versionnées. Unattended upgrades partout.',
4646
tags: ['Ansible', 'Semaphore', 'Forgejo Runner', 'CI/CD'],
4747
},
4848
{

src/pages/fr/infrastructure.astro

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const serviceSlides = [
99
{ src: '/images/services/traefik.webp', alt: 'Dashboard Traefik — routers, services, middlewares', title: 'Traefik — Reverse Proxy' },
1010
{ src: '/images/services/authentik.webp', alt: 'Admin Authentik — dashboard SSO avec stats connexion', title: 'Authentik — SSO / IdP' },
1111
{ src: '/images/services/technitium.webp', alt: 'TechnitiumDNS — stats requêtes et top clients', title: 'TechnitiumDNS — Serveur DNS' },
12-
{ src: '/images/services/semaphore.webp', alt: 'Semaphore — 13 templates de tâches Ansible', title: 'Semaphore — UI Ansible' },
12+
{ src: '/images/services/semaphore.webp', alt: 'Semaphore — 12 templates de tâches Ansible', title: 'Semaphore — UI Ansible' },
1313
{ src: '/images/services/netbox.webp', alt: 'NetBox — inventaire IPAM et changelog', title: 'NetBox — IPAM / DCIM' },
1414
{ src: '/images/services/immich.webp', alt: 'Immich — galerie photo avec classification IA', title: 'Immich — Photothèque' },
1515
{ src: '/images/services/bytestash.webp', alt: 'ByteStash — gestionnaire de snippets', title: 'ByteStash — Snippets' },
@@ -171,7 +171,7 @@ const monitoringSlides = [
171171
<div class="tech-card-body">
172172
<p class="tech-why"><strong>Pourquoi :</strong> Config dynamique en YAML rechargee a chaud — j'ajoute un service HTTPS en deposant un fichier dans <code>conf.d/</code>, sans restart. ACME natif avec step-ca.</p>
173173
<p class="tech-alt"><span class="alt-label">Ecartes :</span> Nginx Proxy Manager (UI-only, pas IaC), Caddy (moins d'integrations reverse proxy)</p>
174-
<p class="tech-result"><span class="result-label">Resultat :</span> 20+ services HTTPS, certificats auto-renouveles, zero intervention manuelle</p>
174+
<p class="tech-result"><span class="result-label">Resultat :</span> 25+ services HTTPS, certificats auto-renouveles, zero intervention manuelle</p>
175175
</div>
176176
</div>
177177

@@ -207,7 +207,7 @@ const monitoringSlides = [
207207
<div class="tech-card-body">
208208
<p class="tech-why"><strong>Pourquoi :</strong> OAuth2/OIDC universel — chaque service a son propre provider. Forward-auth proxy pour les services sans SSO natif. WebAuthn (YubiKey) pour le MFA.</p>
209209
<p class="tech-alt"><span class="alt-label">Ecartes :</span> Keycloak (Java lourd, 1 Go+ RAM), Authelia (moins flexible sur les flows custom)</p>
210-
<p class="tech-result"><span class="result-label">Resultat :</span> SSO sur 8 services hétérogènes, un seul login pour tout le homelab</p>
210+
<p class="tech-result"><span class="result-label">Resultat :</span> SSO sur 6 services hétérogènes, un seul login pour tout le homelab</p>
211211
</div>
212212
</div>
213213

@@ -219,7 +219,7 @@ const monitoringSlides = [
219219
<div class="tech-card-body">
220220
<p class="tech-why"><strong>Pourquoi :</strong> Agentless — SSH suffit, pas de daemon a installer sur 30+ CTs. Idempotent — je relance un playbook sans risque. Semaphore ajoute une UI web pour les lancements en 1 clic.</p>
221221
<p class="tech-alt"><span class="alt-label">Ecartes :</span> Puppet/Chef (agents sur chaque hote), Terraform (provisioning, pas config management)</p>
222-
<p class="tech-result"><span class="result-label">Resultat :</span> 13 playbooks operationnels, deploiement d'agent Wazuh/Beszel en 1 commande</p>
222+
<p class="tech-result"><span class="result-label">Resultat :</span> 12 playbooks operationnels, deploiement d'agent Wazuh/Beszel en 1 commande</p>
223223
</div>
224224
</div>
225225

src/pages/fr/securite.astro

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ import StatsBar from '../../components/StatsBar.astro';
4141
<span class="layer-icon">&#9678;</span>
4242
<div>
4343
<h4>Couche identité</h4>
44-
<p>Authentik SSO (8 services), YubiKey FIDO2, SSH key-only sur 30+ hôtes</p>
44+
<p>Authentik SSO (6 services), YubiKey FIDO2, SSH key-only sur 30+ hôtes</p>
4545
</div>
4646
</div>
4747
<div class="defense-layer">
@@ -91,7 +91,7 @@ import StatsBar from '../../components/StatsBar.astro';
9191
</div>
9292
<div class="spec">
9393
<span class="spec-label">Résultat</span>
94-
<span class="spec-value">20+ services en HTTPS valide, cadenas vert, zéro avertissement navigateur</span>
94+
<span class="spec-value">25+ services en HTTPS valide, cadenas vert, zéro avertissement navigateur</span>
9595
</div>
9696
</div>
9797
</div>
@@ -106,7 +106,7 @@ import StatsBar from '../../components/StatsBar.astro';
106106
<h2>SSO Authentik — un login pour tout</h2>
107107
</div>
108108
<div class="layer-content">
109-
<p>Authentik centralise l'authentification sur <strong>8 services</strong> via OAuth2/OIDC. Un seul couple identifiant/mot de passe, un seul point de contrôle, un seul endroit où révoquer un accès. La phase 2 supprimera les logins locaux — SSO-only + YubiKey WebAuthn.</p>
109+
<p>Authentik centralise l'authentification sur <strong>6 services</strong> via OAuth2/OIDC. Un seul couple identifiant/mot de passe, un seul point de contrôle, un seul endroit où révoquer un accès. La phase 2 supprimera les logins locaux — SSO-only + YubiKey WebAuthn.</p>
110110
<div class="details-grid">
111111
<div class="detail">
112112
<h4>Services intégrés</h4>
@@ -263,8 +263,8 @@ import StatsBar from '../../components/StatsBar.astro';
263263

264264
<StatsBar stats={[
265265
{ number: '32', label: 'hosts SSH durci' },
266-
{ number: '8', label: 'services SSO' },
267-
{ number: '6', label: 'couches défensives' },
266+
{ number: '6', label: 'SSO' },
267+
{ number: '7', label: 'couches défensives' },
268268
{ number: '0', label: 'mot de passe SSH' },
269269
]} />
270270

src/pages/fr/symbiose.astro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ import StatsBar from '../../components/StatsBar.astro';
154154
{ number: '1M', label: 'tokens de contexte' },
155155
{ number: '6', label: 'serveurs MCP' },
156156
{ number: '30+', label: 'conteneurs gérés' },
157-
{ number: '8', label: 'services SSO' },
157+
{ number: '6', label: 'SSO' },
158158
]} />
159159

160160
<!-- Crosslink projets -->

src/pages/index.astro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ const cards = [
4242
{
4343
icon: '&#9881;',
4444
title: 'IaC, CI/CD & Automation',
45-
description: 'Ansible via Semaphore for deployment — 13 playbooks covering everything from SSH hardening to agent deployment. CI/CD on Forgejo Runner (Podman). Version-controlled configs. Unattended upgrades everywhere.',
45+
description: 'Ansible via Semaphore for deployment — 12 playbooks covering everything from SSH hardening to agent deployment. CI/CD on Forgejo Runner (Podman). Version-controlled configs. Unattended upgrades everywhere.',
4646
tags: ['Ansible', 'Semaphore', 'Forgejo Runner', 'CI/CD'],
4747
},
4848
{

src/pages/infrastructure.astro

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const serviceSlides = [
99
{ src: '/images/services/traefik.webp', alt: 'Traefik dashboard — routers, services, middlewares', title: 'Traefik — Reverse Proxy' },
1010
{ src: '/images/services/authentik.webp', alt: 'Authentik admin — SSO dashboard with login stats', title: 'Authentik — SSO / IdP' },
1111
{ src: '/images/services/technitium.webp', alt: 'TechnitiumDNS — query stats and top clients', title: 'TechnitiumDNS — DNS Server' },
12-
{ src: '/images/services/semaphore.webp', alt: 'Semaphore — 13 Ansible task templates', title: 'Semaphore — Ansible UI' },
12+
{ src: '/images/services/semaphore.webp', alt: 'Semaphore — 12 Ansible task templates', title: 'Semaphore — Ansible UI' },
1313
{ src: '/images/services/netbox.webp', alt: 'NetBox — IPAM inventory and changelog', title: 'NetBox — IPAM / DCIM' },
1414
{ src: '/images/services/immich.webp', alt: 'Immich — photo gallery with AI classification', title: 'Immich — Photo Library' },
1515
{ src: '/images/services/bytestash.webp', alt: 'ByteStash — code snippet manager', title: 'ByteStash — Snippets' },
@@ -171,7 +171,7 @@ const monitoringSlides = [
171171
<div class="tech-card-body">
172172
<p class="tech-why"><strong>Why:</strong> Dynamic YAML config hot-reloaded — I add an HTTPS service by dropping a file in <code>conf.d/</code>, no restart needed. Native ACME with step-ca.</p>
173173
<p class="tech-alt"><span class="alt-label">Rejected:</span> Nginx Proxy Manager (UI-only, not IaC), Caddy (fewer reverse proxy integrations)</p>
174-
<p class="tech-result"><span class="result-label">Result:</span> 20+ HTTPS services, auto-renewed certificates, zero manual intervention</p>
174+
<p class="tech-result"><span class="result-label">Result:</span> 25+ HTTPS services, auto-renewed certificates, zero manual intervention</p>
175175
</div>
176176
</div>
177177

@@ -207,7 +207,7 @@ const monitoringSlides = [
207207
<div class="tech-card-body">
208208
<p class="tech-why"><strong>Why:</strong> Universal OAuth2/OIDC — each service gets its own provider. Forward-auth proxy for services without native SSO. WebAuthn (YubiKey) for MFA.</p>
209209
<p class="tech-alt"><span class="alt-label">Rejected:</span> Keycloak (heavy Java, 1 GB+ RAM), Authelia (less flexible on custom flows)</p>
210-
<p class="tech-result"><span class="result-label">Result:</span> SSO across 8 heterogeneous services, single login for the entire homelab</p>
210+
<p class="tech-result"><span class="result-label">Result:</span> SSO across 6 heterogeneous services, single login for the entire homelab</p>
211211
</div>
212212
</div>
213213

@@ -219,7 +219,7 @@ const monitoringSlides = [
219219
<div class="tech-card-body">
220220
<p class="tech-why"><strong>Why:</strong> Agentless — SSH is enough, no daemon to install on 30+ CTs. Idempotent — I rerun a playbook without risk. Semaphore adds a web UI for one-click launches.</p>
221221
<p class="tech-alt"><span class="alt-label">Rejected:</span> Puppet/Chef (agents on every host), Terraform (provisioning, not config management)</p>
222-
<p class="tech-result"><span class="result-label">Result:</span> 13 operational playbooks, Wazuh/Beszel agent deployment in 1 command</p>
222+
<p class="tech-result"><span class="result-label">Result:</span> 12 operational playbooks, Wazuh/Beszel agent deployment in 1 command</p>
223223
</div>
224224
</div>
225225

src/pages/securite.astro

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ import StatsBar from '../components/StatsBar.astro';
4141
<span class="layer-icon">&#9678;</span>
4242
<div>
4343
<h4>Identity layer</h4>
44-
<p>Authentik SSO (8 services), YubiKey FIDO2, SSH key-only on 30+ hosts</p>
44+
<p>Authentik SSO (6 services), YubiKey FIDO2, SSH key-only on 30+ hosts</p>
4545
</div>
4646
</div>
4747
<div class="defense-layer">
@@ -91,7 +91,7 @@ import StatsBar from '../components/StatsBar.astro';
9191
</div>
9292
<div class="spec">
9393
<span class="spec-label">Result</span>
94-
<span class="spec-value">20+ services with valid HTTPS, green padlock, zero browser warnings</span>
94+
<span class="spec-value">25+ services with valid HTTPS, green padlock, zero browser warnings</span>
9595
</div>
9696
</div>
9797
</div>
@@ -106,7 +106,7 @@ import StatsBar from '../components/StatsBar.astro';
106106
<h2>SSO Authentik — one login for everything</h2>
107107
</div>
108108
<div class="layer-content">
109-
<p>Authentik centralizes authentication across <strong>8 services</strong> via OAuth2/OIDC. One set of credentials, one control point, one place to revoke access. Phase 2 will remove local logins — SSO-only + YubiKey WebAuthn.</p>
109+
<p>Authentik centralizes authentication across <strong>6 services</strong> via OAuth2/OIDC. One set of credentials, one control point, one place to revoke access. Phase 2 will remove local logins — SSO-only + YubiKey WebAuthn.</p>
110110
<div class="details-grid">
111111
<div class="detail">
112112
<h4>Integrated services</h4>
@@ -263,8 +263,8 @@ import StatsBar from '../components/StatsBar.astro';
263263

264264
<StatsBar stats={[
265265
{ number: '32', label: 'hardened SSH hosts' },
266-
{ number: '8', label: 'SSO services' },
267-
{ number: '6', label: 'defensive layers' },
266+
{ number: '6', label: 'SSO services' },
267+
{ number: '7', label: 'defensive layers' },
268268
{ number: '0', label: 'SSH passwords' },
269269
]} />
270270

src/pages/symbiose.astro

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ import StatsBar from '../components/StatsBar.astro';
154154
{ number: '1M', label: 'context tokens' },
155155
{ number: '6', label: 'MCP servers' },
156156
{ number: '30+', label: 'managed containers' },
157-
{ number: '8', label: 'SSO services' },
157+
{ number: '6', label: 'SSO services' },
158158
]} />
159159

160160
<!-- Crosslink projects -->

0 commit comments

Comments
 (0)