Update several documentation files (.toml, .md) to reflect new features such as a QR code flyer page, share/PDF export buttons, and dependency updates, including version increments to v1.1. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 923ae0e3-a363-4db8-b04a-e8baca2a1330 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Event-Id: 88b9da52-be77-4c86-854b-f097a8c7ae86 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/8af7d2ec-2cc3-4ece-8af3-9f071488d072/923ae0e3-a363-4db8-b04a-e8baca2a1330/Z3YUti7 Replit-Helium-Checkpoint-Created: true
3.9 KiB
La Voix du Peuple — Page wiki
Type : Plateforme civique numérique
Stack : Python / Flask · React / Vite · PostgreSQL · Mistral AI
Hébergement : Replit (dev) / Auto-hébergeable (RockyLinux, Debian)
Dépôt : voix-du-peuple (Gitea)
Statut : Actif — avril 2026
Version doc : 1.1
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.
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 et fondements juridiques |
/transparence |
Fonctionnement de l'IA, données collectées, limites |
/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) |
Variables d'environnement clés
DATABASE_URL — URL PostgreSQL
MISTRAL_API_KEY — Clé API Mistral
SESSION_SECRET — Secret Flask
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