- Rust 85.4%
- HTML 7.6%
- CSS 4.5%
- Shell 2.5%
- 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> |
||
|---|---|---|
| deploy | ||
| scripts | ||
| src | ||
| static | ||
| templates | ||
| .env.preprod | ||
| .env.prod.example | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| README.md | ||
| schema.sql | ||
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 :
- 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. - 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é.
- Aucun verdict, aucune opinion produite par l'outil sur une personne.
- Périmètre = débat public légitime (figures publiques, faits d'intérêt public), pas de name-and-shame universel.
- Droit de rectification / retrait / déréférencement intégrés dès le départ.
- 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.
- 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_decessont 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)