Créa·Ka
Les créateurs d'ici, tous leurs liens
> Les pastilles de la deuxième rangée sont **dynamiques** : elles interrogent en direct `GET /api/stats` du site via shields.io.
**Créa·Ka** ([www.crea-ka.com](https://www.crea-ka.com)) est l'**annuaire public, québécois et cross-plateforme des créateurs de contenu** — croisement entre un annuaire cherchable et un « Linktree collectif ». **12 014 créateurs** et **19 333 comptes reliés** sur **19 plateformes** (au 2026-08-28). Chaque créateur québécois a **une fiche canonique** qui regroupe **tous ses comptes publics** — Instagram, TikTok, YouTube, Twitch, X, Facebook, Snapchat, Kick, Substack, Patreon, OnlyFans, balado… — chacun avec son URL canonique, ses métriques (abonnés, publications, j'aime, vues, épisodes) et son **score de confiance de rattachement**.
Pour qui ? Le public qui découvre des créateurs par niche, région, langue ou taille d'audience ; les créateurs eux-mêmes (fiche, opt-out) ; les marques et médias qui cherchent un annuaire public là où les bases existantes sont payantes, généralistes et anglophones. L'**éthique prime sur tout** : profils publics et professionnels seulement, purge des données privées, opt-out immédiat et persistant, régime restreint des mineurs, conformité Loi 25.
## Visite guidée
> ⚠️ **Application archivée le 2026-09-04** — l'URL live (https://www.crea-ka.com) est hors fonction ; l'app a été retirée du cluster MacLustr (registre mld, admin-ka, gardiens, site groupe-ka). Ce dépôt spbgit reste la source de vérité pour une remise en service.
*Captures du 2026-08-28 (desktop 1440×900) — chiffres live du jour : 12 014 créateurs · 19 333 comptes reliés · 19 plateformes.*
### 1 · Accueil — l'annuaire
Le héros « **Chaque créateur québécois. Tous ses liens.** » avec les compteurs live (12 014 créateurs · 19 333 comptes reliés · 19 plateformes), les quatre promesses du produit (**cross-plateforme**, **découvrable**, **liens vérifiés**, **respectueux** — Loi 25), la recherche plein texte et les six filtres (niche, région, plateforme, taille, langue, tri). En dessous, la grille de cartes créateurs : avatar, badge de tier (MÉGA/macro/micro/nano) et nombre de plateformes reliées. La bulle **Ka** en bas à droite est le widget KA Agent.
### 2 · /plateformes — page SEO programmatique (rendu serveur)
La page `/plateformes` telle que **servie aux moteurs de recherche** (HTML rendu côté serveur avant hydratation de la SPA) : « Créateurs québécois par plateforme — 19 plateformes », une entrée par plateforme avec le décompte de créateurs (YouTube 8 912 · Instagram 3 533 · Facebook 1 772 · TikTok 1 038 · X 931 · Twitch 634 · balado 250 · OnlyFans 250 · Spotify 221 · Discord 221 · site web 189 · Kick 147 · Threads 128 · LinkedIn 64 · Patreon 54 · Snapchat 29 · Substack 24 · MYM 24 · Fansly 19). Chaque entrée pointe vers `/plateforme/{p}` — dans le navigateur, la SPA reprend la main et affiche l'annuaire filtré.
### 3 · /stats — les créateurs québécois en chiffres
Le tableau de bord analytique : tuiles KPI (12 014 créateurs au répertoire, 19 333 comptes publics reliés, **3 018 créateurs multi-plateformes**, **750 comptes vérifiés**, 20 niches, 16 régions, **769,7 M d'abonnés en portée cumulée connue**, 1,61 compte relié par créateur en moyenne), sélecteur de période (aujourd'hui → 12 mois → tout → plage libre), jauges « taux & couvertures » (créateurs multi-plateformes, fiches avec biographie, avec ville ou région, avec audience connue, complétude moyenne) et boutons **Rapport PDF complet** + catalogue « Autres rapports » (kapdf/ReportBuilder).
### 4 · /retrait — opt-out immédiat (Loi 25)
« Vie privée d'abord » : un créateur ou une créatrice qui ne veut plus figurer dans l'annuaire remplit nom public + un de ses comptes (`plateforme:handle`), raison et courriel facultatifs — la fiche est **masquée immédiatement** et exclue de toute ré-agrégation future (liste persistante `data/optout.json`). Le même formulaire sert aux corrections d'erreur (mauvais compte rattaché).
### 5 · /contact — nous joindre
Les trois courriels du Groupe KA (contact@ projets & partenariats · info@ médias · admin@ légal, vie privée & Loi 25), le rappel de la posture d'agrégateur (« nous ne vendons rien, ne louons rien et ne sommes partie à aucune transaction »), le bouton « Demander un retrait (Loi 25) » et l'annuaire des plateformes du groupe.
### 6 · /plateforme/youtube — annuaire préfiltré par plateforme
Chaque plateforme a son URL dédiée : ici `/plateforme/youtube` ouvre l'annuaire avec le filtre **YouTube** présélectionné — **8 912 créateurs trouvés**. Même mécanique pour les 18 autres plateformes ; ces pages sont aussi rendues en HTML côté serveur pour le SEO.
### 7 · Fiche créateur — la fiche canonique
La fiche `/createur/{id}` (ici le magazine sportif *10-21-42KM*) : **bannière héro**, avatar, badges tier/niche/langue (nano · sport & fitness · français), bio, tuiles de métriques cumulées (70 abonnés cumulés · 1 plateforme · 12 contenus analysés · plateforme nº 1 YouTube), onglets **Vue d'ensemble** + un onglet par plateforme reliée, et le **Ka Score /100** avec ses jauges (audience…). Bouton « Se connecter avec KA ID » pour mettre le créateur en favori.
### 8 · /favoris — « Mon univers Ka »
Les créateurs favoris sont gardés dans le compte **KA ID** sur groupe-ka.com : les mêmes favoris suivent l'utilisateur sur toutes les plateformes du Groupe KA (« un seul compte pour tout le groupe — vos favoris sont entreposés au hub, jamais ici »). En bas : le footer commun de l'écosystème (`ecosystem.json`).
### 9 · /compte — connexion KA ID (SSO)
« Connectez-vous avec votre **KA ID** » : le même compte que sur groupe-ka.com, Lou-Ka, Vrai-Prix et les autres plateformes du groupe (SSO du hub). Boutons se connecter / créer un compte / « Qu'est-ce que KA ID ? ».
### 10 · /doc — le guide en ligne
« Comment fonctionne Créa·Ka » : la documentation illustrée intégrée au site (vue d'ensemble, parcours en 4 étapes, provenance des données, FAQ), avec cartes de synthèse (fiches canoniques, 20 niches · 17 régions, connecteurs) et bouton **Télécharger le PDF**.
### Vue mobile
*Captures mobiles 390×844 du 2026-08-25, conservées dans `docs/screenshots/mobile/` (et leurs pendants desktop `.webp` dans `docs/screenshots/desktop/`).*
 Annuaire — cartes créateurs, tabbar basse |
 Fiche créateur — métriques multi-plateformes |
 Tableau de bord analytique |
> 🗄️ Les captures d'époque sont conservées dans [`docs/archive/`](docs/archive/).
## Chiffres clés (live, au 2026-08-28)
| Métrique | Valeur | Source |
|---|---|---|
| Créateurs publiés | **12 014** | `GET /api/stats` → `creators` |
| Comptes reliés | **19 333** | `GET /api/stats` → `accounts` |
| Plateformes avec comptes | **19** (YouTube 9 405 · Instagram 3 654 · Facebook 1 849 · TikTok 1 097 · X 953 · Twitch 648 · balados 283 · OnlyFans 263 · Discord 258 · Spotify 230 · site web 192 · Kick 147 · Threads 128…) | `by_platform` |
| Créateurs multi-plateformes | **3 018** (+ 750 comptes vérifiés/badge) | `/stats` |
| Portée cumulée connue | **769,7 M** d'abonnés (1,61 compte relié/créateur en moy.) | `/stats` |
| Niches | **20** | `GET /api/taxonomies` |
| Régions administratives | **17** (16 représentées) | `GET /api/taxonomies` |
| Tiers d'audience | nano 10 883 · micro 822 · macro 245 · méga 64 | `by_tier` |
| Connecteurs | **22** (comptés dans `creaka/connectors/`) | code |
| Acteurs Apify maison | **13** (`actors/ka-*`) | code |
| Tests pytest | **51** | `pytest --collect-only` |
## Fonctionnalités
- **Annuaire filtrable** par niche (20), région (17 régions administratives), langue (fr/en/bilingue), plateforme et taille d'audience (nano/micro/macro/méga).
- **Page dédiée par créateur** — `/createur/{id}` avec tous ses liens et métriques, bannière héro, **Ka Score /100**, sparkline d'audience et bloc live.
- **Pages SEO programmatiques** — `/plateformes` + `/plateforme/{p}` rendues en HTML, SSR léger des fiches créateur, robots/sitemaps.
- **Tableau de bord analytique** `/stats` + rapports PDF aux couleurs Groupe KA (catalogue + ReportBuilder).
- **API publique** — `GET /api/creators` (filtres q/niche/region/langue/plateforme/tier), `/api/creators/{id}`, `/api/stats`, `/api/taxonomies`, `/api/sources`, `POST /api/optout`, `/healthz`.
- **Connexion « Se connecter avec KA ID »** (SSO du hub groupe-ka.com) + favoris unifiés « Mon univers Ka ».
- **Widget KA Agent** — bulle de chat IA du Groupe KA câblée sur le site (v3 : bulle déplaçable, position mémorisée) + recommandations KA ID (modèle ALS collaboratif, v2.2).
- **Couverture cumulative** — un watch quotidien relance découverte + enrichissement : nouveaux créateurs, métriques rafraîchies, comptes croisés révélés via les liens de bio et les pages link-in-bio.
- **Score de confiance** sur chaque rattachement de compte — sous 0.50 → « à vérifier », jamais publié ; fusion des doublons uniquement sur compte fort partagé, **jamais sur le nom** (homonymes).
- **Opt-out immédiat et persistant** (`/retrait`) : fiche masquée sur-le-champ, liste de suppression `data/optout.json`, jamais ré-agrégée.
## API (endpoints principaux)
Servis par `creaka/web.py` (FastAPI) sur le port 8160.
| Méthode | Endpoint | Rôle |
|---|---|---|
| `GET` | `/api/creators` | annuaire filtrable (q, niche, region, langue, plateforme, tier) |
| `GET` | `/api/creators/{cid}` | fiche canonique d'un créateur (comptes, métriques, scores) |
| `GET` | `/api/taxonomies` | niches, régions, plateformes, tiers d'audience, langues |
| `GET` | `/api/sources` | registre des connecteurs : famille, mode d'accès, signal d'identité, cadence, dernière synchro |
| `GET` | `/api/stats` | statistiques agrégées (créateurs, comptes, par plateforme/tier/niche/région, dernier sync) — alimente les pastilles dynamiques ci-dessus |
| `GET` | `/api/stats/dashboard` · `/report` · `/catalog` | tableau de bord + rapports PDF (catalogue) |
| `POST` | `/api/stats/report/custom` | rapport PDF personnalisé (ReportBuilder) |
| `POST` | `/api/optout` | retrait immédiat et persistant d'un créateur |
| `GET` / `POST` | `/api/favorites` · `/api/favorites/toggle` | favoris « Mon univers Ka » (session KA ID) |
| `GET` | `/healthz` · `/api/health` | santé du service |
| `GET` | `/doc/` | guide d'utilisation en ligne |
## Connecteurs
**22 connecteurs** auto-découverts (`creaka/connectors/`), relancés par le watch quotidien (cycle de 24 h). Le registre live `GET /api/sources` documente pour chaque source : famille, palier d'accès, mode d'accès, signal d'identité et cadence (mensuelle pour les datasets compilés, hebdomadaire pour les bases publiques, quotidienne pour la découverte plateformes — la couverture s'accumule à chaque passage).
| Famille | Connecteurs | Rôle |
|---|---|---|
| Découverte — listes & bases publiques | `listes_medias`, `wikidata_qc`, `wikipedia_qc`, `onlyqueb`, `region_bio`, `tavily_seed`, `snowball` | amorcer et étendre l'annuaire (listes médias, Wikidata/Wikipédia QC, villes déclarées en bio, moisson web Tavily, boule de neige sur les profils reliés Instagram) |
| Découverte — plateformes | `youtube_recherche`, `twitch_decouverte`, `kick_decouverte` | trouver de nouveaux créateurs québécois directement sur les plateformes (Twitch GQL public, Kick via Scrapfly) |
| Découverte — balados | `balados_itunes`, `balados_rss`, `podcastindex`, `palmares_apple` | baladodiffusion (iTunes, flux RSS, Podcast Index, palmarès Apple) |
| Enrichissement — profils | `instagram`, `tiktok`, `youtube`, `twitch`, `x_profil`, `apify_social` | métriques et bios des comptes (API officielles, Scrapfly, acteurs Apify) |
| Enrichissement — liens | `bio_liens`, `linkinbio` | comptes croisés révélés via les liens de bio et les pages link-in-bio |
La couche réseau des connecteurs (`_resilient.py`) enchaîne **Oxylabs → Scrapfly → Bright Data** en cas de blocage anti-bot. L'enrichissement profond multi-plateforme passe par **13 acteurs Apify maison** (`actors/ka-*` : instagram, tiktok, youtube, x, facebook, threads, twitch, kick, patreon, fansly, discord, onlyfans, snapchat), avec retries durcis, rotation d'IP et snapshots quotidiens d'audience.
## Architecture
Pipeline (calqué sur Lou·Ka) : **découverte → extraction → résolution d'identité → normalisation → déduplication → SQLite → API/UI**.
- **Backend Python 3.14 / FastAPI** (`creaka/web.py`) : API + service du frontend statique.
- **SQLite (mode WAL)** (`creaka/db.py`) : fiches canoniques, index des comptes, journal des syncs.
- **Résolution d'identité** (`creaka/identity.py`) : signaux pondérés (`profil_source` 0.98 · `link_in_bio` 0.95 · `cross_link` 0.90 · listes/bases publiques 0.85 · `handle_match` 0.75).
- **Éthique** (`creaka/ethics.py`) : purge des données privées, opt-out, régime restreint des mineurs.
- **Frontend SPA zéro build** — template HTML généré par `scripts/build_frontend.py` (icônes SVG injectées), design ka-ui « éditorial sharp », footer commun (`ecosystem.json`) ; **`frontend/dist/` est tracké dans ce repo** (y compris le guide `/doc`).
- **51 tests pytest** (identité, homonymes, éthique, périmètre QC, link-in-bio, normalisation…).
Processus PM2 sur le nœud :
| Processus | Rôle | Commande de démarrage réelle | Cadence |
|---|---|---|---|
| `crea-ka-web` | API FastAPI + frontend sur le port **8160** | `.venv/bin/python run.py serve 8160` | continu |
| `crea-ka-sync` | watch de synchronisation : découverte + enrichissement | `.venv/bin/python run.py watch 24` | cycle de 24 h |
| `crea-ka-ngrok` | tunnel vers **www.crea-ka.com** | `ngrok http --url=www.crea-ka.com 8160` | continu |
## Démarrage rapide
```bash
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
cp .env.example .env # remplir les clés (voir section suivante)
.venv/bin/python -m pytest tests/ -q # 51 tests
python3 run.py sync # découverte + enrichissement (toutes sources)
python3 run.py sync youtube instagram # …ou seulement certaines sources
python3 run.py watch 24 # sync en boucle (cycle de 24 h)
python3 run.py serve 8160 # API + frontend → http://localhost:8160
python3 scripts/build_frontend.py # regénère frontend/dist
python3 run.py optout "instagram:handle" # retrait manuel immédiat
```
## Variables d'environnement
Gabarit dans `.env.example` (copier vers `.env` — jamais commité, aucun secret dans le repo). Noms seulement :
| Variable | Rôle |
|---|---|
| `SCRAPFLY_KEY` | profils Instagram/TikTok (palier 4, à minimiser) |
| `FIRECRAWL_API_KEY` | repli pages link-in-bio / listes publiques |
| `YOUTUBE_API_KEY` | API officielle YouTube (privilégiée) |
| `TWITCH_CLIENT_ID` · `TWITCH_CLIENT_SECRET` | API officielle Twitch |
| `PODCASTINDEX_API_KEY` · `PODCASTINDEX_API_SECRET` | enrichissement balados (gratuit ; sans clés, le connecteur est sauté proprement) |
| `APIFY_TOKEN` | acteurs Apify maison (enrichissement 13 plateformes) |
| `APIFY_FORCE` · `APIFY_MAX_SHARDS` · `APIFY_SHARD_SIZE` · `APIFY_REVISIT_DAYS` · `APIFY_RUN_CONCURRENCY` · `APIFY_RUN_MEMORY_MB` | réglages fins des passes Apify (couverture forcée, sharding, fraîcheur, concurrence, mémoire) |
| `KA_HUB_URL` · `KA_SSO_SECRET` · `SESSION_SECRET` | SSO KA ID (hub groupe-ka.com) et sessions |
| `CREAKA_BASE_URL` | URL publique du site (SEO/liens absolus) |
## Données & conformité
- **Provenance** : uniquement des **profils publics et professionnels** — listes et palmarès médias publics, Wikidata/Wikipédia, annuaires publics, recherche publique des plateformes, API officielles (YouTube, Twitch, Podcast Index) et pages de profil publiques. Le registre `GET /api/sources` documente chaque source (mode d'accès, signal d'identité, cadence).
- **Cadence de resync** : le processus `crea-ka-sync` relance découverte + enrichissement en **cycle de 24 h** (`run.py watch 24`) ; dernier sync exposé dans `/api/stats.last_sync`.
- **Éthique & Loi 25** : purge des données privées (`creaka/ethics.py`), **régime restreint des mineurs**, opt-out immédiat et persistant via `/retrait` ou `POST /api/optout` (liste `data/optout.json`, jamais ré-agrégée).
- **Qualité d'identité** : score de confiance par rattachement ; sous 0.50 le compte n'est **jamais publié** ; fusion des doublons uniquement sur compte fort partagé, jamais sur le nom (homonymes).
- **Périmètre québécois** : marqueurs QC obligatoires à la découverte ; purge des fiches hors-Québec (4 605 fiches retirées le 2026-08-20).
## Structure du repo
```
crea-ka/
├── run.py # CLI : sync · watch · serve · optout
├── creaka/ # cœur Python : schema, identity, dedup, ethics, db, web, auth, stats, kaid, kapdf, seo, hubfav + connectors/ (22)
├── frontend/ # src/ (template) → dist/ (généré par build_frontend.py, tracké — incl. doc/)
├── scripts/ # build_frontend.py · deploy-m3u96b.sh · gen_connector_docs.py · screenshots.sh
├── tests/ # 51 tests pytest
├── data/ # SQLite, optout.json, sources.json, datasets locaux (gitignorés au besoin)
├── actors/ # 13 acteurs Apify maison (ka-instagram, ka-tiktok, ka-youtube, ka-x, …)
└── docs/ # screenshots/ (visite guidée 01→10 + mobile/desktop webp) · archive/ · connecteurs/
```
## Documentation
- **Guide en ligne** : [www.crea-ka.com/doc/](https://www.crea-ka.com/doc/) — à quoi sert le site, le parcours en 4 étapes (annuaire → plateformes → fiche créateur → /stats), d'où viennent les données, FAQ.
- **Guide PDF** : [crea-ka-documentation.pdf](https://www.crea-ka.com/doc/crea-ka-documentation.pdf) — la même documentation, téléchargeable.
- Les captures du guide sont versionnées dans `frontend/dist/doc/img/` (etape1 → etape4) ; celles de la visite guidée ci-dessus dans `docs/screenshots/`.
## Historique
Jalons tirés du `git log` :
- **2026-08-17** — commit initial : pipeline, premiers connecteurs, design ka-ui « éditorial sharp », SSO KA ID, tableau de bord `/stats`, widget KA Agent.
- **2026-08-18** — vagues 2 à 4 d'expansion : balados (RSS, Podcast Index), Twitch GQL et InnerTube sans clé, `twitch/kick-decouverte` (Scrapfly), 1 361 requêtes YouTube, enrichisseur `region_bio` ; 12 connecteurs Apify maison + couverture 13 plateformes.
- **2026-08-19** — campagne mobile (socle tokens.css, champs ≥16 px), KA Agent v2 plein écran, `/stats` v2 + 5 rapports PDF.
- **2026-08-20** — seeds vague 3 (+392 créateurs QC) et périmètre QC durci : purge de 4 605 fiches hors-Québec ; « fiches légendaires » (bannières, Ka Score /100, sparklines, snapshots quotidiens d'audience).
- **2026-08-21/22** — acteurs Apify durcis (retries, rotation d'IP, concurrence par acteur), chaîne anti-bot résiliente Oxylabs → Scrapfly → Bright Data, SEO SSR des fiches + robots/sitemaps, standard header KA.
- **2026-08-23/24** — pages SEO programmatiques `/plateformes`, rapports PDF personnalisés (ReportBuilder), favoris unifiés « Mon univers Ka », page documentation `/doc` + guide PDF, README v3.
- **2026-08-26/28** — KA ID v2 → v2.2 (`kaid.py`) : recommandations personnalisées par filtrage collaboratif (similarité utilisateurs, modèle ALS, langue transversale, pilules « Sauvegarder cette recherche »/« Pas pour moi » dans le SDK) ; README v4 + visite guidée en 10 captures (`docs/screenshots/`).
## Développement (remote-first)
**La source de vérité est le repo git sur le nœud M3U96b** (`~/apps/crea-ka`) — on n'édite jamais les copies laptop. Toute modification se fait sur le nœud via SSH : édition, tests, `pm2 restart`, puis commit/push depuis le nœud.
- Remote `origin` = **spbgit** (git perso [git.spboucher.ai](https://git.spboucher.ai), bare repos sur M3U96a). **Pas GitHub.**
- L'agent forwarding SSH est actif : le `git push origin main` fonctionne pendant une session SSH depuis le laptop.
```bash
pm2 restart crea-ka-web # après un changement en production
```
## Déploiement
- **Nœud** : M3U96b (Mac Studio, cluster MacLustr) — répertoire `~/apps/crea-ka`
- **Port** : **8160** (local, exposé uniquement via le tunnel)
- **Processus PM2** : `crea-ka-web` (serveur) + `crea-ka-sync` (synchro) + `crea-ka-ngrok` (tunnel)
- **Domaine** : **https://www.crea-ka.com** (tunnel ngrok)
## Écosystème Groupe KA
| Plateforme | Vocation |
|---|---|
| [groupe-ka.com](https://www.groupe-ka.com) | portail du groupe et compte unique KA ID |
| [lou-ka.com](https://www.lou-ka.com) | logements à louer |
| [immo-ka.com](https://www.immo-ka.com) | propriétés à vendre |
| [vrai-prix.com](https://www.vrai-prix.com) | estimation immobilière |
| [auto-ka.com](https://www.auto-ka.com) | véhicules |
| [fabri-ka.com](https://www.fabri-ka.com) | produits québécois |
| [food-ka.com](https://www.food-ka.com) | épicerie et alimentation |
| [resto-ka.com](https://www.resto-ka.com) | restaurants |
| [sorti-ka.com](https://www.sorti-ka.com) | sorties et événements |
| [job-ka.com](https://www.job-ka.com) | emplois |
| [crea-ka.com](https://www.crea-ka.com) | créateurs de contenu *(ce repo)* |
| [trouve-ka.com](https://www.trouve-ka.com) | petites annonces |
| [api-ka.com](https://www.api-ka.com) | API de données |
## Contact
**Simon-Pierre Boucher** — fondateur, Groupe KA
📧 [contact@spboucher.ai](mailto:contact@spboucher.ai)
---
© Groupe KA — Simon-Pierre Boucher · contact@spboucher.ai
Ce repo vit sur **spbgit** ([git.spboucher.ai](https://git.spboucher.ai)).