Find a file
Jalil Arfaoui e2d0a20b45 feat: vérifier que la page Wikipedia existe et est une biographie
Appel à l'API MediaWiki pour valider que la page existe et possède la
catégorie « Wikipédia:Article biographique ». Interface WikipediaValidator
dans domain/services (port hexagonal), implémentation dans infra/.
2026-02-17 00:16:21 +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: vérifier que la page Wikipedia existe et est une biographie 2026-02-17 00:16:21 +01:00
components feat: wizard « Nouvelle personnalité » avec premier statement obligatoire 2026-02-16 23:24:11 +01:00
domain feat: vérifier que la page Wikipedia existe et est une biographie 2026-02-17 00:16:21 +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: vérifier que la page Wikipedia existe et est une biographie 2026-02-17 00:16:21 +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 chore: installer et configurer Prettier, formater tout le codebase 2026-02-11 22:10:26 +01:00
supabase chore: reformater les fichiers existants avec Prettier 2026-02-13 13:24:07 +01:00
types feat: authentification Supabase, entité Contributor, inscription par URL secrète 2026-02-12 01:59:47 +01:00
.env.example feat: afficher les erreurs d'authentification dans un bandeau visuel 2026-02-12 14:34:53 +01:00
.envrc refactor: migrate from Nx monorepo to standalone Next.js 2025-07-07 18:30:07 +02:00
.eslintignore chore: init Nx monorepo 2024-01-10 00:56:02 +01:00
.eslintrc.json chore: mettre à jour ESLint et simplifier la config 2026-02-11 22:24:45 +01:00
.gitignore chore: gitignorer .idea/, .claude et tsconfig.tsbuildinfo 2026-02-13 11:37:37 +01:00
.prettierignore chore: installer et configurer Prettier, formater tout le codebase 2026-02-11 22:10:26 +01:00
.prettierrc chore: installer et configurer Prettier, formater tout le codebase 2026-02-11 22:10:26 +01:00
CONTRIBUTING.md refactor: renommer les variables d'environnement Supabase selon la nouvelle convention 2026-02-11 22:38:31 +01:00
flake.lock chore: add supabase 2025-07-09 15:11:11 +02:00
flake.nix chore: add supabase 2025-07-09 15:11:11 +02:00
index.d.ts chore: installer et configurer Prettier, formater tout le codebase 2026-02-11 22:10:26 +01:00
middleware.ts feat: authentification Supabase, entité Contributor, inscription par URL secrète 2026-02-12 01:59:47 +01:00
next-env.d.ts chore: add supabase 2025-07-09 15:11:11 +02:00
next.config.js chore: passer à React 19 et supprimer styled-components 2026-02-13 01:14:07 +01:00
package-lock.json feat: ajouter une prise de position sur un sujet existant 2026-02-13 11:13:57 +01:00
package.json feat: wizard « Nouvelle personnalité » avec premier statement obligatoire 2026-02-16 23:24:11 +01:00
README.md refactor: renommer les variables d'environnement Supabase selon la nouvelle convention 2026-02-11 22:38:31 +01:00
tsconfig.json chore: installer et configurer Prettier, formater tout le codebase 2026-02-11 22:10:26 +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: authentification Supabase, entité Contributor, inscription par URL secrète 2026-02-12 01:59:47 +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