docs: README v3 — chiffres live vérifiés, pastilles dynamiques, sections complètes
1 changed file +131 −51
modified
README.md
+131 −51
@@ -6,23 +6,46 @@ | ||
| 6 | 6 | <h1 align="center">Créa·Ka</h1> |
| 7 | 7 | <p align="center"><b>Les créateurs d'ici, tous leurs liens</b></p> |
| 8 | 8 | |
| 9 | −<p align="center"> | |
| 10 | − <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> | |
| 11 | − <a href="https://www.crea-ka.com/doc/"><img src="https://img.shields.io/badge/📖_documentation-%2Fdoc-7048e8?style=flat-square" alt="Documentation"></a> | |
| 12 | − <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> | |
| 13 | − <img src="https://img.shields.io/badge/n%C5%93ud-M3U96b-1f6feb?style=flat-square" alt="Nœud"> | |
| 14 | − <img src="https://img.shields.io/badge/port-8160-141814?style=flat-square" alt="Port"> | |
| 15 | − <img src="https://img.shields.io/badge/process-PM2-2b037a?style=flat-square" alt="PM2"> | |
| 16 | −</p> | |
| 17 | −<p align="center"> | |
| 18 | − <img src="https://img.shields.io/badge/Python-3.14-3776AB?style=flat-square&logo=python&logoColor=white" alt="Python"> | |
| 19 | − <img src="https://img.shields.io/badge/FastAPI-API-009688?style=flat-square&logo=fastapi&logoColor=white" alt="FastAPI"> | |
| 20 | − <img src="https://img.shields.io/badge/SQLite-WAL-003B57?style=flat-square&logo=sqlite&logoColor=white" alt="SQLite"> | |
| 21 | − <img src="https://img.shields.io/badge/SPA-z%C3%A9ro_build-c9a3ff?style=flat-square" alt="Frontend"> | |
| 22 | − <img src="https://img.shields.io/badge/Groupe-KA-7048e8?style=flat-square" alt="Groupe KA"> | |
| 23 | −</p> | |
| 9 | +<div align="center"> | |
| 10 | + | |
| 11 | +<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"> | |
| 17 | + | |
| 18 | +</div> | |
| 19 | + | |
| 20 | +<div align="center"> | |
| 21 | + | |
| 22 | +<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)"> | |
| 29 | + | |
| 30 | +</div> | |
| 24 | 31 | |
| 25 | −**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 ». 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**. | |
| 32 | +<div align="center"> | |
| 33 | + | |
| 34 | +<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"> | |
| 43 | + | |
| 44 | +</div> | |
| 45 | + | |
| 46 | +> Les pastilles de la deuxième rangée sont **dynamiques** : elles interrogent en direct `GET /api/stats` du site via shields.io. | |
| 47 | + | |
| 48 | +**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 791 créateurs** et **18 942 comptes reliés** sur **19 plateformes** (au 2026-08-24). 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**. | |
| 26 | 49 | |
| 27 | 50 | 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. |
| 28 | 51 | |
@@ -51,15 +74,29 @@ Pour qui ? Le public qui découvre des créateurs par niche, région, langue ou | ||
| 51 | 74 | </tr> |
| 52 | 75 | </table> |
| 53 | 76 | |
| 77 | +## Chiffres clés (live, au 2026-08-24) | |
| 78 | + | |
| 79 | +| Métrique | Valeur | Source | | |
| 80 | +|---|---|---| | |
| 81 | +| Créateurs publiés | **12 791** | `GET /api/stats` → `creators` | | |
| 82 | +| Comptes reliés | **18 942** | `GET /api/stats` → `accounts` | | |
| 83 | +| Plateformes avec comptes | **19** (YouTube 9 990 · Instagram 3 374 · Facebook 1 543 · TikTok 995 · X 854 · Twitch 612 · balados 273 · OnlyFans 260 · Discord 235 · Spotify 205…) | `by_platform` | | |
| 84 | +| Niches | **20** | `GET /api/taxonomies` | | |
| 85 | +| Régions administratives | **17** | `GET /api/taxonomies` | | |
| 86 | +| Tiers d'audience | nano 11 644 · micro 842 · macro 242 · méga 63 | `by_tier` | | |
| 87 | +| Connecteurs | **22** (comptés dans `creaka/connectors/`) | code | | |
| 88 | +| Acteurs Apify maison | **13** (`actors/ka-*`) | code | | |
| 89 | +| Tests pytest | **51** | `pytest --collect-only` | | |
| 90 | + | |
| 54 | 91 | ## Fonctionnalités |
| 55 | 92 | |
| 56 | −- **Annuaire filtrable** par niche (20), région (17 régions administratives), langue, plateforme et taille d'audience (nano/micro/macro/méga). | |
| 57 | −- **Page dédiée par créateur** — `/createur/{id}` avec tous ses liens et métriques. | |
| 58 | −- **Pages SEO programmatiques** — `/plateformes` + `/plateforme/{p}` rendues en HTML. | |
| 93 | +- **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). | |
| 94 | +- **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. | |
| 95 | +- **Pages SEO programmatiques** — `/plateformes` + `/plateforme/{p}` rendues en HTML, SSR léger des fiches créateur, robots/sitemaps. | |
| 59 | 96 | - **Tableau de bord analytique** `/stats` + rapports PDF aux couleurs Groupe KA (catalogue + ReportBuilder). |
| 60 | 97 | - **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`. |
| 61 | 98 | - **Connexion « Se connecter avec KA ID »** (SSO du hub groupe-ka.com) + favoris unifiés « Mon univers Ka ». |
| 62 | −- **Widget KA Agent** — bulle de chat IA du Groupe KA câblée sur le site. | |
| 99 | +- **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). | |
| 63 | 100 | - **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. |
| 64 | 101 | - **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). |
| 65 | 102 | - **Opt-out immédiat et persistant** (`/retrait`) : fiche masquée sur-le-champ, liste de suppression `data/optout.json`, jamais ré-agrégée. |
@@ -68,21 +105,23 @@ Pour qui ? Le public qui découvre des créateurs par niche, région, langue ou | ||
| 68 | 105 | |
| 69 | 106 | Servis par `creaka/web.py` (FastAPI) sur le port 8160. |
| 70 | 107 | |
| 71 | −| Endpoint | Rôle | | |
| 72 | −|---|---| | |
| 73 | −| `GET /api/creators` | annuaire filtrable (q, niche, region, langue, plateforme, tier) | | |
| 74 | −| `GET /api/creators/{cid}` | fiche canonique d'un créateur (comptes, métriques, scores) | | |
| 75 | −| `GET /api/taxonomies` | niches, régions, plateformes, tiers d'audience | | |
| 76 | −| `GET /api/sources` | registre des connecteurs et leur dernière synchro | | |
| 77 | −| `GET /api/stats` · `/api/stats/dashboard` · `/report` · `/catalog` · `POST /api/stats/report/custom` | statistiques + rapports PDF (catalogue et personnalisés) | | |
| 78 | −| `POST /api/optout` | retrait immédiat et persistant d'un créateur | | |
| 79 | −| `GET /api/favorites` · `POST /api/favorites/toggle` | favoris « Mon univers Ka » (session KA ID) | | |
| 80 | −| `GET /healthz` · `GET /api/health` | santé du service | | |
| 81 | −| `GET /doc/` | guide d'utilisation en ligne | | |
| 108 | +| Méthode | Endpoint | Rôle | | |
| 109 | +|---|---|---| | |
| 110 | +| `GET` | `/api/creators` | annuaire filtrable (q, niche, region, langue, plateforme, tier) | | |
| 111 | +| `GET` | `/api/creators/{cid}` | fiche canonique d'un créateur (comptes, métriques, scores) | | |
| 112 | +| `GET` | `/api/taxonomies` | niches, régions, plateformes, tiers d'audience, langues | | |
| 113 | +| `GET` | `/api/sources` | registre des connecteurs : famille, mode d'accès, signal d'identité, cadence, dernière synchro | | |
| 114 | +| `GET` | `/api/stats` | statistiques agrégées (créateurs, comptes, par plateforme/tier/niche/région, dernier sync) — alimente les pastilles dynamiques ci-dessus | | |
| 115 | +| `GET` | `/api/stats/dashboard` · `/report` · `/catalog` | tableau de bord + rapports PDF (catalogue) | | |
| 116 | +| `POST` | `/api/stats/report/custom` | rapport PDF personnalisé (ReportBuilder) | | |
| 117 | +| `POST` | `/api/optout` | retrait immédiat et persistant d'un créateur | | |
| 118 | +| `GET` / `POST` | `/api/favorites` · `/api/favorites/toggle` | favoris « Mon univers Ka » (session KA ID) | | |
| 119 | +| `GET` | `/healthz` · `/api/health` | santé du service | | |
| 120 | +| `GET` | `/doc/` | guide d'utilisation en ligne | | |
| 82 | 121 | |
| 83 | 122 | ## Connecteurs |
| 84 | 123 | |
| 85 | −22 connecteurs auto-découverts (`creaka/connectors/`), relancés par le watch quotidien (cycle de 24 h) : | |
| 124 | +**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). | |
| 86 | 125 | |
| 87 | 126 | | Famille | Connecteurs | Rôle | |
| 88 | 127 | |---|---|---| |
@@ -92,6 +131,8 @@ Servis par `creaka/web.py` (FastAPI) sur le port 8160. | ||
| 92 | 131 | | Enrichissement — profils | `instagram`, `tiktok`, `youtube`, `twitch`, `x_profil`, `apify_social` | métriques et bios des comptes (API officielles, Scrapfly, acteurs Apify) | |
| 93 | 132 | | Enrichissement — liens | `bio_liens`, `linkinbio` | comptes croisés révélés via les liens de bio et les pages link-in-bio | |
| 94 | 133 | |
| 134 | +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. | |
| 135 | + | |
| 95 | 136 | ## Architecture |
| 96 | 137 | |
| 97 | 138 | Pipeline (calqué sur Lou·Ka) : **découverte → extraction → résolution d'identité → normalisation → déduplication → SQLite → API/UI**. |
@@ -101,29 +142,65 @@ Pipeline (calqué sur Lou·Ka) : **découverte → extraction → résolution d' | ||
| 101 | 142 | - **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). |
| 102 | 143 | - **Éthique** (`creaka/ethics.py`) : purge des données privées, opt-out, régime restreint des mineurs. |
| 103 | 144 | - **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`). |
| 104 | −- **25 tests pytest** (identité, homonymes, éthique…). | |
| 145 | +- **51 tests pytest** (identité, homonymes, éthique, périmètre QC, link-in-bio, normalisation…). | |
| 105 | 146 | |
| 106 | 147 | Processus PM2 sur le nœud : |
| 107 | 148 | |
| 108 | −| Processus | Rôle | Cadence | | |
| 109 | −|---|---|---| | |
| 110 | −| `crea-ka-web` | API FastAPI + frontend sur le port **8160** | continu | | |
| 111 | −| `crea-ka-sync` | watch de synchronisation (`run.py watch 24`) : découverte + enrichissement | cycle de 24 h | | |
| 112 | −| `crea-ka-ngrok` | tunnel ngrok vers **www.crea-ka.com** | continu | | |
| 149 | +| Processus | Rôle | Commande de démarrage réelle | Cadence | | |
| 150 | +|---|---|---|---| | |
| 151 | +| `crea-ka-web` | API FastAPI + frontend sur le port **8160** | `.venv/bin/python run.py serve 8160` | continu | | |
| 152 | +| `crea-ka-sync` | watch de synchronisation : découverte + enrichissement | `.venv/bin/python run.py watch 24` | cycle de 24 h | | |
| 153 | +| `crea-ka-ngrok` | tunnel vers **www.crea-ka.com** | `ngrok http --url=www.crea-ka.com 8160` | continu | | |
| 154 | + | |
| 155 | +## Démarrage rapide | |
| 156 | + | |
| 157 | +```bash | |
| 158 | +python3 -m venv .venv && .venv/bin/pip install -r requirements.txt | |
| 159 | +cp .env.example .env # remplir les clés (voir section suivante) | |
| 160 | +.venv/bin/python -m pytest tests/ -q # 51 tests | |
| 161 | +python3 run.py sync # découverte + enrichissement (toutes sources) | |
| 162 | +python3 run.py sync youtube instagram # …ou seulement certaines sources | |
| 163 | +python3 run.py watch 24 # sync en boucle (cycle de 24 h) | |
| 164 | +python3 run.py serve 8160 # API + frontend → http://localhost:8160 | |
| 165 | +python3 scripts/build_frontend.py # regénère frontend/dist | |
| 166 | +python3 run.py optout "instagram:handle" # retrait manuel immédiat | |
| 167 | +``` | |
| 168 | + | |
| 169 | +## Variables d'environnement | |
| 113 | 170 | |
| 114 | −Points de configuration notables (`.env`, gabarit `.env.example` — aucun secret dans le repo) : `SCRAPFLY_KEY`, `YOUTUBE_API_KEY`, jeton Apify, secret SSO partagé avec le hub KA ID. La liste d'opt-out vit dans `data/optout.json`. | |
| 171 | +Gabarit dans `.env.example` (copier vers `.env` — jamais commité, aucun secret dans le repo). Noms seulement : | |
| 172 | + | |
| 173 | +| Variable | Rôle | | |
| 174 | +|---|---| | |
| 175 | +| `SCRAPFLY_KEY` | profils Instagram/TikTok (palier 4, à minimiser) | | |
| 176 | +| `FIRECRAWL_API_KEY` | repli pages link-in-bio / listes publiques | | |
| 177 | +| `YOUTUBE_API_KEY` | API officielle YouTube (privilégiée) | | |
| 178 | +| `TWITCH_CLIENT_ID` · `TWITCH_CLIENT_SECRET` | API officielle Twitch | | |
| 179 | +| `PODCASTINDEX_API_KEY` · `PODCASTINDEX_API_SECRET` | enrichissement balados (gratuit ; sans clés, le connecteur est sauté proprement) | | |
| 180 | +| `APIFY_TOKEN` | acteurs Apify maison (enrichissement 13 plateformes) | | |
| 181 | +| `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) | | |
| 182 | +| `KA_HUB_URL` · `KA_SSO_SECRET` · `SESSION_SECRET` | SSO KA ID (hub groupe-ka.com) et sessions | | |
| 183 | +| `CREAKA_BASE_URL` | URL publique du site (SEO/liens absolus) | | |
| 184 | + | |
| 185 | +## Données & conformité | |
| 186 | + | |
| 187 | +- **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). | |
| 188 | +- **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`. | |
| 189 | +- **É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). | |
| 190 | +- **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). | |
| 191 | +- **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). | |
| 115 | 192 | |
| 116 | 193 | ## Structure du repo |
| 117 | 194 | |
| 118 | 195 | ``` |
| 119 | 196 | crea-ka/ |
| 120 | −├── run.py # CLI : sync · serve · optout | |
| 197 | +├── run.py # CLI : sync · watch · serve · optout | |
| 121 | 198 | ├── creaka/ # cœur Python : schema, identity, dedup, ethics, db, web, auth, stats, kapdf + connectors/ (22) |
| 122 | 199 | ├── frontend/ # src/ (template) → dist/ (généré par build_frontend.py, tracké — incl. doc/) |
| 123 | 200 | ├── scripts/ # build_frontend.py · deploy-m3u96b.sh · screenshots.sh |
| 124 | −├── tests/ # 25 tests pytest | |
| 125 | −├── data/ # SQLite, optout.json, datasets locaux (gitignorés au besoin) | |
| 126 | −├── actors/ # acteurs Apify d'appoint | |
| 201 | +├── tests/ # 51 tests pytest | |
| 202 | +├── data/ # SQLite, optout.json, sources.json, datasets locaux (gitignorés au besoin) | |
| 203 | +├── actors/ # 13 acteurs Apify maison (ka-instagram, ka-tiktok, ka-youtube, ka-x, …) | |
| 127 | 204 | └── docs/ # captures d'écran + docs connecteurs |
| 128 | 205 | ``` |
| 129 | 206 | |
@@ -133,6 +210,17 @@ crea-ka/ | ||
| 133 | 210 | - **Guide PDF** : [crea-ka-documentation.pdf](https://www.crea-ka.com/doc/crea-ka-documentation.pdf) — la même documentation, téléchargeable. |
| 134 | 211 | - Les captures du guide sont versionnées dans `frontend/dist/doc/img/` (etape1 → etape4). |
| 135 | 212 | |
| 213 | +## Historique | |
| 214 | + | |
| 215 | +Jalons tirés du `git log` : | |
| 216 | + | |
| 217 | +- **2026-08-17** — commit initial : pipeline, premiers connecteurs, design ka-ui « éditorial sharp », SSO KA ID, tableau de bord `/stats`, widget KA Agent. | |
| 218 | +- **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. | |
| 219 | +- **2026-08-19** — campagne mobile (socle tokens.css, champs ≥16 px), KA Agent v2 plein écran, `/stats` v2 + 5 rapports PDF. | |
| 220 | +- **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). | |
| 221 | +- **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. | |
| 222 | +- **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. | |
| 223 | + | |
| 136 | 224 | ## Développement (remote-first) |
| 137 | 225 | |
| 138 | 226 | **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. |
@@ -141,14 +229,6 @@ crea-ka/ | ||
| 141 | 229 | - L'agent forwarding SSH est actif : le `git push origin main` fonctionne pendant une session SSH depuis le laptop. |
| 142 | 230 | |
| 143 | 231 | ```bash |
| 144 | −python3 -m venv .venv && .venv/bin/pip install -r requirements.txt | |
| 145 | −cp .env.example .env # SCRAPFLY_KEY, YOUTUBE_API_KEY… | |
| 146 | −python3 -m pytest tests/ -q # 25 tests | |
| 147 | −python3 run.py sync # découverte + enrichissement | |
| 148 | −python3 run.py serve 8160 # API + frontend | |
| 149 | −python3 scripts/build_frontend.py # regénère frontend/dist | |
| 150 | −python3 run.py optout "instagram:handle" # retrait manuel | |
| 151 | − | |
| 152 | 232 | pm2 restart crea-ka-web # après un changement en production |
| 153 | 233 | ``` |
| 154 | 234 | |
| 155 | 235 | |