Créa·Ka — Les créateurs d'ici, tous leurs liens

Créa·Ka

Les créateurs d'ici, tous leurs liens

Site Documentation PDF Nœud Port PM2
Créateurs (live) Comptes reliés (live) YouTube (live) Instagram (live) TikTok (live) Twitch (live) Balados (live)
Python FastAPI SQLite Frontend pytest Apify ngrok Groupe KA remote-first spbgit
> 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 Accueil Créa·Ka 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) Page plateformes (SSR) 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 Tableau de bord statistiques 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) Formulaire de retrait « 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 Page contact 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 Annuaire filtré YouTube 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 Fiche créateur 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 » Page favoris 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) Connexion KA ID « 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 Documentation 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/`).*
Accueil mobile
Annuaire — cartes créateurs, tabbar basse
Fiche créateur mobile
Fiche créateur — métriques multi-plateformes
Stats mobile
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)).