Agrégateur de profils de personnalités françaises mis en récit par LLM locaux. Transparence des sources, auto-hébergé, frugal, respect de la vie privée. Rust/Axum + SQLite.
  • Rust 85.4%
  • HTML 7.6%
  • CSS 4.5%
  • Shell 2.5%
Find a file
Clem 8e15f7e898 Enrichissement : photos, genre, nationalité + grille + récits accordés
- Connecteur Wikidata : portrait (P18 -> vignette Commons), genre (P21),
  nationalité(s) (P27) ; accord des libellés au genre (plus de « X ou Y »)
- Récits narratifs accordés au genre, centrés œuvres/affaires + contexte
  historique, en texte suivi (pas de liste) ; num_predict relevé
- UI : liste -> grille de cartes avec photo ; portrait sur la fiche
- Modèle/publish : colonnes genre, image_url, nationalites

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-01 22:40:38 +02:00
deploy Preprod native (Mac) en parité avec la prod hom-e 2026-07-01 11:00:55 +02:00
scripts Preprod native (Mac) en parité avec la prod hom-e 2026-07-01 11:00:55 +02:00
src Enrichissement : photos, genre, nationalité + grille + récits accordés 2026-07-01 22:40:38 +02:00
static Enrichissement : photos, genre, nationalité + grille + récits accordés 2026-07-01 22:40:38 +02:00
templates Enrichissement : photos, genre, nationalité + grille + récits accordés 2026-07-01 22:40:38 +02:00
.env.preprod preprod: modèle par défaut gemma4:26b (chargement + génération bien plus rapides) 2026-07-01 21:43:22 +02:00
.env.prod.example Atelier/prod : génération de récits en tâche de fond + validation humaine 2026-07-01 15:34:51 +02:00
.gitignore Commande publish : base de prod autonome (validé uniquement) 2026-07-01 15:44:16 +02:00
Cargo.lock Preprod native (Mac) en parité avec la prod hom-e 2026-07-01 11:00:55 +02:00
Cargo.toml Scaffold initial : backend Axum + SQLite + Ollama (SSR Askama) 2026-06-30 13:20:30 +02:00
README.md Commande publish : base de prod autonome (validé uniquement) 2026-07-01 15:44:16 +02:00
schema.sql Enrichissement : photos, genre, nationalité + grille + récits accordés 2026-07-01 22:40:38 +02:00

Profilesque

Agrégateur de données publiques sur des personnalités françaises (parcours, récompenses, mandats), mis en récit par des LLM locaux (Ollama). Auto-hébergé, frugal, respectueux de la vie privée.

Mission

Outil de transparence des sources : aider à distinguer ce qui est documenté et vérifiable de ce qui est simplement affirmé. Objectif — contrer la désinformation et les emballements réputationnels en montrant les preuves et leur provenance, jamais en délivrant un jugement de plus.

Principe directeur : Profilesque n'émet pas d'opinion sur les personnes. Il expose des faits sourcés et laisse le lecteur se faire son avis.

Stack

  • Backend : Rust + Axum (Tokio)
  • Base de données : SQLite via sqlx (WAL + FTS5)
  • Rendu : SSR Askama + HTMX (frugal, quasi zéro JS)
  • LLM : Ollama en localhost, récits mis en cache en base
  • Déploiement : systemd derrière le Nginx de Yunohost, Fail2Ban

Lancer en local

Prérequis : Rust stable, et (optionnel) Ollama en cours d'exécution.

cargo run
# puis http://127.0.0.1:8080  —  exemple : /personne/1

Sans Ollama, le site fonctionne : le récit affiche un message « hors-ligne ».

Variables d'environnement

Variable Défaut
DATABASE_URL sqlite://data/profilesque.db?mode=rwc
OLLAMA_URL http://127.0.0.1:11434
OLLAMA_MODEL llama3.2
BIND_ADDR 127.0.0.1:8080

Vie privée & cadre juridique (garde-fous)

Ces règles sont structurantes, pas optionnelles :

  1. Sources primaires, pas de republication. On lie et cite des sources officielles/vérifiables (URL + date de capture, table source) — on ne reconstitue pas une base de données de faits sensibles.
  2. Séparation absolue fait / texte généré. L'IA ne commente jamais le pénal d'une personne ; au mieux elle résume neutrement des faits sourcés et marque « non vérifié » ce qui ne l'est pas. Tout texte généré est signalé.
  3. Aucun verdict, aucune opinion produite par l'outil sur une personne.
  4. Périmètre = débat public légitime (figures publiques, faits d'intérêt public), pas de name-and-shame universel.
  5. Droit de rectification / retrait / déréférencement intégrés dès le départ.
  6. Volet judiciaire (art. 10 RGPD) = gelé. Toute donnée de condamnation est exclue par défaut et ne sera envisagée qu'après fondement juridique explicite (avis d'avocat / cadrage CNIL). Respecter : présomption d'innocence (décisions non définitives), réhabilitation, droit à l'oubli.
  7. Affichage limité aux personnes décédées dans un premier temps : le RGPD ne s'applique pas aux défunts. L'ingestion peut collecter largement, mais seules les personnes avec une date_deces sont affichées (gating en base).

Licence

AGPL-3.0-or-later (à confirmer — fichier LICENSE à ajouter).

Feuille de route

  • Recherche FTS5 + HTMX
  • Connecteur d'ingestion Wikidata (avec provenance) + gating « décédés »
  • Génération en tâche de fond (atelier) + validation humaine
  • Publication atelier → prod (base autonome ne contenant que le validé)
  • Transfert vers hom-e + packaging Yunohost (systemd + Nginx + Fail2Ban)
  • UI de relecture (atelier)
  • Autres connecteurs (sources gouvernementales)
  • Suivi des redirections Wikidata (ex. Q535)

Flux atelier → prod (CLI)

Le travail IA se fait sur le Mac (atelier) ; hom-e (prod) ne sert que du validé.

profilesque ingest Q7186 Q937   # 1. collecte Wikidata (sourcée)
profilesque generer             # 2. génère les récits manquants (brouillons)
profilesque valider 1           # 3. valide après relecture humaine
profilesque publish             # 4. construit dist/profilesque-prod.db (validé only)
# 5. copie du fichier sur hom-e + swap atomique (à venir : script de déploiement)