Files
la-voix-du-peuple/replit.md
T
pironantoine ae970b2a32 Update political idea platform to use Python Flask backend
Replace the existing Node.js API server with a Python Flask application, implementing robust AI-driven content filtering based on international human rights law and enhancing security measures.

Replit-Commit-Author: Agent
Replit-Commit-Session-Id: 923ae0e3-a363-4db8-b04a-e8baca2a1330
Replit-Commit-Checkpoint-Type: full_checkpoint
Replit-Commit-Event-Id: 30f4e946-427f-4b27-989d-531b9116d12f
Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/8af7d2ec-2cc3-4ece-8af3-9f071488d072/923ae0e3-a363-4db8-b04a-e8baca2a1330/AWHAa3Z
Replit-Helium-Checkpoint-Created: true
2026-04-03 16:58:47 +00:00

70 lines
2.8 KiB
Markdown

# La Voix du Peuple
## Vue d'ensemble
Plateforme démocratique citoyenne où les citoyens soumettent leurs idées politiques, filtrées par IA selon le droit international des droits humains, puis synthétisées en un texte collectif vivant.
## Architecture
### Frontend
- **React + Vite** (`artifacts/voix-du-peuple/`)
- Interface bicolonne : formulaire de soumission + synthèse en direct
- Auto-refresh de la synthèse toutes les 15 secondes
- Hooks générés par Orval depuis l'OpenAPI spec
### Backend
- **Python Flask** (`artifacts/flask-api/`) — remplace le serveur TypeScript/Express
- Sert l'API sur `/api/*`
- Démarre via `artifacts/flask-api/start.sh`
### IA Agentique (deux agents)
1. **Agent filtrage** (`ai_agent.py::filter_idea`) — gpt-5-mini
- Filtre selon DUDH, PIDCP, CEDH, Charte UE, etc.
- Double protection : filtre du proxy Azure + filtre légal IA
2. **Agent synthèse** (`ai_agent.py::synthesize_ideas`) — gpt-5.2
- Synthèse collective en français, "Nous, le peuple..."
- Déclenché en arrière-plan à chaque nouvelle idée acceptée
### Base légale du filtre (`legal_framework.py`)
- Déclaration universelle des droits de l'homme (DUDH, ONU 1948)
- Pacte international relatif aux droits civils et politiques (PIDCP, ONU 1966)
- Convention européenne des droits de l'homme (CEDH, 1950)
- Charte des droits fondamentaux de l'UE (2000/2009)
- Convention pour la prévention du génocide (ONU 1948)
- Statut de Rome / CPI (1998)
- CERD — Convention sur la discrimination raciale (ONU 1965)
### Base de données
- **PostgreSQL** via `psycopg2` directement (pas d'ORM Flask)
- Tables : `ideas`, `synthesis`
- Drizzle ORM maintenu côté TypeScript pour compatibilité (schema dans `lib/db/`)
## Stack
- **Monorepo** : pnpm workspaces
- **Node.js** : 24 (pour le frontend React)
- **Python** : 3.11 (pour le backend Flask)
- **TypeScript** : 5.9
- **API** : OpenAPI spec → Orval codegen → React Query hooks
- **IA** : Replit AI Integrations (OpenAI proxy, pas de clé API requise)
## Sécurité Flask
- Rate limiting : 5 soumissions/minute, 20/heure par IP (`flask-limiter`)
- Assainissement XSS : `bleach.clean()` sur toutes les entrées
- En-têtes HTTP : CSP, X-Frame-Options DENY, X-Content-Type-Options, etc.
- Requêtes paramétrées : `psycopg2` avec `%s` — protection injection SQL
- CORS configuré
- Aucun secret exposé dans les réponses d'erreur
## Commandes clés
- `pnpm --filter @workspace/api-spec run codegen` — régénérer les hooks React
- `pnpm --filter @workspace/db run push` — migrer le schéma DB
- `pnpm --filter @workspace/voix-du-peuple run dev` — frontend dev
- `sh artifacts/flask-api/start.sh` — backend Flask
## Workflows
- `artifacts/api-server: API Server` → Flask (port 8080, chemin `/api`)
- `artifacts/voix-du-peuple: web` → React/Vite (port 20108, chemin `/`)