Créa·Ka — annuaire public cross-plateforme des créateurs de contenu québécois (crea-ka.com)
Python 73.6%
HTML 13.2%
TypeScript 6%
JavaScript 4.5%
CSS 1.7%
Dockerfile 0.6%
1<!-- Auteur : Simon-Pierre Boucher — contact@spboucher.ai -->23<p align="center">4 <a href="https://www.crea-ka.com"><img src="https://www.crea-ka.com/og.png" width="760" alt="Créa·Ka — Les créateurs d'ici, tous leurs liens"></a>5</p>6<h1 align="center">Créa·Ka</h1>7<p align="center"><b>Les créateurs d'ici, tous leurs liens</b></p>89<div align="center">1011<a href="https://www.crea-ka.com"><img src="https://img.shields.io/website?url=https%3A%2F%2Fwww.crea-ka.com&style=flat-square&label=www.crea-ka.com&up_color=7048e8&up_message=en%20ligne" alt="Site"></a>12<a href="https://www.crea-ka.com/doc/"><img src="https://img.shields.io/badge/📖_documentation-%2Fdoc-7048e8?style=flat-square" alt="Documentation"></a>13<a href="https://www.crea-ka.com/doc/crea-ka-documentation.pdf"><img src="https://img.shields.io/badge/guide-PDF-7048e8?style=flat-square" alt="PDF"></a>14<img src="https://img.shields.io/badge/n%C5%93ud-M3U96b-1f6feb?style=flat-square" alt="Nœud">15<img src="https://img.shields.io/badge/port-8160-141814?style=flat-square" alt="Port">16<img src="https://img.shields.io/badge/PM2-3_processus-2b037a?style=flat-square" alt="PM2">1718</div>1920<div align="center">2122<img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fwww.crea-ka.com%2Fapi%2Fstats&query=%24.creators&label=cr%C3%A9ateurs&color=7048e8&style=flat-square" alt="Créateurs (live)">23<img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fwww.crea-ka.com%2Fapi%2Fstats&query=%24.accounts&label=comptes%20reli%C3%A9s&color=7048e8&style=flat-square" alt="Comptes reliés (live)">24<img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fwww.crea-ka.com%2Fapi%2Fstats&query=%24.by_platform.youtube&label=YouTube&color=7048e8&style=flat-square&logo=youtube&logoColor=white" alt="YouTube (live)">25<img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fwww.crea-ka.com%2Fapi%2Fstats&query=%24.by_platform.instagram&label=Instagram&color=7048e8&style=flat-square&logo=instagram&logoColor=white" alt="Instagram (live)">26<img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fwww.crea-ka.com%2Fapi%2Fstats&query=%24.by_platform.tiktok&label=TikTok&color=7048e8&style=flat-square&logo=tiktok&logoColor=white" alt="TikTok (live)">27<img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fwww.crea-ka.com%2Fapi%2Fstats&query=%24.by_platform.twitch&label=Twitch&color=7048e8&style=flat-square&logo=twitch&logoColor=white" alt="Twitch (live)">28<img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fwww.crea-ka.com%2Fapi%2Fstats&query=%24.by_platform.podcast&label=balados&color=7048e8&style=flat-square" alt="Balados (live)">2930</div>3132<div align="center">3334<img src="https://img.shields.io/badge/Python-3.14-3776AB?style=flat-square&logo=python&logoColor=white" alt="Python">35<img src="https://img.shields.io/badge/FastAPI-API-009688?style=flat-square&logo=fastapi&logoColor=white" alt="FastAPI">36<img src="https://img.shields.io/badge/SQLite-WAL-003B57?style=flat-square&logo=sqlite&logoColor=white" alt="SQLite">37<img src="https://img.shields.io/badge/SPA-z%C3%A9ro_build-c9a3ff?style=flat-square" alt="Frontend">38<img src="https://img.shields.io/badge/pytest-51_tests-0A9EDC?style=flat-square&logo=pytest&logoColor=white" alt="pytest">39<img src="https://img.shields.io/badge/Apify-13_acteurs-97D700?style=flat-square" alt="Apify">40<img src="https://img.shields.io/badge/ngrok-tunnel-1F1E37?style=flat-square&logo=ngrok&logoColor=white" alt="ngrok">41<img src="https://img.shields.io/badge/Groupe-KA-7048e8?style=flat-square" alt="Groupe KA">42<img src="https://img.shields.io/badge/remote--first-spbgit-141814?style=flat-square&logo=git&logoColor=white" alt="remote-first spbgit">4344</div>4546> Les pastilles de la deuxième rangée sont **dynamiques** : elles interrogent en direct `GET /api/stats` du site via shields.io.4748**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**.4950Pour 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.5152## Visite guidée535455> ⚠️ **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.56*Captures du 2026-08-28 (desktop 1440×900) — chiffres live du jour : 12 014 créateurs · 19 333 comptes reliés · 19 plateformes.*5758### 1 · Accueil — l'annuaire5960<a href="https://www.crea-ka.com/"><img src="docs/screenshots/01-accueil.jpg" width="880" alt="Accueil Créa·Ka"></a>6162Le 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.6364### 2 · /plateformes — page SEO programmatique (rendu serveur)6566<a href="https://www.crea-ka.com/plateformes"><img src="docs/screenshots/02-plateformes.jpg" width="880" alt="Page plateformes (SSR)"></a>6768La 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é.6970### 3 · /stats — les créateurs québécois en chiffres7172<a href="https://www.crea-ka.com/stats"><img src="docs/screenshots/03-stats.jpg" width="880" alt="Tableau de bord statistiques"></a>7374Le 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).7576### 4 · /retrait — opt-out immédiat (Loi 25)7778<a href="https://www.crea-ka.com/retrait"><img src="docs/screenshots/04-retrait.jpg" width="880" alt="Formulaire de retrait"></a>7980« 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é).8182### 5 · /contact — nous joindre8384<a href="https://www.crea-ka.com/contact"><img src="docs/screenshots/05-contact.jpg" width="880" alt="Page contact"></a>8586Les 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.8788### 6 · /plateforme/youtube — annuaire préfiltré par plateforme8990<a href="https://www.crea-ka.com/plateforme/youtube"><img src="docs/screenshots/06-plateforme-youtube.jpg" width="880" alt="Annuaire filtré YouTube"></a>9192Chaque 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.9394### 7 · Fiche créateur — la fiche canonique9596<a href="https://www.crea-ka.com/createur/10-21-42km"><img src="docs/screenshots/07-createur-10-21-42km.jpg" width="880" alt="Fiche créateur"></a>9798La 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.99100### 8 · /favoris — « Mon univers Ka »101102<a href="https://www.crea-ka.com/favoris"><img src="docs/screenshots/08-favoris.jpg" width="880" alt="Page favoris"></a>103104Les 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`).105106### 9 · /compte — connexion KA ID (SSO)107108<a href="https://www.crea-ka.com/compte"><img src="docs/screenshots/09-compte.jpg" width="880" alt="Connexion KA ID"></a>109110« 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 ? ».111112### 10 · /doc — le guide en ligne113114<a href="https://www.crea-ka.com/doc/"><img src="docs/screenshots/10-doc.jpg" width="880" alt="Documentation en ligne"></a>115116« 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**.117118### Vue mobile119120*Captures mobiles 390×844 du 2026-08-25, conservées dans `docs/screenshots/mobile/` (et leurs pendants desktop `.webp` dans `docs/screenshots/desktop/`).*121122<table>123 <tr>124 <td align="center"><img src="docs/screenshots/mobile/home.webp" width="240" alt="Accueil mobile"><br><sub><b>Annuaire — cartes créateurs, tabbar basse</b></sub></td>125 <td align="center"><img src="docs/screenshots/mobile/createur.webp" width="240" alt="Fiche créateur mobile"><br><sub><b>Fiche créateur — métriques multi-plateformes</b></sub></td>126 <td align="center"><img src="docs/screenshots/mobile/stats.webp" width="240" alt="Stats mobile"><br><sub><b>Tableau de bord analytique</b></sub></td>127 </tr>128</table>129130> 🗄️ Les captures d'époque sont conservées dans [`docs/archive/`](docs/archive/).131132## Chiffres clés (live, au 2026-08-28)133134| Métrique | Valeur | Source |135|---|---|---|136| Créateurs publiés | **12 014** | `GET /api/stats` → `creators` |137| Comptes reliés | **19 333** | `GET /api/stats` → `accounts` |138| 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` |139| Créateurs multi-plateformes | **3 018** (+ 750 comptes vérifiés/badge) | `/stats` |140| Portée cumulée connue | **769,7 M** d'abonnés (1,61 compte relié/créateur en moy.) | `/stats` |141| Niches | **20** | `GET /api/taxonomies` |142| Régions administratives | **17** (16 représentées) | `GET /api/taxonomies` |143| Tiers d'audience | nano 10 883 · micro 822 · macro 245 · méga 64 | `by_tier` |144| Connecteurs | **22** (comptés dans `creaka/connectors/`) | code |145| Acteurs Apify maison | **13** (`actors/ka-*`) | code |146| Tests pytest | **51** | `pytest --collect-only` |147148## Fonctionnalités149150- **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).151- **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.152- **Pages SEO programmatiques** — `/plateformes` + `/plateforme/{p}` rendues en HTML, SSR léger des fiches créateur, robots/sitemaps.153- **Tableau de bord analytique** `/stats` + rapports PDF aux couleurs Groupe KA (catalogue + ReportBuilder).154- **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`.155- **Connexion « Se connecter avec KA ID »** (SSO du hub groupe-ka.com) + favoris unifiés « Mon univers Ka ».156- **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).157- **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.158- **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).159- **Opt-out immédiat et persistant** (`/retrait`) : fiche masquée sur-le-champ, liste de suppression `data/optout.json`, jamais ré-agrégée.160161## API (endpoints principaux)162163Servis par `creaka/web.py` (FastAPI) sur le port 8160.164165| Méthode | Endpoint | Rôle |166|---|---|---|167| `GET` | `/api/creators` | annuaire filtrable (q, niche, region, langue, plateforme, tier) |168| `GET` | `/api/creators/{cid}` | fiche canonique d'un créateur (comptes, métriques, scores) |169| `GET` | `/api/taxonomies` | niches, régions, plateformes, tiers d'audience, langues |170| `GET` | `/api/sources` | registre des connecteurs : famille, mode d'accès, signal d'identité, cadence, dernière synchro |171| `GET` | `/api/stats` | statistiques agrégées (créateurs, comptes, par plateforme/tier/niche/région, dernier sync) — alimente les pastilles dynamiques ci-dessus |172| `GET` | `/api/stats/dashboard` · `/report` · `/catalog` | tableau de bord + rapports PDF (catalogue) |173| `POST` | `/api/stats/report/custom` | rapport PDF personnalisé (ReportBuilder) |174| `POST` | `/api/optout` | retrait immédiat et persistant d'un créateur |175| `GET` / `POST` | `/api/favorites` · `/api/favorites/toggle` | favoris « Mon univers Ka » (session KA ID) |176| `GET` | `/healthz` · `/api/health` | santé du service |177| `GET` | `/doc/` | guide d'utilisation en ligne |178179## Connecteurs180181**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).182183| Famille | Connecteurs | Rôle |184|---|---|---|185| 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) |186| 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) |187| Découverte — balados | `balados_itunes`, `balados_rss`, `podcastindex`, `palmares_apple` | baladodiffusion (iTunes, flux RSS, Podcast Index, palmarès Apple) |188| Enrichissement — profils | `instagram`, `tiktok`, `youtube`, `twitch`, `x_profil`, `apify_social` | métriques et bios des comptes (API officielles, Scrapfly, acteurs Apify) |189| Enrichissement — liens | `bio_liens`, `linkinbio` | comptes croisés révélés via les liens de bio et les pages link-in-bio |190191La 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.192193## Architecture194195Pipeline (calqué sur Lou·Ka) : **découverte → extraction → résolution d'identité → normalisation → déduplication → SQLite → API/UI**.196197- **Backend Python 3.14 / FastAPI** (`creaka/web.py`) : API + service du frontend statique.198- **SQLite (mode WAL)** (`creaka/db.py`) : fiches canoniques, index des comptes, journal des syncs.199- **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).200- **Éthique** (`creaka/ethics.py`) : purge des données privées, opt-out, régime restreint des mineurs.201- **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`).202- **51 tests pytest** (identité, homonymes, éthique, périmètre QC, link-in-bio, normalisation…).203204Processus PM2 sur le nœud :205206| Processus | Rôle | Commande de démarrage réelle | Cadence |207|---|---|---|---|208| `crea-ka-web` | API FastAPI + frontend sur le port **8160** | `.venv/bin/python run.py serve 8160` | continu |209| `crea-ka-sync` | watch de synchronisation : découverte + enrichissement | `.venv/bin/python run.py watch 24` | cycle de 24 h |210| `crea-ka-ngrok` | tunnel vers **www.crea-ka.com** | `ngrok http --url=www.crea-ka.com 8160` | continu |211212## Démarrage rapide213214```bash215python3 -m venv .venv && .venv/bin/pip install -r requirements.txt216cp .env.example .env # remplir les clés (voir section suivante)217.venv/bin/python -m pytest tests/ -q # 51 tests218python3 run.py sync # découverte + enrichissement (toutes sources)219python3 run.py sync youtube instagram # …ou seulement certaines sources220python3 run.py watch 24 # sync en boucle (cycle de 24 h)221python3 run.py serve 8160 # API + frontend → http://localhost:8160222python3 scripts/build_frontend.py # regénère frontend/dist223python3 run.py optout "instagram:handle" # retrait manuel immédiat224```225226## Variables d'environnement227228Gabarit dans `.env.example` (copier vers `.env` — jamais commité, aucun secret dans le repo). Noms seulement :229230| Variable | Rôle |231|---|---|232| `SCRAPFLY_KEY` | profils Instagram/TikTok (palier 4, à minimiser) |233| `FIRECRAWL_API_KEY` | repli pages link-in-bio / listes publiques |234| `YOUTUBE_API_KEY` | API officielle YouTube (privilégiée) |235| `TWITCH_CLIENT_ID` · `TWITCH_CLIENT_SECRET` | API officielle Twitch |236| `PODCASTINDEX_API_KEY` · `PODCASTINDEX_API_SECRET` | enrichissement balados (gratuit ; sans clés, le connecteur est sauté proprement) |237| `APIFY_TOKEN` | acteurs Apify maison (enrichissement 13 plateformes) |238| `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) |239| `KA_HUB_URL` · `KA_SSO_SECRET` · `SESSION_SECRET` | SSO KA ID (hub groupe-ka.com) et sessions |240| `CREAKA_BASE_URL` | URL publique du site (SEO/liens absolus) |241242## Données & conformité243244- **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).245- **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`.246- **É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).247- **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).248- **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).249250## Structure du repo251252```253crea-ka/254├── run.py # CLI : sync · watch · serve · optout255├── creaka/ # cœur Python : schema, identity, dedup, ethics, db, web, auth, stats, kaid, kapdf, seo, hubfav + connectors/ (22)256├── frontend/ # src/ (template) → dist/ (généré par build_frontend.py, tracké — incl. doc/)257├── scripts/ # build_frontend.py · deploy-m3u96b.sh · gen_connector_docs.py · screenshots.sh258├── tests/ # 51 tests pytest259├── data/ # SQLite, optout.json, sources.json, datasets locaux (gitignorés au besoin)260├── actors/ # 13 acteurs Apify maison (ka-instagram, ka-tiktok, ka-youtube, ka-x, …)261└── docs/ # screenshots/ (visite guidée 01→10 + mobile/desktop webp) · archive/ · connecteurs/262```263264## Documentation265266- **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.267- **Guide PDF** : [crea-ka-documentation.pdf](https://www.crea-ka.com/doc/crea-ka-documentation.pdf) — la même documentation, téléchargeable.268- 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/`.269270## Historique271272Jalons tirés du `git log` :273274- **2026-08-17** — commit initial : pipeline, premiers connecteurs, design ka-ui « éditorial sharp », SSO KA ID, tableau de bord `/stats`, widget KA Agent.275- **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.276- **2026-08-19** — campagne mobile (socle tokens.css, champs ≥16 px), KA Agent v2 plein écran, `/stats` v2 + 5 rapports PDF.277- **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).278- **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.279- **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.280- **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/`).281282## Développement (remote-first)283284**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.285286- Remote `origin` = **spbgit** (git perso [git.spboucher.ai](https://git.spboucher.ai), bare repos sur M3U96a). **Pas GitHub.**287- L'agent forwarding SSH est actif : le `git push origin main` fonctionne pendant une session SSH depuis le laptop.288289```bash290pm2 restart crea-ka-web # après un changement en production291```292293## Déploiement294295- **Nœud** : M3U96b (Mac Studio, cluster MacLustr) — répertoire `~/apps/crea-ka`296- **Port** : **8160** (local, exposé uniquement via le tunnel)297- **Processus PM2** : `crea-ka-web` (serveur) + `crea-ka-sync` (synchro) + `crea-ka-ngrok` (tunnel)298- **Domaine** : **https://www.crea-ka.com** (tunnel ngrok)299300## Écosystème Groupe KA301302| Plateforme | Vocation |303|---|---|304| [groupe-ka.com](https://www.groupe-ka.com) | portail du groupe et compte unique KA ID |305| [lou-ka.com](https://www.lou-ka.com) | logements à louer |306| [immo-ka.com](https://www.immo-ka.com) | propriétés à vendre |307| [vrai-prix.com](https://www.vrai-prix.com) | estimation immobilière |308| [auto-ka.com](https://www.auto-ka.com) | véhicules |309| [fabri-ka.com](https://www.fabri-ka.com) | produits québécois |310| [food-ka.com](https://www.food-ka.com) | épicerie et alimentation |311| [resto-ka.com](https://www.resto-ka.com) | restaurants |312| [sorti-ka.com](https://www.sorti-ka.com) | sorties et événements |313| [job-ka.com](https://www.job-ka.com) | emplois |314| [crea-ka.com](https://www.crea-ka.com) | créateurs de contenu *(ce repo)* |315| [trouve-ka.com](https://www.trouve-ka.com) | petites annonces |316| [api-ka.com](https://www.api-ka.com) | API de données |317318## Contact319320**Simon-Pierre Boucher** — fondateur, Groupe KA321📧 [contact@spboucher.ai](mailto:contact@spboucher.ai)322323---324325© Groupe KA — Simon-Pierre Boucher · contact@spboucher.ai326Ce repo vit sur **spbgit** ([git.spboucher.ai](https://git.spboucher.ai)).327