SPB Git

spb/crea-ka

Public

Créa·Ka — annuaire public cross-plateforme des créateurs de contenu québécois (crea-ka.com)

9.1 KB

# Créa·Ka

Tous les créateurs québécois. Tous leurs liens.

Aperçu de Crea-Ka

Créateurs Comptes reliés Site

python backend frontend tests connecteurs host

https://www.crea-ka.com


# 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)

text
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

text
GET  /api/creators?q&niche&region&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

text
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

bash
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
Accueil Créateur
Statistiques Mobile (tab bar Lou·Ka)
Stats Mobile

Un service Groupe Ka · KA ID · Lou-Ka · Immo-Ka · Auto-Ka · Food-Ka · Fabri-Ka

© Simon-Pierre Boucher — contact@spboucher.ai

Files · 7f300effbd7681f65682ba8164dcc2aad1724e1c
Menu

Theme