Remove internal Gitea URLs, personal email, and add AI prompts to site

- Replace all homegit.gyozamancave.fr links with internal page links
  or plain text (no external repo exposure)
- Replace piron.antoine@gmail.com with contact@example.com placeholder
- Add prompts verbatim section to /transparence page (filter, synthesis,
  law-check prompts) via new src/lib/prompts.ts module

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-24 07:54:36 +02:00
parent 2ef14ac765
commit bae1335dd5
6 changed files with 560 additions and 53 deletions
@@ -179,9 +179,8 @@ export default function ContributionsBrutes() {
<p className="text-xs text-muted-foreground/60 font-mono pt-8 mt-8 border-t border-border/30">
Contributions modérées selon le droit international des droits humains (DUDH · PIDCP · CEDH).{" "}
<a
href="https://homegit.gyozamancave.fr/billisdead/la-voix-du-peuple/src/branch/main/docs/PROMPTS_IA.md"
href="/transparence"
className="underline text-primary"
rel="noopener noreferrer"
>
Voir les critères de modération
</a>
@@ -32,7 +32,7 @@ export default function LegalNotice() {
{ label: "Nom", value: "Antoine Piron" },
{ label: "Pseudonyme", value: "billisdead" },
{ label: "Qualité", value: "Personne physique — exploitant à titre personnel" },
{ label: "Contact", value: "piron.antoine@gmail.com" },
{ label: "Contact", value: "contact@example.com" },
{ label: "Adresse", value: "France" },
].map(row => (
<tr key={row.label}>
@@ -71,14 +71,12 @@ export default function LegalNotice() {
conditions de cette licence.
</p>
<p className="text-foreground/80">
Dépôt :{" "}
<a
href="https://homegit.gyozamancave.fr/billisdead/la-voix-du-peuple"
className="underline text-primary"
rel="noopener noreferrer"
>
homegit.gyozamancave.fr/billisdead/la-voix-du-peuple
Le code source est publié sous EUPL-1.2. Il est disponible sur demande
à{" "}
<a href="mailto:contact@example.com" className="underline text-primary">
contact@example.com
</a>
.
</p>
</section>
@@ -108,16 +106,8 @@ export default function LegalNotice() {
Voir la{" "}
<Link href="/politique-confidentialite" className="underline text-primary">
politique de confidentialité
</Link>{" "}
et le document de conformité RGPD complet (
<a
href="https://homegit.gyozamancave.fr/billisdead/la-voix-du-peuple/src/branch/main/docs/RGPD.md"
className="underline text-primary"
rel="noopener noreferrer"
>
docs/RGPD.md
</a>
).
</Link>
.
</p>
</section>
@@ -126,8 +116,8 @@ export default function LegalNotice() {
<p className="text-foreground/80">
Conformément à l'article 6-I-7 de la LCEN, vous pouvez signaler tout
contenu manifestement illicite par email à{" "}
<a href="mailto:piron.antoine@gmail.com" className="underline text-primary">
piron.antoine@gmail.com
<a href="mailto:contact@example.com" className="underline text-primary">
contact@example.com
</a>{" "}
ou en utilisant le bouton "Signaler" disponible sur chaque contribution.
</p>
@@ -52,7 +52,7 @@ export default function PrivacyPolicy() {
</h2>
<p className="text-foreground/80">
Responsable de traitement : Antoine Piron (billisdead), France.
Contact : <a href="mailto:piron.antoine@gmail.com" className="underline text-primary">piron.antoine@gmail.com</a>.
Contact : <a href="mailto:contact@example.com" className="underline text-primary">contact@example.com</a>.
</p>
</section>
@@ -132,14 +132,11 @@ export default function PrivacyPolicy() {
Mistral AI ne conserve pas les données pour entraîner ses modèles.
</p>
<p className="text-foreground/80">
Les instructions précises données à l'IA sont publiques :{" "}
<a
href="https://homegit.gyozamancave.fr/billisdead/la-voix-du-peuple/src/branch/main/docs/PROMPTS_IA.md"
className="underline text-primary"
rel="noopener noreferrer"
>
docs/PROMPTS_IA.md
</a>
Les instructions précises données à l'IA sont publiques et consultables
sur la page{" "}
<Link href="/transparence" className="underline text-primary">
Fonctionnement
</Link>
.
</p>
</section>
@@ -162,8 +159,8 @@ export default function PrivacyPolicy() {
<p className="text-foreground/80">
Conformément au RGPD (articles 15 à 22), vous disposez des droits suivants.
Pour les exercer, envoyez un email à{" "}
<a href="mailto:piron.antoine@gmail.com" className="underline text-primary">
piron.antoine@gmail.com
<a href="mailto:contact@example.com" className="underline text-primary">
contact@example.com
</a>{" "}
avec l'objet "Demande RGPD".
</p>
@@ -192,24 +189,6 @@ export default function PrivacyPolicy() {
</p>
</section>
<section className="space-y-3">
<h2 className="text-lg font-serif font-semibold border-b border-border/50 pb-2">
Document complet
</h2>
<p className="text-foreground/80">
Le document de conformité RGPD complet (registre des traitements, bases légales,
sous-traitants, durées de conservation) est disponible en open source :{" "}
<a
href="https://homegit.gyozamancave.fr/billisdead/la-voix-du-peuple/src/branch/main/docs/RGPD.md"
className="underline text-primary"
rel="noopener noreferrer"
>
docs/RGPD.md
</a>
.
</p>
</section>
<p className="text-xs text-muted-foreground/60 font-mono pt-4 border-t border-border/30">
Version 1.0 mai 2026
</p>
@@ -1,7 +1,8 @@
import React from "react";
import { Link } from "wouter";
import { ArrowLeft, Bot, Filter, FileText, Database, AlertTriangle, CheckCircle, XCircle, ArrowRight } from "lucide-react";
import { ArrowLeft, Bot, Filter, FileText, Database, AlertTriangle, CheckCircle, XCircle, ArrowRight, Code2 } from "lucide-react";
import { Button } from "@/components/ui/button";
import { LEGAL_FILTER_PROMPT, LAW_CHECK_PROMPT, SYNTHESIS_PROMPT } from "@/lib/prompts";
export default function Transparence() {
return (
@@ -321,6 +322,49 @@ export default function Transparence() {
</div>
</section>
{/* Prompts verbatim */}
<section className="space-y-6">
<div className="flex items-center gap-3 text-xl font-bold font-serif border-b border-border/50 pb-2">
<Code2 className="h-5 w-5 text-primary" />
<h2>Instructions transmises à l'IA</h2>
</div>
<p className="text-foreground/80 text-sm leading-relaxed">
Par souci de transparence radicale, voici les instructions système exactes envoyées au modèle à chaque appel. Aucun paramètre caché, aucun ajout non divulgué.
</p>
<div className="space-y-8">
<div className="space-y-2">
<p className="font-semibold text-sm font-mono uppercase tracking-widest text-primary">Prompt de modération</p>
<p className="text-xs text-muted-foreground">
Envoyé à Mistral Small à chaque soumission de contribution. Contient l'intégralité du cadre légal de référence.
</p>
<div className="max-h-96 overflow-y-auto border border-border/50 rounded bg-muted/40">
<pre className="p-4 text-xs leading-relaxed whitespace-pre-wrap font-mono text-foreground/80 break-words">{LEGAL_FILTER_PROMPT}</pre>
</div>
</div>
<div className="space-y-2">
<p className="font-semibold text-sm font-mono uppercase tracking-widest text-primary">Prompt de vérification légale</p>
<p className="text-xs text-muted-foreground">
Utilisé par la fonctionnalité "vérifier si ça existe déjà" — non bloquant, informatif.
</p>
<div className="border border-border/50 rounded bg-muted/40">
<pre className="p-4 text-xs leading-relaxed whitespace-pre-wrap font-mono text-foreground/80 break-words">{LAW_CHECK_PROMPT}</pre>
</div>
</div>
<div className="space-y-2">
<p className="font-semibold text-sm font-mono uppercase tracking-widest text-primary">Prompt de synthèse</p>
<p className="text-xs text-muted-foreground">
Envoyé à Mistral Large après chaque contribution acceptée, avec l'ensemble des contributions validées.
</p>
<div className="border border-border/50 rounded bg-muted/40">
<pre className="p-4 text-xs leading-relaxed whitespace-pre-wrap font-mono text-foreground/80 break-words">{SYNTHESIS_PROMPT}</pre>
</div>
</div>
</div>
</section>
</div>
</div>
</div>