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:
@@ -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 `/`)
|
||||
|
||||
Reference in New Issue
Block a user