From 99a8b8416494e034541b71e20849d17bc8f404e0 Mon Sep 17 00:00:00 2001 From: Yvv Date: Mon, 23 Mar 2026 02:37:42 +0100 Subject: [PATCH] Vouvoiement, libreDecision : bouton + URL MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Vouvoiement partout dans les pages numerique (cloud-libre, logiciel-libre, wot) - Bouton "Ouvrir libreDecision" dans home AxisBlock (Décision collective) - AxisAction supporte href pour liens externes - URL prod : decision.librodrome.org - Labels "Ouvrir libreDecision" (sans Ğ) dans citoyenne/index et [slug] - app.config.ts : URL prod libredecision mise à jour Co-Authored-By: Claude Sonnet 4.6 --- app/app.config.ts | 2 +- app/components/home/AxisBlock.vue | 9 +- app/pages/citoyenne/[slug].vue | 254 ++++++++++++++++-- app/pages/citoyenne/index.vue | 2 +- site/pages/home.yml | 6 + site/pages/numerique/authentification-wot.yml | 26 +- site/pages/numerique/cloud-libre.yml | 22 +- site/pages/numerique/logiciel-libre.yml | 22 +- 8 files changed, 283 insertions(+), 60 deletions(-) diff --git a/app/app.config.ts b/app/app.config.ts index 907808d..f899a6e 100644 --- a/app/app.config.ts +++ b/app/app.config.ts @@ -21,7 +21,7 @@ export default defineAppConfig({ }, }, libredecision: { - url: import.meta.dev ? 'http://localhost:3002' : 'https://decision.laplank.org', + url: import.meta.dev ? 'http://localhost:3002' : 'https://decision.librodrome.org', }, sejeteral0: { url: import.meta.dev ? 'http://localhost:3009' : 'https://collectivites.librodrome.org', diff --git a/app/components/home/AxisBlock.vue b/app/components/home/AxisBlock.vue index 1ab753c..125855a 100644 --- a/app/components/home/AxisBlock.vue +++ b/app/components/home/AxisBlock.vue @@ -52,16 +52,18 @@
- +
@@ -91,6 +93,7 @@ interface AxisAction { highlight?: boolean secondary?: boolean to?: string + href?: string } interface AxisItem { diff --git a/app/pages/citoyenne/[slug].vue b/app/pages/citoyenne/[slug].vue index b9ab439..417a9b3 100644 --- a/app/pages/citoyenne/[slug].vue +++ b/app/pages/citoyenne/[slug].vue @@ -1,25 +1,67 @@ @@ -76,15 +125,35 @@ const route = useRoute() const slug = route.params.slug as string -const { data: content } = await usePageContent(`citoyenne/${slug}`) +const [{ data: content }, { data: homeData }] = await Promise.all([ + usePageContent(`citoyenne/${slug}`), + usePageContent('home'), +]) const appConfig = useAppConfig() const decisionUrl = (appConfig.libredecision as { url: string })?.url ?? '#' const sejeteral0Url = (appConfig.sejeteral0 as { url: string })?.url ?? '#' -useHead({ - title: content.value?.meta?.title ?? slug, +// Sommaire +const sommaire = computed(() => { + const entries: { title: string; id: string }[] = [] + if ((content.value?.features as unknown[])?.length) entries.push({ title: 'Fonctionnalités', id: 'section-features' }) + if (content.value?.project) entries.push({ title: (content.value.project as { name: string }).name, id: 'section-project' }) + if (content.value?.content) entries.push({ title: 'En savoir plus', id: 'section-content' }) + return entries }) + +// Prev / next dans la section citoyenne +interface AxisItem { label: string; to?: string; icon?: string } +const politiqueItems = computed( + () => (homeData.value as Record | null)?.axes?.politique?.items as AxisItem[] ?? [], +) +const currentPath = `/citoyenne/${slug}` +const currentIdx = computed(() => politiqueItems.value.findIndex(i => i.to === currentPath)) +const prevItem = computed(() => currentIdx.value > 0 ? politiqueItems.value[currentIdx.value - 1] : null) +const nextItem = computed(() => currentIdx.value < politiqueItems.value.length - 1 ? politiqueItems.value[currentIdx.value + 1] : null) + +useHead({ title: content.value?.meta?.title ?? slug }) diff --git a/app/pages/citoyenne/index.vue b/app/pages/citoyenne/index.vue index e08f623..c34c683 100644 --- a/app/pages/citoyenne/index.vue +++ b/app/pages/citoyenne/index.vue @@ -363,7 +363,7 @@ diff --git a/site/pages/home.yml b/site/pages/home.yml index 3055ef2..878d5f2 100644 --- a/site/pages/home.yml +++ b/site/pages/home.yml @@ -109,6 +109,12 @@ axes: description: Se donner les moyens de la décision collective. to: /citoyenne/decision icon: gavel + actions: + - id: open-libredecision + label: Ouvrir libreDecision + icon: external-link + highlight: true + href: https://decision.librodrome.org - label: Tarifs de l'eau description: Application pour obtenir justice sociale et incitation dynamique à la réduction. Permet de confier la décision à la population des communes. diff --git a/site/pages/numerique/authentification-wot.yml b/site/pages/numerique/authentification-wot.yml index bd2c7a9..989ebae 100644 --- a/site/pages/numerique/authentification-wot.yml +++ b/site/pages/numerique/authentification-wot.yml @@ -24,19 +24,19 @@ sections: 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. + des milliards de comptes compromis. Votre sécurité dépend intégralement + de la sécurité d'un tiers que vous ne contrôlez 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. + d'identité mondiale. Un compte suspendu = toutes vos connexions coupées. + Ces entreprises savent quand, où et à quoi vous vous connectez. - 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é + Si vos 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) @@ -49,22 +49,22 @@ sections: title: Comment fonctionne une Web of Trust steps: - n: 1 - title: Générer une paire de clés sur ta machine + title: Générer une paire de clés sur votre machine text: > - Clé privée (secrète, ne quitte jamais ton appareil) et clé publique + Clé privée (secrète, ne quitte jamais votre 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 + title: Publier votre 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. + Dans un DID Document, sur un keyserver, dans votre profil Duniter. + N'importe qui peut vérifier vos signatures. Personne ne peut usurper + votre identité sans votre 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 Duniter, 5 membres certifiés (sigQty=5) certifient que vous êtes 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 @@ -78,7 +78,7 @@ sections: 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. + Tout ce que vous faites est vérifiable. Rien n'est transmissible à votre insu. - type: insight title: Le seul système sans autorité centrale ni biométrie diff --git a/site/pages/numerique/cloud-libre.yml b/site/pages/numerique/cloud-libre.yml index 73aad37..5da1d64 100644 --- a/site/pages/numerique/cloud-libre.yml +++ b/site/pages/numerique/cloud-libre.yml @@ -6,8 +6,8 @@ title: Cloud libre icon: cloud description: > - 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 — + Vos données vivent dans des datacenters dont vous ne connaissez pas l'adresse, + sous des juridictions que vous ne contrôlez 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. @@ -23,13 +23,13 @@ sections: - icon: shield title: RGPD — conformité structurelle text: > - Google, Amazon, Microsoft stockent tes données sous juridiction américaine (CLOUD Act). + Google, Amazon, Microsoft stockent vos 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 + Dans un cloud commercial, vos 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 @@ -40,10 +40,10 @@ sections: 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 + title: Propriété réelle de vos 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 — + Un service cloud peut fermer, changer ses CGU, couper votre compte. + Vos données vous reviennent quand vous les hébergez vous-même — portabilité réelle, pas juste un bouton "Exporter". - icon: git-branch title: Résilience décentralisée @@ -60,7 +60,7 @@ sections: icon: server badge: Maîtrise totale text: > - Ton propre serveur chez toi ou chez un hébergeur associatif. + Votre propre serveur chez vous ou chez un hébergeur associatif. Contrôle absolu, RGPD pleinement compatible. YunoHost installe plus de 200 applications libres en un clic. tools: @@ -74,8 +74,8 @@ sections: 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. + (ActivityPub, Matrix). Vous rejoignez un serveur de confiance + ou hébergez le vôtre. 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" @@ -175,7 +175,7 @@ sections: 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" + - "Auto-hébergement : conformité RGPD totale — vous effacez ce que vous voulez" - "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" diff --git a/site/pages/numerique/logiciel-libre.yml b/site/pages/numerique/logiciel-libre.yml index 32e6a1e..ee6a44f 100644 --- a/site/pages/numerique/logiciel-libre.yml +++ b/site/pages/numerique/logiciel-libre.yml @@ -39,20 +39,20 @@ sections: - icon: users title: Bien commun text: > - Le logiciel libre est un commun numérique. Tu n'es pas client, tu participes. + Le logiciel libre est un commun numérique. Vous n'êtes pas client, vous participez. 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. + et verrouille vos fichiers. Votre OS vous 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. + peut rédiger les commandes shell dans votre terminal sur simple demande en français. + Sans connexion à aucun serveur. Sans abonnement. Sans envoyer vos données. - type: fiche title: "Fiche de migration — 6 étapes" @@ -65,8 +65,8 @@ sections: - 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. + Démarrez Linux Mint depuis une clé USB. Vous explorez, testez LibreOffice, + vérifiez le WiFi — sans toucher à votre Windows existant. tip: "Créer la clé : balenaEtcher (gratuit) + image Linux Mint sur linuxmint.com" - n: 3 title: Choisir sa distribution @@ -77,8 +77,8 @@ sections: - 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. + Double-boot si vous voulez garder Windows le temps de la transition. + Remplacement complet quand vous êtes prêt·e — c'est le vrai départ. - n: 5 title: Installer ses équivalents libres text: > @@ -175,9 +175,9 @@ sections: - 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 + Un petit LLM open source sur votre machine répond à vos questions sur les commandes Linux en langage naturel, sans envoyer aucune donnée à un serveur distant. - Il suggère. Toi tu décides. + Il suggère. Vous décidez. tool: Ollama tool_url: https://ollama.com model: "phi3:mini" @@ -187,7 +187,7 @@ sections: - "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 + - Lisez chaque commande avant de l'exécuter — le LLM suggère, vous validez - "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"