# Créa·Ka **Tous les créateurs québécois. Tous leurs liens.** [![Créateurs](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=5b34a8&style=for-the-badge)](https://www.crea-ka.com) [![Comptes reliés](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=c9a3ff&style=for-the-badge)](https://www.crea-ka.com/stats) [![Site](https://img.shields.io/website?url=https%3A%2F%2Fwww.crea-ka.com%2Fhealthz&label=crea-ka.com&style=for-the-badge)](https://www.crea-ka.com) [![python](https://img.shields.io/badge/python-3.14-3776ab)](https://www.python.org) [![backend](https://img.shields.io/badge/backend-FastAPI%20%2B%20SQLite%20WAL-141814)](creaka/web.py) [![frontend](https://img.shields.io/badge/frontend-SPA%20z%C3%A9ro%20build-c9a3ff)](frontend/src/index.template.html) [![tests](https://img.shields.io/badge/tests-25%20pass-1c5c41)](tests/) [![connecteurs](https://img.shields.io/badge/connecteurs-10-e8a33d)](creaka/connectors/) [![host](https://img.shields.io/badge/host-M3U96b%20%C2%B7%20PM2%20%C2%B7%20ngrok-4f8cff)](https://www.crea-ka.com) Annuaire public, québécois, exhaustif et **cross-plateforme** des créateurs de contenu — un croisement entre un annuaire cherchable et un « Linktree collectif », membre de la famille **Groupe KA**. **https://www.crea-ka.com**
--- ## Captures | Accueil (annuaire) | Page créateur | |---|---| | ![Accueil](docs/screenshots/accueil.png) | ![Créateur](docs/screenshots/createur.png) | | Statistiques | Mobile (tab bar Lou·Ka) | |---|---| | ![Stats](docs/screenshots/stats.png) | ![Mobile](docs/screenshots/mobile.png) | ## Ce que fait Créa·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**. L'annuaire se filtre par **niche** (20), **région** (17 régions administratives), **langue**, **plateforme** et **taille d'audience** (nano/micro/macro/méga). Chaque créateur a sa page dédiée `/createur/{id}`. ## 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/web.py` | API FastAPI + frontend statique | ### Connecteurs (registre auto-découvrant) | 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 | 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 | La couverture **s'accumule à chaque passage** (watch quotidien) : la découverte trouve de nouveaux créateurs, l'enrichissement rafraîchit les métriques et révèle les comptes croisés via les liens de bio et les pages link-in-bio. ## 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 ``` ## Éthique — prime sur tout (CLAUDE.md §15) - **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`. ## Développement ```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 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 Node **M3U96b** (`~/apps/crea-ka`) : PM2 `crea-ka-web` (:8160) + `crea-ka-sync` (watch 24 h) + `crea-ka-ngrok` (**www.crea-ka.com**). Redéploiement : `scripts/deploy-m3u96b.sh` · captures : `scripts/screenshots.sh`. ---
**Groupe KA** · [KA ID](https://www.groupe-ka.com) · [Lou-Ka](https://www.lou-ka.com) · [Immo-Ka](https://www.immo-ka.com) · [Auto-Ka](https://www.auto-ka.com) · [Food-Ka](https://www.food-ka.com) · [Fabri-Ka](https://www.fabri-ka.com) © Simon-Pierre Boucher —