bc6bd3f9d7
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>
157 lines
5.2 KiB
Markdown
157 lines
5.2 KiB
Markdown
# La Voix du Peuple
|
|
|
|
**Plateforme civique de démocratie participative assistée par IA**
|
|
|
|
> *Un espace d'expression citoyenne — pas un sondage, pas une vérité établie.*
|
|
|
|
---
|
|
|
|
## Présentation
|
|
|
|
**La Voix du Peuple** permet à des citoyens de soumettre librement des propositions politiques en texte libre. Chaque contribution est automatiquement :
|
|
|
|
1. **Filtrée** par une IA selon le droit international des droits humains (DUDH, PIDCP, CEDH, Charte UE, CERD, Statut de Rome)
|
|
2. **Intégrée** à une synthèse collective structurée par thèmes
|
|
3. **Mise à disposition** des élus et décideurs sous forme lisible
|
|
|
|
La plateforme ne produit pas un consensus, ni une vérité : elle donne à voir ce que des citoyens ont choisi d'exprimer, tel quel. La démarche est portée par un auteur attaché à l'expertise et au dialogue fondé sur les preuves.
|
|
|
|
---
|
|
|
|
## Captures d'écran
|
|
|
|
### Page principale — soumission et synthèse en temps réel
|
|
|
|

|
|
|
|
### À propos — concept et posture éditoriale
|
|
|
|

|
|
|
|
### Fonctionnement — parcours d'une contribution
|
|
|
|

|
|
|
|
### Flyer QR — diffusion physique imprimable
|
|
|
|

|
|
|
|
---
|
|
|
|
## Fonctionnalités
|
|
|
|
| Fonctionnalité | Description |
|
|
|----------------|-------------|
|
|
| Soumission libre | Formulaire texte avec pseudonyme optionnel |
|
|
| Modération IA | Filtre automatique fondé sur le droit international |
|
|
| Synthèse thématique | Résumé en temps réel par Mistral Large |
|
|
| Export PDF | Synthèse mise en page, générée côté client |
|
|
| Partage horodaté | Copie dans le presse-papier ou partage natif mobile |
|
|
| Flyer QR imprimable | Flyer A4 avec QR code configuré sur votre domaine |
|
|
| Dark mode | Thème sombre pétrol |
|
|
| Accessibilité | Police dyslexie · Contraste élevé · Texte agrandi · Navigation clavier |
|
|
|
|
---
|
|
|
|
## Stack technique
|
|
|
|
| Couche | Technologie |
|
|
|--------|-------------|
|
|
| Frontend | React 18 · TypeScript · Vite 7 · Tailwind CSS · shadcn/ui |
|
|
| Backend | Python 3.11 · Flask 3 · Gunicorn |
|
|
| Base de données | PostgreSQL 15 |
|
|
| IA — modération | Mistral Small (`mistral-small-latest`) |
|
|
| IA — synthèse | Mistral Large (`mistral-large-latest`) |
|
|
| QR code | `qrcode.react` |
|
|
|
|
---
|
|
|
|
## Installation rapide (RockyLinux)
|
|
|
|
Voir le guide complet → [`docs/INSTALL_ROCKY.md`](docs/INSTALL_ROCKY.md)
|
|
|
|
```bash
|
|
# Cloner le dépôt
|
|
git clone https://homegit.gyozamancave.fr/billisdead/la-voix-du-peuple.git
|
|
cd la-voix-du-peuple
|
|
|
|
# Configurer l'environnement
|
|
cp .env.example .env
|
|
vim .env # DATABASE_URL, MISTRAL_API_KEY, SESSION_SECRET
|
|
|
|
# Définir le domaine et construire le frontend
|
|
bash scripts/set-domain.sh https://votredomaine.fr
|
|
|
|
# Démarrer les services
|
|
systemctl start voix-du-peuple-api
|
|
systemctl start nginx
|
|
```
|
|
|
|
Le site écoute sur le **port HTTP 8080**. Vous gérez le HTTPS en amont.
|
|
|
|
---
|
|
|
|
## Variables d'environnement clés
|
|
|
|
```env
|
|
# Base de données
|
|
DATABASE_URL=postgresql://user:pass@localhost:5432/voix_du_peuple
|
|
|
|
# IA (Mistral recommandé — souveraineté européenne)
|
|
MISTRAL_API_KEY=sk-...
|
|
|
|
# Sécurité (obligatoire en production)
|
|
SECRET_KEY=une-longue-chaine-aleatoire-minimum-32-chars
|
|
ADMIN_SECRET=votre-mot-de-passe-admin
|
|
|
|
# Anti-abus (optionnel — valeurs par défaut raisonnables)
|
|
REDIS_URL=redis://localhost:6379/0
|
|
RATE_LIMIT_CONTRIBUTIONS=5 per minute;3 per hour
|
|
CONTRIBUTION_COOLDOWN_SECONDS=3600
|
|
FLOOD_THRESHOLD=10
|
|
|
|
# hCaptcha (optionnel — recommandé en production)
|
|
HCAPTCHA_SECRET_KEY=votre-cle-secrete
|
|
|
|
# Frontend
|
|
VITE_APP_URL=https://votredomaine.fr
|
|
VITE_HCAPTCHA_SITE_KEY=votre-cle-de-site # Nécessite rebuild frontend
|
|
```
|
|
|
|
---
|
|
|
|
## Changer de domaine (QR code)
|
|
|
|
```bash
|
|
bash scripts/set-domain.sh https://nouveaudomaine.fr
|
|
systemctl reload nginx
|
|
```
|
|
|
|
---
|
|
|
|
## Documentation
|
|
|
|
| Document | Contenu |
|
|
|----------|---------|
|
|
| [`docs/DAT.md`](docs/DAT.md) | Architecture technique complète |
|
|
| [`docs/DEX.md`](docs/DEX.md) | Guide d'exploitation et maintenance |
|
|
| [`docs/WIKI.md`](docs/WIKI.md) | Page wiki — présentation générale |
|
|
| [`docs/INSTALL_ROCKY.md`](docs/INSTALL_ROCKY.md) | Installation sur RockyLinux 9 |
|
|
| [`docs/SECURITE_ANTI_ABUS.md`](docs/SECURITE_ANTI_ABUS.md) | Protections anti-bot, flood, rate limiting, hCaptcha |
|
|
| [`docs/RGPD.md`](docs/RGPD.md) | Conformité RGPD — registre des traitements |
|
|
| [`docs/PROMPTS_IA.md`](docs/PROMPTS_IA.md) | Prompts IA intégraux (transparence algorithmique) |
|
|
|
|
---
|
|
|
|
## Licence
|
|
|
|
Ce projet est publié sous **[European Union Public Licence v. 1.2 (EUPL-1.2)](LICENSE)**.
|
|
|
|
L'EUPL-1.2 est la licence open source officielle de l'Union européenne. Elle est :
|
|
- **Compatible** avec la GPL v2/v3, l'AGPL v3 et la MPL 2.0 (cf. Appendice)
|
|
- **Reconnue** par la Commission européenne et les institutions publiques de l'UE
|
|
- **Adaptée** aux projets civiques et associatifs souhaitant une réutilisation libre sous condition de réciprocité (copyleft)
|
|
- **Disponible** en 23 langues officielles de l'UE — voir [joinup.ec.europa.eu](https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12)
|
|
|
|
Ce choix est cohérent avec la posture souveraineté numérique européenne du projet et permet à toute association, mairie ou collectif de reprendre et déployer cet outil sous les mêmes conditions.
|