Find a file
Jalil Arfaoui 7f9efc5ee2 feat: refonte page /p avec vue SQL pré-agrégée, recherche et index A-Z
Remplace le findAll() + getStats() par personnalité (843 requêtes) par une vue SQL v_public_figure_activity_summary (2-3 requêtes). La page affiche maintenant 4 sections : recherche, top 10 actives, activité récente, et index alphabétique. Renomme aussi subject_activity_summary en v_subject_activity_summary pour uniformiser la convention de nommage des vues.
2026-03-10 01:10:44 +01:00
.vscode chore: add IDE configs 2024-01-10 00:56:19 +01:00
api move all api files to own directory 2024-01-05 01:23:21 +01:00
app feat: refonte page /p avec vue SQL pré-agrégée, recherche et index A-Z 2026-03-10 01:10:44 +01:00
components feat: refonte page /p avec vue SQL pré-agrégée, recherche et index A-Z 2026-03-10 01:10:44 +01:00
domain feat: refonte page /p avec vue SQL pré-agrégée, recherche et index A-Z 2026-03-10 01:10:44 +01:00
frontend chore: init Nx monorepo 2024-01-10 00:56:02 +01:00
hooks feat: implémenter le système de réputation avec rangs et permissions 2026-02-12 18:12:21 +01:00
infra feat: refonte page /p avec vue SQL pré-agrégée, recherche et index A-Z 2026-03-10 01:10:44 +01:00
public feat: ajouter sitemap, robots.txt et protection TDMRep contre le crawling IA 2026-02-13 10:48:45 +01:00
ruby-backend move all ruby backend files to own directory 2024-01-05 01:02:42 +01:00
styles feat: migration Next.js 15 → 16 (Turbopack, ESLint 9, proxy) 2026-02-21 16:30:21 +01:00
supabase feat: refonte page /p avec vue SQL pré-agrégée, recherche et index A-Z 2026-03-10 01:10:44 +01:00
types feat: refonte page /p avec vue SQL pré-agrégée, recherche et index A-Z 2026-03-10 01:10:44 +01:00
.env.example feat: installer Sentry pour le monitoring d'erreurs 2026-02-18 12:01:08 +01:00
.envrc refactor: migrate from Nx monorepo to standalone Next.js 2025-07-07 18:30:07 +02:00
.gitignore chore: gitignorer .idea/, .claude et tsconfig.tsbuildinfo 2026-02-13 11:37:37 +01:00
.prettierignore feat: pré-remplissage du formulaire de contribution et CRUD sujets 2026-02-28 00:02:38 +01:00
.prettierrc chore: installer et configurer Prettier, formater tout le codebase 2026-02-11 22:10:26 +01:00
CONTRIBUTING.md feat: pré-remplissage du formulaire de contribution et CRUD sujets 2026-02-28 00:02:38 +01:00
eslint.config.mjs feat: migration Next.js 15 → 16 (Turbopack, ESLint 9, proxy) 2026-02-21 16:30:21 +01:00
flake.lock chore: supabase-cli depuis nixpkgs-unstable pour avoir une version plus récente 2026-02-28 00:05:20 +01:00
flake.nix chore: supabase-cli depuis nixpkgs-unstable pour avoir une version plus récente 2026-02-28 00:05:20 +01:00
index.d.ts feat: migration Next.js 15 → 16 (Turbopack, ESLint 9, proxy) 2026-02-21 16:30:21 +01:00
instrumentation-client.ts feat: installer Sentry pour le monitoring d'erreurs 2026-02-18 12:01:08 +01:00
instrumentation.ts feat: installer Sentry pour le monitoring d'erreurs 2026-02-18 12:01:08 +01:00
next-env.d.ts feat: refonte page /p avec vue SQL pré-agrégée, recherche et index A-Z 2026-03-10 01:10:44 +01:00
next.config.js feat: formulaire unifié de contribution avec upload admin, gestion d'erreurs Sentry et validation date-fns 2026-02-24 01:22:56 +01:00
package-lock.json perf: ajout de sharp pour l'optimisation d'images next/image 2026-02-22 01:15:18 +01:00
package.json perf: ajout de sharp pour l'optimisation d'images next/image 2026-02-22 01:15:18 +01:00
proxy.ts feat: migration Next.js 15 → 16 (Turbopack, ESLint 9, proxy) 2026-02-21 16:30:21 +01:00
README.md refactor: renommer les variables d'environnement Supabase selon la nouvelle convention 2026-02-11 22:38:31 +01:00
sentry.edge.config.ts feat: installer Sentry pour le monitoring d'erreurs 2026-02-18 12:01:08 +01:00
sentry.server.config.ts feat: installer Sentry pour le monitoring d'erreurs 2026-02-18 12:01:08 +01:00
tsconfig.json feat: migration Next.js 15 → 16 (Turbopack, ESLint 9, proxy) 2026-02-21 16:30:21 +01:00
tsconfig.spec.json refactor: migrate from Nx monorepo to standalone Next.js 2025-07-07 18:30:07 +02:00
vitest.config.ts feat: système d'invitation par les contributeurs Éloquent (1000+ pts) 2026-02-27 23:56:20 +01:00

Débats.co

Objectif du projet

Offrir une synthèse ouverte, impartiale et vérifiable des sujets clivants de notre société.

Débats est un projet francophone et participatif qui vise à créer une plateforme collaborative de type wiki pour cartographier les positions et l'évolution de l'engagement des personnalités publiques sur des sujets de société controversés.

Vision

  • Démocratie transparente : Permettre aux citoyens de suivre les positions de leurs représentants
  • Rigueur intellectuelle : Collecter et organiser les prises de position avec des sources vérifiables
  • Lutte contre la simplification : Promouvoir un débat public nuancé
  • Crédibilité de l'engagement public : Documenter l'évolution des positions dans le temps

Historique du projet

Le projet a été initié en 2014 et a connu plusieurs itérations technologiques :

1. Ruby Backend (2014-2018)

  • Stack : Ruby on Rails fullstack
  • État : Version la plus aboutie avec modèle de données complet
  • Localisation : ruby-backend/
  • Fonctionnalités : CRUD complet, authentification, upload d'images

2. Frontend React (2018-2019)

  • Stack : React + Redux + GraphQL
  • État : Interface utilisateur moderne mais incomplète
  • Localisation : frontend/
  • Objectif : Moderniser l'interface utilisateur

3. API GraphQL (2019-2020)

  • Stack : Node.js + GraphQL + Prisma
  • État : API moderne mais non finalisée
  • Localisation : api/
  • Objectif : Remplacer le backend Ruby par une API moderne

4. Elixir Phoenix (2020-2021)

  • Stack : Elixir + Phoenix + PostgreSQL
  • État : Refonte complète mais abandonnée
  • Localisation : debats-elixir/
  • Objectif : Performance et fiabilité

5. Next.js Standalone (actuel)

  • Stack : Next.js 15 + TypeScript + Supabase + Effect TS
  • État : En cours de développement
  • Localisation : racine du projet
  • Objectif : Consolidation et première version exploitable

Modèle de données

Le cœur du modèle est cohérent entre toutes les versions :

Subject (Sujet)
├── Positions (ex: "Pour", "Contre", "Nuancé")
    └── Statements (Prises de position)
        ├── PublicFigure (Personnalité)
        ├── Evidence (Preuves/Sources)
        └── Arguments

Users (Contributeurs)

Entités principales

  • Subject : Les sujets de débat (ex: "Immigration", "Écologie", "Retraites")
  • Position : Les différentes positions possibles sur un sujet
  • PublicFigure : Les personnalités publiques (politiques, intellectuels, etc.) - Critère de notoriété : toute personnalité doit avoir une page Wikipedia valide
  • Statement : Les prises de position concrètes d'une personnalité sur une position
  • Evidence : Les preuves et sources (citations, articles, vidéos, discours)
  • Argument : Les arguments développés pour défendre une position
  • User : Les utilisateurs contributeurs de la plateforme

Architecture technique actuelle

Stack

  • Frontend/Backend : Next.js 15 (App Router)
  • Base de données : PostgreSQL via Supabase
  • Authentification : Supabase Auth
  • Domain : Effect TS + Effect Schema
  • Styling : CSS Modules

Structure

├── app/              # Next.js App Router
├── domain/           # Logique métier (entités, services, règles)
├── infra/            # Infrastructure (Supabase, APIs)
├── components/       # Composants React réutilisables
├── supabase/         # Migrations et seeds
└── types/            # Types générés

Projets legacy (référence)

  • ruby-backend/ : Application Rails originale
  • debats-elixir/ : Version Phoenix abandonnée

Développement

Prérequis

  • Node.js 20+
  • Docker (pour Supabase local)
  • Nix + direnv (recommandé)

Installation

npm install
supabase start
supabase db reset  # Applique migrations + seeds

Variables d'environnement

Créer un fichier .env.local :

NEXT_PUBLIC_SUPABASE_URL=http://127.0.0.1:54321
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY=<clé publishable locale>

Lancement du développement

npm run dev

Feuille de route

Phase 1 : MVP

  • Consolidation du modèle de données
  • Interface de base pour consulter sujets et positions
  • Authentification simple
  • CRUD basique pour les entités principales

Phase 2 : Fonctionnalités collaboratives

  • Système de contribution et modération
  • Historique des modifications
  • Système de réputation des contributeurs
  • Interface d'administration

Phase 3 : Fonctionnalités avancées

  • Recherche et filtres avancés
  • API publique
  • Export de données
  • Analyses et statistiques

Contributions

Le projet est open source et accueille les contributions. Voir CONTRIBUTING.md pour plus d'informations.

Licence

MIT