# Description
Créa·Ka est l'annuaire public, québécois et cross-plateforme des créateurs de contenu — un croisement entre un annuaire cherchable et un « Linktree collectif », membre de la famille Groupe Ka.
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.
# Fonctionnalités
- Annuaire filtrable par niche (20), région (17 régions administratives), langue, 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.
- Tableau de bord analytique
/stats + rapport PDF aux couleurs Groupe-KA.
- Connexion « Se connecter avec KA ID » via le hub groupe-ka.com (SSO de l'écosystème).
- Widget KA Agent (bulle de chat IA Groupe KA) câblé sur le site.
- 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.
- Opt-out immédiat et persistant (
/retrait) et éthique stricte (voir plus bas).
# Architecture (calquée sur Lou·Ka)
DÉCOUVERTE → EXTRACTION → RÉSOLUTION D'IDENTITÉ → NORMALISATION → DÉDUP. → SQLite → API/UI
| Module |
Rôle |
creaka/schema.py |
fiche Creator + PlatformAccount, validation stricte (compte sans url/confidence = rejeté) |
creaka/identity.py |
signaux de rattachement §12.1 : profil_source 0.98 · link_in_bio 0.95 · cross_link 0.90 · listes_medias/base_publique 0.85 · handle_match 0.75 |
creaka/dedup.py |
fusion uniquement sur compte fort partagé — jamais sur le nom (homonymes) |
creaka/ethics.py |
purge des données privées, opt-out persistant, régime restreint des mineurs |
creaka/db.py |
SQLite WAL : fiches canoniques + index des comptes + journal des syncs |
creaka/auth.py |
connexion KA ID (hub groupe-ka.com) |
creaka/stats.py + creaka/kapdf.py |
statistiques /stats + rapport PDF |
creaka/web.py |
API FastAPI + frontend statique |
# Connecteurs (registre auto-découvrant — creaka/connectors/)
| Connecteur |
Famille |
Accès |
Signal |
listes-medias |
découverte |
dataset local (palmarès médias publics croisés, 376 profils) |
0.85 |
wikidata-qc |
découverte |
SPARQL Wikidata (nés/résidant au QC, handles curés) |
0.85 |
onlyqueb |
découverte |
sitemap + JSON-LD (annuaire public, liens auto-déclarés) |
0.90 |
youtube-recherche |
découverte |
recherche publique YouTube, ~120 requêtes × marqueur QC obligatoire, pagination par continuations |
0.98 |
balados-itunes |
découverte |
API officielle iTunes/Apple Podcasts |
0.98 |
instagram-profil |
enrichissement |
Scrapfly (profil public : abonnés, bio, liens de bio → cross-link) |
— |
tiktok-profil |
enrichissement |
Scrapfly (JSON d'hydratation public) |
— |
youtube |
enrichissement |
API officielle v3 si clé, sinon page publique |
— |
twitch |
enrichissement |
API officielle Helix (sauté sans clés) |
— |
link-in-bio |
enrichissement |
Linktree/Beacons/Bio.link… — le levier nº 1 : une page → tous les comptes |
0.95 |
# Stack
- Python 3.14 · FastAPI · SQLite (mode WAL)
- Frontend SPA zéro build (template HTML +
scripts/build_frontend.py, icônes SVG injectées)
- Design ka-ui « éditorial sharp » Groupe KA — accent violet, footer commun (
ecosystem.json, 13 sites), page /contact
- 25 tests pytest (identité, homonymes, éthique…)
- Hébergé sous PM2 + tunnel ngrok
# API publique
GET /api/creators?q&niche®ion&langue&plateforme&tier&sort&limit&offset
GET /api/creators/{id} GET /api/stats GET /api/taxonomies
GET /api/sources POST /api/optout GET /healthz
# Structure du projet
crea-ka/
├── creaka/ # cœur Python : schema, identity, dedup, ethics, db, web, auth, stats
│ └── connectors/ # 10 connecteurs (découverte + enrichissement)
├── frontend/ # src/ (template) → dist/ (généré)
├── scripts/ # build_frontend.py · deploy-m3u96b.sh · screenshots.sh
├── tests/ # 25 tests pytest
├── data/ # SQLite, optout.json, datasets locaux
├── docs/ # screenshot.png + captures
└── run.py # CLI : sync · serve · optout
# Démarrage local
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt
cp .env.example .env # SCRAPFLY_KEY, YOUTUBE_API_KEY…
python3 -m pytest tests/ -q # 25 tests (identité, homonymes, éthique…)
python3 run.py sync # découverte + enrichissement
python3 run.py serve 8160 # API + frontend → http://localhost:8160
python3 scripts/build_frontend.py # regénère frontend/dist (icônes SVG injectées)
python3 run.py optout "instagram:handle" # retrait manuel
# Déploiement
- Nœud : M3U96b (
~/apps/crea-ka)
- Port : 8160
- Domaine : www.crea-ka.com (tunnel ngrok)
- PM2 (3 process) :
crea-ka-web — API FastAPI + frontend sur :8160
crea-ka-sync — watch de synchronisation (24 h) : découverte + enrichissement
crea-ka-ngrok — tunnel vers www.crea-ka.com
- Redéploiement :
scripts/deploy-m3u96b.sh · captures : scripts/screenshots.sh
# Développement remote-first (IMPORTANT)
La source de vérité est le repo git sur le nœud M3U96b (~/apps/crea-ka), pas une copie laptop. Toute modification se fait sur le nœud via SSH (édition, tests, pm2 restart), puis commit/push depuis le nœud.
origin = spbgit (git perso git.spboucher.ai — bare repo ~/srv/git/crea-ka.git sur M3U96a, alias SSH gitsrv). Pas GitHub.
- L'agent forwarding SSH est actif : le
git push origin main fonctionne pendant une session SSH depuis le laptop.
# Éthique — prime sur tout
- Profils publics et professionnels seulement ;
ethics.scrub() purge téléphones, adresses civiques et courriels personnels avant tout stockage.
- Opt-out immédiat et persistant (
/retrait) : fiche masquée sur-le-champ, liste de suppression data/optout.json, jamais ré-agrégée.
- Mineurs : régime restreint automatique (année de naissance Wikidata) et exclusion de l'annuaire public.
- Score de confiance sur chaque rattachement ; sous 0.50 → « à vérifier », jamais publié. Mieux vaut un lien de moins qu'un lien erroné.
- Loi 25 : finalités documentées, accès/rectification/retrait via
/retrait.
# Captures supplémentaires
| Accueil (annuaire) |
Page créateur |
 |
 |
| Statistiques |
Mobile (tab bar Lou·Ka) |
 |
 |