Pages détail numérique : sommaire flottant, nav ctx, shadoks geek, contenu enrichi
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful

- [slug].vue : sommaire sticky (overflow:clip sur parent), prev/next en haut, 6 shadoks geek (pinguin+USB, web-of-trust, rubber-duck, caféine, debugger loupe, rack serveur)
- Nouveaux types de sections : territoire (bouquet sweethomeCloud, 2 modèles éco, tableau matériel dépliable), projet (carte gestation)
- cloud-libre.yml : section sweethomeCloud complète avec infra 50 000 hab. (~2€/an/hab)
- authentification-wot.yml : trustWallet, correction WoT Duniter (Ed25519+Scrypt, sigQty=5, stepMax=3), DID/VC standards
- logiciel-libre.yml : carte projet wishBounty
- home.yml + numerique.yml : cloud-libre → sweethomeCloud, description RGPD/local-first
- AxisBlock.vue : bulles de présentation inline dans les cards (plus de tooltip absolu)
- Analytics : useTracking.ts (Umami), docker-compose.umami.yml, /api/stats fédération
- nuxt.config.ts : config Umami runtime

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Yvv
2026-03-16 04:40:48 +01:00
parent 9d92c4a5b3
commit 07449de187
14 changed files with 2776 additions and 67 deletions

View File

@@ -50,10 +50,26 @@ Les fichiers YAML sont dans `site/pages/`, organisés en sous-dossiers par secti
- Overrides light mode dans `main.css` (`.palette-light .text-white` → couleur adaptive)
- Admin : tous les `color: white` dans les composants admin sont remplacés par `hsl(var(--color-text))` sauf les boutons sur fond `hsl(var(--color-primary))` (`AdminSaveButton`, `.login-btn`)
## Navigation contextuelle — pages détail
`[slug].vue` (numérique, citoyenne) embarque :
- **Prev/next** (`ctx-nav`) en haut de page — liens vers les pages adjacentes dans la section
- **Sommaire flottant** (`.sommaire-sidebar`, `position: sticky`) dans un aside absolu à droite — visible ≥ 1300px, `overflow: clip` sur le parent pour ne pas casser le sticky
Les ancres sont des `<div :id="\`s${si}\`" class="section-anchor">` avec `scroll-margin-top: 5.5rem` (offset header fixe).
## Types de sections YAML
`[slug].vue` supporte : `arguments`, `fiche`, `equivalents`, `llm`, `atelier`, `links`, `insight`, `tiers`, `projet`, `territoire`.
`type: territoire` : économies alternatives (euro/Ğ1), grille bouquet de services, tableau matériel dépliable (`<details>`).
`type: projet` : carte gestation avec grille de features.
## Shadoks
Illustrations SVG inline sur chaque page, thématiques par section :
- Numérique : métiers tech/industrie (codeuse, électricien, soudeuse...)
- Numérique index : métiers tech/industrie (codeuse, électricien, soudeuse, cryptographe...)
- Numérique détail : postures geek (pinguin+USB, web-of-trust, rubber duck, caféine, rack serveur, debugger loupe)
- Économique : artisanat/agriculture (boulangère, potier, forgeron...)
- Citoyenne : navigation/justice/théâtre (capitaine, avocate, comédien...)
- Modèle éco : livre/édition (typographe, calligraphe, conteuse...)
@@ -61,6 +77,13 @@ Illustrations SVG inline sur chaque page, thématiques par section :
Règles : corps compact, longues pattes, grands pieds plats, bec pointu, postures variées.
CSS : `position: absolute`, `pointer-events: none`, `opacity 0.18-0.28`, animation float, `display: none` sur mobile.
Parent avec `overflow: clip` (pas `overflow: hidden` qui casserait `position: sticky`).
## Analytics
`app/composables/useTracking.ts` — wrapper Umami. Activé si `NUXT_PUBLIC_UMAMI_WEBSITE_ID` est défini.
`server/api/stats/index.get.ts` — endpoint public pour la fédération inter-instances (observatoires territoire).
`docker/docker-compose.umami.yml` — stack Umami + PostgreSQL avec labels Traefik.
## Redirections

View File

@@ -62,6 +62,12 @@ pnpm build # Build production
Port réservé : **3000** (ne pas changer).
## Analytics
Umami self-hosted (optionnel). Configurer `NUXT_PUBLIC_UMAMI_WEBSITE_ID` et `NUXT_PUBLIC_UMAMI_URL` dans l'environnement.
Déploiement séparé : `docker/docker-compose.umami.yml``stats.librodrome.org`.
Stats publiques exposées via `/api/stats` pour la fédération inter-instances.
## Déploiement
Docker + Traefik, CI via Woodpecker. Domaine : `librodrome.org`.

View File

@@ -17,6 +17,18 @@
const paletteStore = usePaletteStore()
onMounted(() => paletteStore.applyToDOM())
// Umami analytics — inject script only when configured
const runtimeConfig = useRuntimeConfig()
if (runtimeConfig.public.umamiWebsiteId && runtimeConfig.public.umamiUrl) {
useHead({
script: [{
src: `${runtimeConfig.public.umamiUrl}/script.js`,
defer: true,
'data-website-id': runtimeConfig.public.umamiWebsiteId,
}],
})
}
useHead({
titleTemplate: (title) => {
return title ? `${title} — Le Librodrome` : 'Le librodrome'

View File

@@ -37,6 +37,15 @@
</h3>
<p class="text-sm text-white/60 leading-relaxed">{{ item.description }}</p>
<!-- Presentation inline (projet en gestation) -->
<div v-if="item.presentation" class="axis-presentation-inline">
<div class="axis-pi-header">
<div class="i-lucide-sparkles h-3 w-3" />
<span class="axis-pi-title">{{ item.presentation.title }}</span>
</div>
<p class="axis-pi-text">{{ item.presentation.text }}</p>
</div>
</component>
<!-- Actions zone (separate from card link) -->
@@ -173,7 +182,7 @@ function itemAttrs(item: AxisItem) {
border: 1px solid hsl(var(--color-text) / 0.08);
background: hsl(var(--color-surface));
transition: border-color 0.2s, box-shadow 0.2s;
overflow: hidden;
/* overflow: visible pour laisser le tooltip sortir du cadre */
}
.axis-item:hover {
@@ -248,6 +257,8 @@ function itemAttrs(item: AxisItem) {
gap: 0;
border-top: 1px solid hsl(var(--color-text) / 0.06);
background: hsl(var(--color-bg) / 0.4);
border-bottom-left-radius: 0.75rem;
border-bottom-right-radius: 0.75rem;
}
.axis-actions-row {
@@ -309,4 +320,34 @@ function itemAttrs(item: AxisItem) {
background: hsl(var(--color-accent) / 0.08);
border-color: hsl(var(--color-accent) / 0.2);
}
/* Presentation inline — projet en gestation, affiché dans la card */
.axis-presentation-inline {
margin-top: 0.75rem;
padding: 0.5rem 0.75rem;
border-radius: 8px;
background: hsl(var(--color-accent) / 0.07);
border: 1px solid hsl(var(--color-accent) / 0.18);
}
.axis-pi-header {
display: flex;
align-items: center;
gap: 0.3rem;
margin-bottom: 0.2rem;
color: hsl(var(--color-accent));
}
.axis-pi-title {
font-size: 0.75rem;
font-weight: 700;
letter-spacing: 0.02em;
}
.axis-pi-text {
font-size: 0.72rem;
color: hsl(var(--color-text) / 0.55);
line-height: 1.45;
margin: 0;
}
</style>

View File

@@ -0,0 +1,20 @@
/**
* Umami analytics wrapper — safe server-side, no-op when not configured.
* Usage: const { track } = useTracking()
* track('player:open')
* track('axis:navigate', { axis: 'numerique' })
*/
export function useTracking() {
const runtimeConfig = useRuntimeConfig()
const enabled = !!runtimeConfig.public.umamiWebsiteId
function track(event: string, data?: Record<string, unknown>) {
if (!import.meta.client || !enabled) return
const umami = (window as Record<string, unknown>).umami as
| { track: (event: string, data?: unknown) => void }
| undefined
umami?.track(event, data)
}
return { track, enabled }
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,52 @@
## Umami analytics — déployer avec le compose principal
## Usage : docker compose -f docker-compose.yml -f docker-compose.umami.yml up -d
##
## Variables à définir dans .env :
## UMAMI_DB_PASSWORD — mot de passe PostgreSQL Umami (générer avec openssl rand -hex 32)
## UMAMI_APP_SECRET — secret applicatif (générer avec openssl rand -hex 32)
## UMAMI_DOMAIN — ex: stats.librodrome.org
name: librodrome
services:
umami:
image: ghcr.io/umami-software/umami:postgresql-latest
environment:
DATABASE_URL: postgresql://umami:${UMAMI_DB_PASSWORD}@umami-db:5432/umami
DATABASE_TYPE: postgresql
APP_SECRET: ${UMAMI_APP_SECRET}
depends_on:
umami-db:
condition: service_healthy
restart: always
labels:
- "traefik.enable=true"
- "traefik.http.routers.umami.rule=Host(`${UMAMI_DOMAIN:-stats.librodrome.org}`)"
- "traefik.http.routers.umami.entrypoints=websecure"
- "traefik.http.routers.umami.tls.certresolver=letsencrypt"
- "traefik.http.services.umami.loadbalancer.server.port=3000"
networks:
- default
- traefik
umami-db:
image: postgres:15-alpine
environment:
POSTGRES_DB: umami
POSTGRES_USER: umami
POSTGRES_PASSWORD: ${UMAMI_DB_PASSWORD}
volumes:
- umami-db-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U umami"]
interval: 5s
timeout: 5s
retries: 10
restart: always
volumes:
umami-db-data:
networks:
traefik:
external: true

View File

@@ -29,6 +29,12 @@ export default defineNuxtConfig({
'i-lucide-rocket', 'i-lucide-flask-conical', 'i-lucide-arrow-right',
// Decision page
'i-lucide-vote', 'i-lucide-scroll-text', 'i-lucide-git-branch',
// sweethomeCloud + territoire
'i-lucide-home', 'i-lucide-hard-drive', 'i-lucide-video',
'i-lucide-message-circle', 'i-lucide-bot', 'i-lucide-globe-2',
'i-lucide-map-pin', 'i-lucide-euro', 'i-lucide-package',
'i-lucide-settings', 'i-lucide-layout-grid', 'i-lucide-server',
'i-lucide-chevron-down', 'i-lucide-info',
],
},
@@ -56,8 +62,12 @@ export default defineNuxtConfig({
runtimeConfig: {
adminPassword: '',
adminSecret: '',
umamiApiKey: '',
public: {
siteUrl: 'https://librodrome.org',
tenantId: 'librodrome',
umamiUrl: '',
umamiWebsiteId: '',
},
},

View File

@@ -0,0 +1,43 @@
/**
* GET /api/stats
* Public stats endpoint — proxies Umami for cross-instance federation / observatoires.
* Each librodrome instance exposes its own metrics here.
* Observatoires call this endpoint on each instance and aggregate.
*
* Env vars required (private, server-side):
* NUXT_UMAMI_API_KEY — Umami API key (read-only)
* NUXT_UMAMI_WEBSITE_ID — Umami website ID (internal, server-side)
* NUXT_PUBLIC_UMAMI_URL — Umami base URL
* NUXT_PUBLIC_TENANT_ID — e.g. "librodrome" or "librodrome-bordeaux"
*/
export default defineEventHandler(async () => {
const config = useRuntimeConfig()
const { umamiApiKey } = config
const { umamiUrl, umamiWebsiteId, tenantId } = config.public
if (!umamiApiKey || !umamiUrl || !umamiWebsiteId) {
return { tenant: tenantId, configured: false }
}
const endAt = Date.now()
const startAt = endAt - 30 * 24 * 60 * 60 * 1000 // 30 days
const [stats, pageviews] = await Promise.all([
$fetch<Record<string, unknown>>(`${umamiUrl}/api/websites/${umamiWebsiteId}/stats`, {
headers: { 'x-umami-api-key': umamiApiKey },
query: { startAt, endAt },
}).catch(() => null),
$fetch<Record<string, unknown>>(`${umamiUrl}/api/websites/${umamiWebsiteId}/pageviews`, {
headers: { 'x-umami-api-key': umamiApiKey },
query: { startAt, endAt, unit: 'day', timezone: 'Europe/Paris' },
}).catch(() => null),
])
return {
tenant: tenantId,
configured: true,
period: '30d',
stats,
pageviews,
}
})

View File

@@ -42,7 +42,7 @@ axes:
icon: monitor
items:
- label: Logiciel libre
description: Maîtriser le code source, c'est maîtriser l'outil. Le logiciel libre est la base de l'autonomie numérique.
description: "Passer à Linux, adopter des équivalents libres, un assistant shell local sans cloud — guide de migration et atelier au prochain Librodrome."
to: /numerique/logiciel-libre
gestation: true
icon: code-2
@@ -50,7 +50,7 @@ axes:
title: wishBounty
text: Application pour le financement fléché des développements.
- label: Authentification — WoT
description: Une toile de confiance décentralisée, sans autorité centrale. Chaque identité est certifiée par ses pairs.
description: "Une clé pour les accès, une signature pour les actes. Le seul système sans autorité centrale ni biométrie — DID W3C, Duniter, EUDI Wallet 2026."
to: /numerique/authentification-wot
gestation: true
icon: share-2
@@ -58,13 +58,13 @@ axes:
title: trustWallet
text: Gestionnaire de confiances.
- label: Cloud libre
description: Héberger ses propres services pour ne dépendre de personne. Serveurs, noms de domaine, infrastructure.
description: "Sortir des datacenters — auto-hébergement, web3, IPFS, local-first. Conformité RGPD et droit à l'oubli."
to: /numerique/cloud-libre
gestation: true
icon: cloud
presentation:
title: Bouquet de services
text: "Un bouquet de services complet : Drive, Visio, Forum, Wiki, CMS. IA frugale localisée."
title: sweethomeCloud
text: "Bouquet de services libres auto-hébergés — clé en main."
economie:
title: Autonomie économique
icon: coins

View File

@@ -42,7 +42,7 @@ pillars:
Un bouquet de services complet — Drive, Visio, Forum, Wiki, CMS —
et demain, une IA frugale localisée.
project:
name: Bouquet de services
text: "Drive, Visio, Forum, Wiki, CMS. IA frugale localisée."
name: sweethomeCloud
text: "Bouquet de services libres auto-hébergés — clé en main pour chaque territoire."
gestation: true
to: /numerique/cloud-libre

View File

@@ -1,22 +1,208 @@
meta:
title: Authentification WoT — Autonomie numérique
title: Authentification WoT — Identité numérique décentralisée
kicker: Autonomie numérique
title: "Authentification — WoT"
icon: share-2
gestation: true
description: >
Une toile de confiance décentralisée, sans autorité centrale.
Chaque identité est certifiée par ses pairs — pas par un serveur,
pas par une entreprise. C'est le fondement de la monnaie libre Ğ1
et de toute gouvernance entre égaux.
Vous avez les outils, vous maîtrisez votre infrastructure.
Reste la pièce manquante : une identité numérique qui n'appartient qu'à vous.
Pas de biométrie, pas d'autorité centrale — une clé, et une toile de confiance.
C'est le seul système qui les évite tous les deux.
project:
name: trustWallet
text: Gestionnaire de confiances.
text: Gestionnaire de confiances — accès, permissions, DID/UCAN/VC sur clés certifiées Duniter.
gestation: true
content: >
La Web of Trust (toile de confiance) est un mécanisme d'authentification
décentralisé où chaque participant certifie l'identité des autres.
Aucune autorité centrale n'est nécessaire — la confiance émerge du réseau.
sections:
- type: arguments
title: Pourquoi l'authentification actuelle est un problème
items:
- icon: lock
title: Mots de passe
text: >
Stockés côté serveur, volés par millions. Have I Been Pwned recense
des milliards de comptes compromis. Ta sécurité dépend intégralement
de la sécurité d'un tiers que tu ne contrôles pas.
- icon: chrome
title: "Se connecter avec Google"
text: >
Déléguer l'authentification à Google ou Meta, c'est en faire l'infrastructure
d'identité mondiale. Un compte suspendu = toutes tes connexions coupées.
Ces entreprises savent quand, où et à quoi tu te connectes.
- icon: fingerprint
title: Biométrie — irrévocable
text: >
Un mot de passe compromis se change. Une empreinte digitale jamais.
Si tes données biométriques sont volées — et elles l'ont été
(OPM breach USA 2015, 5,6 millions d'empreintes) — la compromission est définitive.
- icon: building-2
title: Autorités de Certification (X.509)
text: >
HTTPS repose sur ~130 CA mondiales. DigiNotar (2011), Symantec (2015) :
des CA compromises ont permis des attaques sur des millions d'utilisateurs.
La confiance sur le web est centralisée chez Google, Apple et Microsoft.
- type: fiche
title: Comment fonctionne une Web of Trust
steps:
- n: 1
title: Générer une paire de clés sur ta machine
text: >
Clé privée (secrète, ne quitte jamais ton appareil) et clé publique
(diffusée librement). Ce qui est signé avec la clé privée peut être
vérifié par n'importe qui avec la clé publique.
tip: "Algorithme recommandé : Ed25519 — clé courte, rapide, sans paramètres douteux"
- n: 2
title: Publier ta clé publique
text: >
Dans un DID Document, sur un keyserver, dans ton profil Duniter.
N'importe qui peut vérifier tes signatures. Personne ne peut usurper
ton identité sans ta clé privée.
- n: 3
title: Être certifié par des membres certifiés
text: >
Dans Duniter, 5 membres certifiés (sigQty=5) certifient que tu es une personne réelle,
dans un rayon de 3 sauts du nœud sentinelle (stepMax=3).
La confiance émerge du graphe — pas d'un serveur central.
- n: 4
title: La confiance se propage dans le graphe
text: >
Plus un nœud est certifié par des membres eux-mêmes bien certifiés,
plus son identité est robuste. Théorie des graphes appliquée à l'identité —
sans juge, sans notaire, sans serveur.
- n: 5
title: Une clé pour les accès, une signature pour les actes
text: >
La même clé permet de s'authentifier à des services
et de signer des actes (documents, transactions, votes).
Tout ce que tu fais est vérifiable. Rien n'est transmissible à ton insu.
- type: insight
title: Le seul système sans autorité centrale ni biométrie
icon: shield-check
variant: info
text: >
Toute authentification mainstream dépend d'au moins une entité centrale :
mot de passe (le serveur), OAuth (Google ou Meta), biométrie (le fabricant ou l'État),
HTTPS (les Autorités de Certification). La Web of Trust distribue la confiance
dans le réseau lui-même — structurellement différent.
Les standards W3C (DID 2022, VC 2025) et l'EUDI Wallet européen (fin 2026)
montrent que cette architecture sort des cercles militants
pour entrer dans la politique numérique des États.
points:
- "DID v1.0 : Recommandation W3C finale — juillet 2022"
- "Verifiable Credentials v2.0 : Recommandation W3C finale — mai 2025"
- "eIDAS 2.0 (UE) : wallet d'identité numérique pour chaque citoyen européen avant fin 2026"
- "Duniter/Ğ1 : seule blockchain avec WoT intégrée comme mécanisme de gouvernance du protocole"
- type: equivalents
title: De l'ancien modèle aux standards décentralisés
categories:
- label: Authentification
items:
- from: Mot de passe
to: "Clé Ed25519 + WebAuthn"
url: https://webauthn.io
note: Signature cryptographique — aucun secret côté serveur
- from: "Se connecter avec Google"
to: SIOPv2 + wallet DID
url: https://openid.net/specs/openid-connect-self-issued-v2-1_0.html
note: "S'authentifier avec son propre wallet, sans compte tiers"
- from: Certificat X.509
to: "did:web / did:key"
url: https://www.w3.org/TR/did-1.0/
note: Identifiant décentralisé résolu sans CA centrale
- label: Standards W3C
items:
- from: Registre central d'identités
to: "DID v1.0 (W3C)"
url: https://www.w3.org/TR/did-1.0/
note: "Recommandation W3C finale — juillet 2022"
- from: Attestation papier ou numérique centralisée
to: "Verifiable Credentials v2.0"
url: https://www.w3.org/TR/vc-data-model-2.0/
note: "Recommandation W3C finale — mai 2025. Divulgation sélective."
- from: "OAuth / OIDC classique"
to: "OpenID4VP + OpenID4VCI"
url: https://openid.net/specs/openid-4-verifiable-presentations-1_0.html
note: Pont entre wallets DID et services web existants
- label: Implémentations
items:
- from: Monnaie et identité centralisées
to: "Duniter / Ğ1"
url: https://duniter.fr
note: "WoT intégrée au protocole — 5 certifications, rayon 3"
- from: Wallet propriétaire
to: trustWallet
note: "Gestionnaire de confiances — accès, permissions, DID/UCAN/VC sur clés certifiées Duniter (en gestation)"
- from: SSI entreprise
to: "SpruceID / ssi (Rust)"
url: https://spruceid.com
note: Librairie open source pour DID et Verifiable Credentials
- type: arguments
title: Ce que la WoT rend possible
items:
- icon: log-in
title: Connexion décentralisée
text: >
Via SIOPv2 + OpenID4VP, un wallet d'identité répond aux requêtes
d'authentification de n'importe quel service compatible.
Pas de compte Google. Une clé. Final depuis juillet 2025.
- icon: file-signature
title: Signature légale
text: >
La signature qualifiée (eIDAS QES) a la même valeur juridique
qu'une signature manuscrite dans l'UE. L'EUDI Wallet
inclura la signature qualifiée pour chaque citoyen européen.
- icon: bar-chart-2
title: Vote vérifiable
text: >
Cryptographie asymétrique et Zero-Knowledge Proofs permettent
un décompte public vérifiable sans révéler le vote individuel.
La vérification est mathématique, pas institutionnelle.
- icon: coins
title: Création monétaire — Ğ1
text: >
Le cas d'usage le plus radical : l'identité dans la WoT Duniter détermine
l'accès au Dividende Universel. La WoT est un mécanisme de justice économique.
Pas de WoT → pas de co-création monétaire.
- icon: building
title: Services et gouvernance
text: >
Accès aux services publics (eIDAS 2.0), gouvernance de DAOs,
contrats intelligents vérifiables, réseaux de confiance décentralisés.
Une identité → une clé pour tous les accès.
- type: links
title: Ressources
items:
- label: "W3C DID v1.0"
url: https://www.w3.org/TR/did-1.0/
desc: "Standard des identifiants décentralisés — Recommandation W3C finale (2022)"
- label: "W3C Verifiable Credentials v2.0"
url: https://www.w3.org/TR/vc-data-model-2.0/
desc: "Standard des attestations vérifiables — Recommandation W3C finale (mai 2025)"
- label: Duniter
url: https://duniter.fr
desc: "Blockchain WoT pour la monnaie libre Ğ1 — gouvernance par toile de confiance"
- label: trustWallet (en gestation)
desc: "Gestionnaire de confiances — accès, permissions, signatures DID/UCAN/VC sur clés certifiées de la WoT Duniter"
- label: SpruceID
url: https://spruceid.com
desc: Librairie open source Rust pour DID et Verifiable Credentials
- label: "EUDI Wallet (eIDAS 2.0)"
url: https://ec.europa.eu/digital-building-blocks/sites/display/EUDIGITALIDENTITYWALLET/
desc: "Wallet d'identité numérique européen — déploiement prévu fin 2026"
- label: "OpenID4VP"
url: https://openid.net/specs/openid-4-verifiable-presentations-1_0.html
desc: "Standard final (juillet 2025) — authentification avec wallet DID"
- label: KERI
url: https://keri.one
desc: "Key Event Receipt Infrastructure — identité décentralisée, IETF draft"
- label: SSI Meetup
url: https://www.ssimeetup.org
desc: Webinaires et ressources sur la Self-Sovereign Identity

View File

@@ -1,22 +1,340 @@
meta:
title: Cloud libre — Autonomie numérique
title: Cloud libre — Sortir des datacenters
kicker: Autonomie numérique
title: Cloud libre
icon: cloud
gestation: true
description: >
Héberger ses propres services pour ne dépendre de personne.
Serveurs, noms de domaine, infrastructure.
Un bouquet de services complet — Drive, Visio, Forum, Wiki, CMS —
et demain, une IA frugale localisée.
Tes données vivent dans des datacenters dont tu ne connais pas l'adresse,
sous des juridictions que tu ne contrôles pas. Sortir de là est possible —
en trois paliers : auto-hébergement, services fédérés, architectures décentralisées.
Ces dernières émergent à peine.
project:
name: Bouquet de services
text: "Drive, Visio, Forum, Wiki, CMS. IA frugale localisée."
name: sweethomeCloud
text: Bouquet de services libres auto-hébergés — clé en main pour chaque bassin de vie.
gestation: true
content: >
L'auto-hébergement est la clé de voûte de l'autonomie numérique.
Il s'agit de maîtriser l'infrastructure sur laquelle reposent nos outils
de communication, de stockage et de collaboration.
sections:
- type: arguments
title: Pourquoi sortir des datacenters ?
items:
- icon: shield
title: RGPD — conformité structurelle
text: >
Google, Amazon, Microsoft stockent tes données sous juridiction américaine (CLOUD Act).
L'auto-hébergement ou un hébergeur associatif européen offre
une conformité RGPD structurelle — pas seulement déclarative.
- icon: eye-off
title: Vie privée des données
text: >
Dans un cloud commercial, tes documents, photos et communications
sont analysés, profilés, monétisés. Ce n'est pas une théorie —
c'est le modèle économique déclaré.
- icon: zap
title: Écologie numérique
text: >
Les datacenters consomment 1 à 2 % de l'électricité mondiale.
Un petit serveur domestique consomme 5 à 10 W.
Héberger chez soi ou mutualiser dans un hébergeur associatif
réduit l'empreinte réelle.
- icon: key
title: Propriété réelle de tes données
text: >
Un service cloud peut fermer, changer ses CGU, couper ton compte.
Tes données te reviennent quand tu les héberges toi-même —
portabilité réelle, pas juste un bouton "Exporter".
- icon: git-branch
title: Résilience décentralisée
text: >
Un réseau de services distribués n'a pas de point de défaillance unique.
Un nœud fermé, les autres continuent.
C'est l'architecture d'Internet telle qu'elle avait été conçue.
- type: tiers
title: Trois niveaux d'architecture libre
tiers:
- level: Niveau 1
title: Auto-hébergement
icon: server
badge: Maîtrise totale
text: >
Ton propre serveur chez toi ou chez un hébergeur associatif.
Contrôle absolu, RGPD pleinement compatible.
YunoHost installe plus de 200 applications libres en un clic.
tools:
- "Nextcloud — fichiers, agenda, contacts, visio"
- "YunoHost — auto-hébergement simplifié"
- "Syncthing — sync pair-à-pair sans serveur"
- "FreedomBox — serveur domestique clé-en-main"
- level: Niveau 2
title: Services fédérés
icon: share-2
badge: Interconnecté
text: >
Des instances indépendantes interconnectées via des protocoles ouverts
(ActivityPub, Matrix). Tu rejoins un serveur de confiance
ou héberges le tien. Les données restent chez l'opérateur choisi.
tools:
- "Mastodon — réseau social fédéré"
- "PeerTube — vidéo hébergée et fédérée"
- "Matrix + Element — messagerie décentralisée"
- "Pixelfed — galerie photo fédérée"
- "Funkwhale — musique fédérée"
- level: Niveau 3
title: Architectures décentralisées
icon: globe-2
badge: Émergent
text: >
Pas de serveur central, pas d'opérateur unique. Les fichiers sont
fragmentés, chiffrés côté client, distribués sur des nœuds indépendants mondiaux.
Ces architectures émergent à peine — prometteuses, pas encore grand public.
tools:
- "IPFS — protocole pair-à-pair (ipfs.tech)"
- "Filecoin — marché de stockage sur IPFS"
- "Storj — stockage distribué chiffré côté client"
- "Sia — stockage décentralisé (Sia Foundation)"
- "Arweave — stockage permanent (modèle endowment)"
- type: equivalents
title: Vos services cloud — en version libre
categories:
- label: "Fichiers & synchronisation"
items:
- from: "Google Drive / Dropbox"
to: Nextcloud
url: https://nextcloud.com/fr
note: "Fichiers, agenda, contacts, photos, visio — auto-hébergeable"
- from: Dropbox
to: Syncthing
url: https://syncthing.net
note: "Sync pair-à-pair chiffré, sans serveur central"
- from: "Dropbox / Box"
to: Storj
url: https://storj.io
note: Stockage distribué chiffré côté client
- label: "Email & calendrier"
items:
- from: "Gmail / Outlook"
to: Proton Mail
url: https://proton.me/fr/mail
note: "Chiffrement bout-en-bout, hébergé en Suisse"
- from: Google Calendar
to: Nextcloud Calendar
url: https://nextcloud.com/fr
note: "CalDAV standard, auto-hébergeable"
- label: "Vidéo & média"
items:
- from: YouTube
to: PeerTube
url: https://joinpeertube.org
note: "Hébergement vidéo fédéré — choisir son instance"
- from: Google Photos
to: Nextcloud Photos
url: https://nextcloud.com/fr
note: Galerie auto-hébergée
- label: Réseaux sociaux
items:
- from: "Twitter / X"
to: Mastodon
url: https://joinmastodon.org
note: "Réseau social fédéré — 30 M+ comptes"
- from: Instagram
to: Pixelfed
url: https://pixelfed.org
note: Galerie photo fédérée
- from: "Slack / Teams"
to: "Matrix + Element"
url: https://element.io
note: Messagerie décentralisée et fédérée
- label: Auto-hébergement facile
items:
- from: Pas de serveur
to: YunoHost
url: https://yunohost.org
note: "Installe 200+ apps libres en un clic (Debian)"
- from: Infrastructure cloud
to: FreedomBox
url: https://freedombox.org
note: Serveur domestique clé-en-main (projet Debian)
- from: Node Web3
to: Umbrel
url: https://umbrel.com
note: "App store décentralisé, nœud Bitcoin/Lightning"
- type: insight
title: RGPD et droit à l'oubli — une tension structurelle
icon: scale
variant: warning
text: >
Le droit à l'oubli (RGPD art. 17) exige l'effacement des données personnelles sur demande.
Les architectures décentralisées y résistent structurellement :
une blockchain est un registre immuable répliqué sur tous les nœuds,
IPFS conserve les données tant qu'un seul nœud les héberge.
C'est une tension réelle, non résolue, que le législateur européen commence à instruire
(lignes directrices CEPD 02/2025).
points:
- "Auto-hébergement : conformité RGPD totale — tu effaces ce que tu veux"
- "Services fédérés : dépend de l'opérateur de l'instance — choisir un hébergeur CHATONS"
- "IPFS / blockchain : chiffrer + détruire la clé (la donnée devient inintelligible). Accepté par la CNIL sous conditions strictes."
- "Off-chain data : stocker uniquement un hash sur la chaîne, les données personnelles sur un serveur effaçable — approche la plus propre"
- "Référence officielle : guide CNIL blockchain et RGPD + lignes directrices CEPD 02/2025"
- type: projet
title: sweethomeCloud
kicker: Prochain projet
icon: home
badge: En gestation
text: >
Un bouquet de services libres, auto-hébergés et prêts à l'emploi —
pour les collectivités, associations et collectifs qui veulent
maîtriser leur infrastructure numérique sans expertise technique.
sweethomeCloud s'appuie sur les briques documentées dans cette page :
Nextcloud, Matrix, Jitsi, YunoHost, Ollama — packagées, maintenues,
documentées ensemble. Une instance par territoire.
features:
- icon: hard-drive
label: "Drive, agenda, contacts — Nextcloud"
- icon: video
label: "Visioconférence — Jitsi / Galène"
- icon: message-circle
label: "Messagerie chiffrée souveraine"
- icon: bot
label: "IA locale — Ollama, aucune donnée ne sort"
- icon: globe-2
label: "CMS, forum, wiki, sites web"
- icon: shield
label: "Décentralisé local-first — votre territoire, vos données"
- type: territoire
title: Autonomie des bassins de vie
icon: map-pin
text: >
Un bassin de vie de 50 000 personnes peut déployer et maintenir son propre réseau
numérique souverain. Le matériel est accessible, les logiciels libres sont matures.
sweethomeCloud sera ce bouquet — packagé, documenté, maintenu ensemble.
Deux modèles économiques, au choix.
economies:
- label: "Euro non vénale"
desc: "Portage associatif ou coopératif — contribution libre, cotisation symbolique, financement public"
icon: euro
- label: "Monnaie libre Ğ1 — à 100%"
desc: "Services financés exclusivement en Ğ1, co-créée par les membres du territoire. Aligné avec l'économie du don."
icon: coins
bouquet:
title: "Le bouquet sweethomeCloud"
categories:
- label: Collaboration quotidienne
icon: users
items:
- "Drive, agenda, contacts, photos — Nextcloud"
- "Visioconférence — Jitsi / Galène"
- "Messagerie chiffrée souveraine"
- "Email hébergé — Postfix + Dovecot"
- label: "Web & publication"
icon: globe-2
items:
- "CMS — WordUp"
- "Forum"
- "Wiki"
- "Sites web, pages publiques"
- label: "Infrastructure technique"
icon: settings
items:
- "Git — Forgejo"
- "Automatisation — n8n"
- "Mailer transactionnel — Postal"
- "DNS souverain"
- label: "Souveraineté protocole"
icon: shield
items:
- "Nœud Duniter — Ğ1"
- "Stockage IPFS"
- "Miroirs logiciels libres"
- label: "Intelligence artificielle locale"
icon: bot
items:
- "LLM généraliste en file — Ollama + Llama 8B"
- "LLM lourd sur demande — Llama 70B"
- "IA code — Codestral / DeepSeek"
- "Aucune donnée ne sort du territoire"
- label: "Applications du territoire"
icon: layout-grid
items:
- "librodrome — économie & autonomie"
- "libreDecision — décision collective"
- "Applications métier à venir"
estimate:
toggle: "Estimation matérielle pour 50 000 personnes"
note: >
Basé sur 5% d'utilisation simultanée au pic (2 500 connectés),
20 Go de stockage par habitant (taux d'occupation réel 30%),
matériel reconditionné. Hypothèses conservatives et vérifiées.
hardware:
- role: "Serveurs principaux"
detail: "4× reconditionné — 2× Xeon 16 cœurs, 128 Go RAM, SSD NVMe"
usage: "Nextcloud, mail, forum, wiki, git, n8n, CMS, apps, Matrix"
cost: "10 000 14 000 €"
note: "Dell PowerEdge R740 / HPE DL380 Gen10 reconditionné"
- role: "Stockage NAS"
detail: "24× HDD 10 To RAID6 → 160 To utilisables"
usage: "Drive (100 To), email (40 To), IPFS cache, backups"
cost: "5 000 7 000 €"
note: "~20 Go/habitant, occupation réelle ~30% — largement suffisant au démarrage"
- role: "Visioconférence"
detail: "3× serveur 8 cœurs / 32 Go — load balancé (Jitsi Octo)"
usage: "250 participants simultanés — 75-100 max par nœud Jitsi"
cost: "6 000 9 000 €"
note: "1 seul serveur Jitsi ne peut pas dépasser 100 participants — chiffre vérifié"
- role: "IA légère — Llama 8B"
detail: "4× PC gamer avec RTX 4090 24 Go VRAM"
usage: "Ollama — Q&A, résumé, assistance — 1 requête simultanée/GPU"
cost: "8 000 10 000 €"
note: "Llama 3.1 8B Q4 : 6-8 Go VRAM, 100-150 tokens/s par RTX 4090"
- role: "IA lourde — Llama 70B"
detail: "1× serveur avec 2× RTX 4090 (48 Go VRAM cumulés)"
usage: "Llama 3.1 70B Q4 (42 Go VRAM min), IA code, analyse longue"
cost: "5 000 8 000 €"
note: "Le modèle est splitté sur 2 GPU — seule option abordable sans datacenter"
- role: "Réseau & DNS"
detail: "Fibre pro 1 Gbps symétrique + switch 10 Gbps + 2× mini-PC DNS"
usage: "Tous services, DNS souverain redondant (BIND9)"
cost: "2 000 € + 300 €/mois fibre"
note: "Le DNS est la pièce la plus critique — la redondance est obligatoire"
totals:
invest: "36 000 48 000 €"
annual: "8 000 12 000 €/an"
per_person: "~2 €/an par habitant"
note: "Moins cher qu'un café — pour une infrastructure numérique complète et souveraine."
- type: links
title: Ressources
items:
- label: YunoHost
url: https://yunohost.org
desc: Auto-hébergement simplifié — installe 200+ apps libres en un clic
- label: CHATONS
url: https://www.chatons.org
desc: "96+ hébergeurs alternatifs éthiques et décentralisés (initié par Framasoft)"
- label: Nextcloud
url: https://nextcloud.com/fr
desc: Suite collaborative auto-hébergeable de référence
- label: Dégooglisons Internet
url: https://degooglisons-internet.org
desc: Alternatives libres aux services Google — par Framasoft
- label: IPFS
url: https://ipfs.tech
desc: Protocole de stockage pair-à-pair décentralisé
- label: Storj
url: https://storj.io
desc: Stockage distribué chiffré côté client
- label: Sia
url: https://sia.tech
desc: "Stockage décentralisé — Sia Foundation (non-profit, très actif)"
- label: CNIL — Blockchain et RGPD
url: https://www.cnil.fr/fr/blockchain-et-rgpd-quelles-solutions-pour-un-usage-responsable-en-presence-de-donnees-personnelles
desc: Guide officiel sur les enjeux RGPD des architectures décentralisées
- label: Switching.software
url: https://switching.software
desc: Annuaire d'alternatives éthiques aux logiciels propriétaires

View File

@@ -1,23 +1,243 @@
meta:
title: Logiciel libre — Autonomie numérique
title: Logiciel libre — Migrer sur Linux
kicker: Autonomie numérique
title: Logiciel libre
icon: code-2
gestation: true
description: >
Le logiciel libre n'est pas qu'une question technique.
C'est la condition d'existence d'outils qui nous appartiennent —
que l'on peut auditer, modifier, partager.
Sans logiciel libre, toute promesse de souveraineté numérique est creuse.
Passer à Linux, adopter LibreOffice, Signal, Nextcloud.
Un guide concret d'équivalents libres, une fiche de migration
étape par étape — et un atelier au prochain Librodrome.
project:
name: wishBounty
text: Application pour le financement fléché des développements libres.
gestation: true
content: >
Le logiciel libre garantit quatre libertés fondamentales : utiliser, étudier,
modifier et redistribuer. Ces libertés sont le socle de toute autonomie numérique.
Sans elles, nous sommes dépendants d'éditeurs qui peuvent à tout moment modifier
les règles du jeu.
sections:
- type: arguments
title: Pourquoi migrer ?
items:
- icon: shield
title: Vie privée
text: >
Windows et macOS collectent vos données en permanence, sans possibilité
de désactiver entièrement la télémétrie. Linux ne le fait pas par défaut —
tout le code est auditable.
- icon: coins
title: "Coût réel : 0 €"
text: >
Windows 11 coûte 145 €, Office 365 70 €/an.
Linux + LibreOffice sont gratuits. Sur 5 ans pour une association,
l'écart devient un argument décisif.
- icon: recycle
title: Durabilité matérielle
text: >
Linux redonne 5 à 10 ans de vie à des machines abandonnées par Windows 11
(qui exige TPM 2.0). Moins de déchets électroniques — argument écologique concret.
- icon: users
title: Bien commun
text: >
Le logiciel libre est un commun numérique. Tu n'es pas client, tu participes.
Cohérent avec l'économie du don — l'argent économisé sur les licences
peut financer des communs.
- icon: lock-open
title: Indépendance réelle
text: >
Pas de mise à jour forcée qui casse le système. Pas d'abonnement qui expire
et verrouille tes fichiers. Ton OS t'appartient vraiment.
- icon: bot
title: Assistance permanente gratuite
text: >
Un LLM open source installé localement (Ollama + phi3:mini, 4 Go de RAM)
peut rédiger les commandes shell dans ton terminal sur simple demande en français.
Sans connexion à aucun serveur. Sans abonnement. Sans envoyer tes données.
- type: fiche
title: "Fiche de migration — 6 étapes"
steps:
- n: 1
title: Sauvegarder ses données
text: >
Copie documents, photos, mails sur un disque externe ou clé USB.
Ne commence rien sans ça.
- n: 2
title: Tester sans risque — Live USB
text: >
Démarre Linux Mint depuis une clé USB. Tu explores, tu testes LibreOffice,
tu vérifies le WiFi — sans toucher à ton Windows existant.
tip: "Créer la clé : balenaEtcher (gratuit) + image Linux Mint sur linuxmint.com"
- n: 3
title: Choisir sa distribution
text: >
Linux Mint Cinnamon pour migrer depuis Windows (interface familière).
Ubuntu pour un maximum de ressources en ligne.
Les deux sont excellents pour démarrer.
- n: 4
title: Installer — double-boot ou remplacement
text: >
Double-boot si tu veux garder Windows le temps de la transition.
Remplacement complet quand tu es prêt·e — c'est le vrai départ.
- n: 5
title: Installer ses équivalents libres
text: >
LibreOffice est déjà là. Ajoute Thunderbird, VLC, GIMP, Signal Desktop
via le gestionnaire de paquets en un clic — pas de téléchargement manuel.
- n: 6
title: Rejoindre une communauté
text: >
Forum ubuntu-fr.org, groupe local, ou atelier Librodrome.
Les questions trouvent toujours réponse.
- type: equivalents
title: Vos logiciels propriétaires — en version libre
categories:
- label: Bureautique
items:
- from: Microsoft Office
to: LibreOffice
url: https://fr.libreoffice.org
note: Suite complète gratuite multiplateforme
- from: Microsoft Office
to: OnlyOffice
url: https://www.onlyoffice.com/fr
note: "Meilleure compat .docx/.xlsx"
- label: "Photo & graphisme"
items:
- from: Photoshop
to: GIMP
url: https://www.gimp.org
note: Retouche et manipulation d'images
- from: "Photoshop / Affinity"
to: Krita
url: https://krita.org/fr
note: Peinture numérique et illustration
- from: Lightroom
to: Darktable
url: https://www.darktable.org
note: Développement photo RAW
- from: Illustrator
to: Inkscape
url: https://inkscape.org/fr
note: Dessin vectoriel SVG
- from: Figma
to: Penpot
url: https://penpot.app
note: "Design UI/UX, auto-hébergeable"
- label: "Email & messagerie"
items:
- from: Outlook
to: Thunderbird
url: https://www.thunderbird.net/fr
note: Client mail desktop complet
- from: WhatsApp
to: Session
url: https://getsession.org
note: "Pas de numéro de téléphone, réseau Oxen décentralisé"
- from: "Slack / Teams"
to: "Element (Matrix)"
url: https://element.io
note: Protocole décentralisé et fédéré
- from: "Zoom / Teams"
to: Jitsi Meet
url: https://meet.jit.si
note: Visio sans compte requis
- label: "Navigateur & stockage"
items:
- from: Chrome
to: Firefox
url: https://www.mozilla.org/fr/firefox
note: Standard libre de référence
- from: Chrome
to: Librewolf
url: https://librewolf.net
note: Firefox durci pour la vie privée
- from: "Dropbox / Drive"
to: Nextcloud
url: https://nextcloud.com/fr
note: "Fichiers, agenda, contacts — auto-hébergeable"
- from: Dropbox
to: Syncthing
url: https://syncthing.net
note: "Sync pair-à-pair, sans serveur central"
- label: Développement
items:
- from: VSCode
to: VSCodium
url: https://vscodium.com
note: VSCode sans télémétrie Microsoft
- from: Spotify
to: Navidrome
url: https://www.navidrome.org
note: Serveur musique auto-hébergé
- type: llm
title: Un assistant shell local — sans cloud
text: >
Un petit LLM open source sur ta machine répond à tes questions sur les commandes Linux
en langage naturel, sans envoyer aucune donnée à un serveur distant.
Il suggère. Toi tu décides.
tool: Ollama
tool_url: https://ollama.com
model: "phi3:mini"
ram: "4 Go de RAM suffisent"
commands:
- "curl -fsSL https://ollama.com/install.sh | sh"
- "ollama pull phi3:mini"
- "ollama run phi3:mini \"Comment trouver les fichiers modifiés depuis 7 jours ?\""
rules:
- Lis chaque commande avant de l'exécuter — le LLM suggère, tu valides
- "Utilise --dry-run ou -n quand disponible (rsync, make…)"
- Pour les commandes root/sudo, vérification manuelle obligatoire
- "Préfère phi3:mini ou qwen2.5-coder — pas les modèles uncensored"
- type: atelier
title: Atelier migration — prochain Librodrome
text: >
Une demi-journée pour passer à Linux en douceur, en groupe.
Chaque participant repart avec une clé USB Linux Mint bootable
et un plan de migration personnalisé.
format: "Demi-journée — 6 à 12 participants"
programme:
- icon: usb
label: Live USB — tester Linux sans risque sur sa propre machine
- icon: list
label: "Équivalents logiciels — chacun fait son inventaire personnel"
- icon: hard-drive
label: Installation guidée sur machine volontaire
- icon: package
label: "Gestionnaire de paquets — installer ce dont on a besoin"
- icon: users
label: Questions ouvertes et suivi post-atelier
- type: links
title: Ressources
items:
- label: Framalibre
url: https://framalibre.org
desc: "Annuaire du logiciel libre — plus de 1000 logiciels référencés"
- label: Framasoft
url: https://framasoft.org/fr/
desc: Écosystème et alternatives éthiques au numérique centralisé
- label: Soyez résolus
url: https://soyezresolu.org/
desc: Guide pratique pour libérer les usages numériques (associations)
- label: Guide d'installation Linux Mint
url: https://linuxmint-installation-guide.readthedocs.io/en/latest/
desc: Guide officiel Linux Mint
- label: Documentation Ubuntu francophone
url: https://doc.ubuntu-fr.org/debutant
desc: Guide débutant Ubuntu en français
- label: Forum ubuntu-fr
url: https://forum.ubuntu-fr.org
desc: Communauté d'entraide Linux en français
- label: April
url: https://www.april.org
desc: Association pour la promotion du logiciel libre depuis 1996
- label: Ollama
url: https://ollama.com
desc: Installer et gérer des LLMs locaux open source
- label: Librezo
url: https://librezo.fr
desc: Collectif d'artisans numériques travaillant exclusivement en logiciel libre