Supprimés : - replit.md — doc Replit obsolète - docs/GITEA_TUTO.md — tuto push Replit → Gitea (obsolète) - artifacts/api-server/ — serveur TypeScript mort, remplacé par Flask - artifacts/voix-du-peuple/vite.config.selfhost.ts — fusionné dans vite.config.ts Nettoyés : - ai_agent.py — fallback Replit AI supprimé (Mistral + OpenAI-compatible suffisent) - vite.config.ts — plugins @replit/* retirés, PORT optionnel (défaut 5173) - package.json + pnpm-workspace.yaml — @replit/* retirés du catalog et des deps - badge.tsx + button.tsx — commentaires // @replit supprimés - README.md, DEPLOIEMENT.md, DAT.md, DEX.md, WIKI.md — références Replit remplacées Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
4.5 KiB
La Voix du Peuple — Page wiki
Type : Plateforme civique numérique
Stack : Python / Flask · React / Vite · PostgreSQL · Mistral AI
Hébergement : Auto-hébergeable (RockyLinux, Debian, VPS UE)
Dépôt : voix-du-peuple (Gitea)
Statut : Actif — avril 2026
Version doc : 1.4
Qu'est-ce que c'est ?
Un outil permettant à des citoyens de soumettre des propositions politiques en texte libre. Ces propositions sont :
- filtrées automatiquement par une IA selon les textes internationaux des droits humains (DUDH, PIDCP, CEDH…)
- synthétisées en un résumé structuré par thèmes, destiné à des élus ou décideurs
- affichées en temps réel sur la page principale
- exportables : copie horodatée dans le presse-papier, PDF mise en page, ou flyer A4 avec QR code pour diffusion physique
L'objectif est de fournir aux représentants politiques un document clair et utilisable issu des préoccupations citoyennes, sans intermédiaire. Ce que contient la synthèse est de l'expression — pas de la vérité établie. La démarche est portée par un auteur attaché à l'expertise et au dialogue fondé sur les preuves.
Fonctionnement en 6 points
- Un citoyen saisit une proposition sur la page principale
- L'IA (Mistral Small) vérifie que le contenu respecte les droits fondamentaux
- Si la contribution est acceptée, elle s'ajoute à la base et déclenche une re-synthèse
- L'IA (Mistral Large) relit toutes les contributions et produit un résumé thématique
- Le résumé s'affiche en temps réel à droite de l'écran
- Le résumé peut être partagé (texte horodaté), exporté en PDF, ou diffusé via un flyer QR imprimable
Pages de l'application
| URL | Contenu |
|---|---|
/ |
Formulaire de soumission + contributions récentes + synthèse (avec boutons Partager / PDF) |
/about |
Description du projet, posture éditoriale ("Expression, pas vérité"), fondements juridiques |
/transparence |
Fonctionnement de l'IA, données collectées, limites, encart "Ce que cette plateforme n'est pas" |
/flyer |
Flyer A4 imprimable avec QR code configurable pour diffusion physique |
Fonctionnalités d'export et de diffusion
Partager la synthèse
Bouton dans l'en-tête de la colonne de synthèse. Sur mobile : partage natif (WhatsApp, mail…). Sur bureau : copie dans le presse-papier avec date et heure.
Exporter en PDF
Bouton "PDF" dans la même zone. Ouvre une fenêtre avec le résumé mis en page (tricolore, titre, date, texte, pied de page) pour impression ou export PDF depuis le navigateur.
Flyer QR imprimable
Page /flyer : flyer format A4 avec grand QR code. L'URL encodée est modifiable :
- Via le champ texte en haut de la page (sans recharger)
- Via le paramètre URL
/flyer?url=https://monsite.fr - En modifiant la constante
DEFAULT_QR_URLdanssrc/pages/flyer.tsx
Stack technique
| Couche | Technologie |
|---|---|
| Frontend | React 18 + TypeScript + Vite 7 + Tailwind CSS |
| Backend | Python 3.11 + Flask 3 + Gunicorn |
| Base de données | PostgreSQL |
| IA | Mistral AI (API OpenAI-compatible) |
| Modération | mistral-small-latest |
| Synthèse | mistral-large-latest |
| QR code | qrcode.react |
| Police | Bahnschrift (titres), Inter (corps) |
| Couleur principale | Pétrol foncé hsl(185 42% 28%) — sans connotation partisane |
| Accessibilité | Dark mode · Police dyslexie · Contraste élevé · Texte agrandi (panneau dans la navbar) |
| Dépôt | Gitea — push via bash scripts/push-gitea.sh (token GITEA_TOKEN) |
Variables d'environnement clés
DATABASE_URL — URL PostgreSQL
MISTRAL_API_KEY — Clé API Mistral
SESSION_SECRET — Secret Flask
GITEA_TOKEN — Token d'accès Gitea (push sécurisé)
FILTER_MODEL — Modèle de modération (optionnel)
SYNTHESIS_MODEL — Modèle de synthèse (optionnel)
Données collectées
- Texte de la contribution
- Pseudonyme (facultatif, choisi par l'utilisateur)
- Horodatage
- Résultat du filtre IA (accepté / refusé + motif)
Non collecté : adresse IP, compte utilisateur, cookies de suivi.
Export / partage : entièrement côté client, rien n'est envoyé au serveur lors d'un partage ou d'un export PDF.
Liens
- Tutoriel Gitea →
docs/GITEA_TUTO.md - Architecture technique →
docs/DAT.md - Exploitation →
docs/DEX.md - Fonctionnement technique (in-app) →
/transparence