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
This commit is contained in:
pironantoine
2026-04-03 16:58:47 +00:00
parent f9c4073d21
commit ae970b2a32
13 changed files with 1534 additions and 32 deletions
+61 -19
View File
@@ -1,27 +1,69 @@
# Workspace
# La Voix du Peuple
## Overview
## Vue d'ensemble
pnpm workspace monorepo using TypeScript. Each package manages its own dependencies.
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 tool**: pnpm workspaces
- **Node.js version**: 24
- **Package manager**: pnpm
- **TypeScript version**: 5.9
- **API framework**: Express 5
- **Database**: PostgreSQL + Drizzle ORM
- **Validation**: Zod (`zod/v4`), `drizzle-zod`
- **API codegen**: Orval (from OpenAPI spec)
- **Build**: esbuild (CJS bundle)
- **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)
## Key Commands
## 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
- `pnpm run typecheck` — full typecheck across all packages
- `pnpm run build` — typecheck + build all packages
- `pnpm --filter @workspace/api-spec run codegen` — regenerate API hooks and Zod schemas from OpenAPI spec
- `pnpm --filter @workspace/db run push` — push DB schema changes (dev only)
- `pnpm --filter @workspace/api-server run dev` — run API server locally
## Commandes clés
See the `pnpm-workspace` skill for workspace structure, TypeScript setup, and package details.
- `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 `/`)