SPB Git forge

spb/crea-ka

Public

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

52commits 1branches 0releases
11.3 MBsize
maindefault branch
19 days agolast push
Python 73.6% HTML 13.2% TypeScript 6% JavaScript 4.5% CSS 1.7% Dockerfile 0.6%

docs: README v2 — galerie multi-pages, style du site, documentation, contact

Simon-Pierre Boucher committed 1 mo ago (Aug 24, 2026) parent f89f6bf

1 changed file +109 −42

modified README.md +109 −42
@@ -1,30 +1,55 @@
1 1 <!-- Auteur : Simon-Pierre Boucher — contact@spboucher.ai -->
2 2
3 −# Créa·Ka
4 −
5 −**Tous les créateurs de contenu québécois, tous leurs liens — un annuaire public cross-plateforme, croisement entre un annuaire cherchable et un « Linktree collectif ».**
6 −
7 −[![Site](https://img.shields.io/website?url=https%3A%2F%2Fwww.crea-ka.com&style=flat-square&label=www.crea-ka.com)](https://www.crea-ka.com)
8 −![Nœud](https://img.shields.io/badge/n%C5%93ud-M3U96b-1f6feb?style=flat-square)
9 −![Port](https://img.shields.io/badge/port-8160-141814?style=flat-square)
10 −![PM2](https://img.shields.io/badge/process-PM2-2b037a?style=flat-square)
3 +<p align="center">
4 + <a href="https://www.crea-ka.com"><img src="https://www.crea-ka.com/og.png" width="760" alt="Créa·Ka — Les créateurs d'ici, tous leurs liens"></a>
5 +</p>
6 +<h1 align="center">Créa·Ka</h1>
7 +<p align="center"><b>Les créateurs d'ici, tous leurs liens</b></p>
11 8
12 −![Python](https://img.shields.io/badge/Python-3.14-3776AB?style=flat-square&logo=python&logoColor=white)
13 −![FastAPI](https://img.shields.io/badge/FastAPI-API-009688?style=flat-square&logo=fastapi&logoColor=white)
14 −![SQLite](https://img.shields.io/badge/SQLite-WAL-003B57?style=flat-square&logo=sqlite&logoColor=white)
15 −![Frontend](https://img.shields.io/badge/SPA-z%C3%A9ro_build-c9a3ff?style=flat-square)
16 −![Groupe KA](https://img.shields.io/badge/Groupe-KA-b7f000?style=flat-square)
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>
17 24
18 −**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**. 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**.
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**.
19 26
20 27 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.
21 28
22 −## Captures d'écran
23 −
24 −<p align="center">
25 − <img src="docs/screenshots/crea-ka-desktop.png" width="640" alt="Accueil — desktop">
26 − <img src="docs/screenshots/crea-ka-mobile.png" width="200" alt="Accueil — mobile">
27 −</p>
29 +## Visite guidée
30 +
31 +<table>
32 + <tr>
33 + <td align="center"><img src="docs/screenshots/crea-ka-desktop.png" width="420"><br><sub><b>Accueil — l'annuaire des créateurs (desktop)</b></sub></td>
34 + <td align="center"><img src="docs/screenshots/crea-ka-mobile.png" width="220"><br><sub><b>Accueil — version mobile</b></sub></td>
35 + </tr>
36 + <tr>
37 + <td align="center"><img src="frontend/dist/doc/img/etape1.png" width="420"><br><sub><b>Étape 1 · Explorez l'annuaire depuis l'accueil</b></sub></td>
38 + <td align="center"><img src="frontend/dist/doc/img/etape2.png" width="420"><br><sub><b>Étape 2 · Découvrez par plateforme</b></sub></td>
39 + </tr>
40 + <tr>
41 + <td align="center"><img src="frontend/dist/doc/img/etape3.png" width="420"><br><sub><b>Étape 3 · Ouvrez la fiche d'un créateur</b></sub></td>
42 + <td align="center"><img src="frontend/dist/doc/img/etape4.png" width="420"><br><sub><b>Étape 4 · Consultez les statistiques sur /stats</b></sub></td>
43 + </tr>
44 + <tr>
45 + <td align="center"><img src="docs/screenshots/accueil.png" width="420"><br><sub><b>Annuaire filtrable — niches, régions, plateformes</b></sub></td>
46 + <td align="center"><img src="docs/screenshots/createur.png" width="420"><br><sub><b>Fiche créateur — tous ses liens et métriques</b></sub></td>
47 + </tr>
48 + <tr>
49 + <td align="center"><img src="docs/screenshots/stats.png" width="420"><br><sub><b>Tableau de bord analytique /stats</b></sub></td>
50 + <td align="center"><img src="docs/screenshots/mobile.png" width="220"><br><sub><b>Parcours mobile</b></sub></td>
51 + </tr>
52 +</table>
28 53
29 54 ## Fonctionnalités
30 55
@@ -39,6 +64,34 @@ Pour qui ? Le public qui découvre des créateurs par niche, région, langue ou
39 64 - **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).
40 65 - **Opt-out immédiat et persistant** (`/retrait`) : fiche masquée sur-le-champ, liste de suppression `data/optout.json`, jamais ré-agrégée.
41 66
67 +## API (endpoints principaux)
68 +
69 +Servis par `creaka/web.py` (FastAPI) sur le port 8160.
70 +
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 |
82 +
83 +## Connecteurs
84 +
85 +22 connecteurs auto-découverts (`creaka/connectors/`), relancés par le watch quotidien (cycle de 24 h) :
86 +
87 +| Famille | Connecteurs | Rôle |
88 +|---|---|---|
89 +| 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) |
90 +| Découverte — plateformes | `youtube_recherche`, `twitch_decouverte`, `kick_decouverte` | trouver de nouveaux créateurs québécois directement sur les plateformes |
91 +| Découverte — balados | `balados_itunes`, `balados_rss`, `podcastindex`, `palmares_apple` | baladodiffusion (iTunes, flux RSS, Podcast Index, palmarès Apple) |
92 +| Enrichissement — profils | `instagram`, `tiktok`, `youtube`, `twitch`, `x_profil`, `apify_social` | métriques et bios des comptes (API officielles, Scrapfly, acteurs Apify) |
93 +| Enrichissement — liens | `bio_liens`, `linkinbio` | comptes croisés révélés via les liens de bio et les pages link-in-bio |
94 +
42 95 ## Architecture
43 96
44 97 Pipeline (calqué sur Lou·Ka) : **découverte → extraction → résolution d'identité → normalisation → déduplication → SQLite → API/UI**.
@@ -46,26 +99,27 @@ Pipeline (calqué sur Lou·Ka) : **découverte → extraction → résolution d'
46 99 - **Backend Python 3.14 / FastAPI** (`creaka/web.py`) : API + service du frontend statique.
47 100 - **SQLite (mode WAL)** (`creaka/db.py`) : fiches canoniques, index des comptes, journal des syncs.
48 101 - **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).
49 −- **10 connecteurs** auto-découverts (`creaka/connectors/`) — découverte (listes-medias, wikidata-qc, onlyqueb, youtube-recherche, balados-itunes) et enrichissement (instagram-profil, tiktok-profil, youtube, twitch, link-in-bio via Scrapfly/API officielles).
50 102 - **Éthique** (`creaka/ethics.py`) : purge des données privées, opt-out, régime restreint des mineurs.
51 −- **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`).
103 +- **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`).
52 104 - **25 tests pytest** (identité, homonymes, éthique…).
53 105
54 106 Processus PM2 sur le nœud :
55 107
56 −| Processus | Rôle |
57 −|---|---|
58 −| `crea-ka-web` | API FastAPI + frontend sur le port **8160** |
59 −| `crea-ka-sync` | watch de synchronisation (24 h) : découverte + enrichissement |
60 −| `crea-ka-ngrok` | tunnel ngrok vers **www.crea-ka.com** |
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 |
113 +
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`.
61 115
62 116 ## Structure du repo
63 117
64 118 ```
65 119 crea-ka/
66 120 ├── run.py # CLI : sync · serve · optout
67 −├── creaka/ # cœur Python : schema, identity, dedup, ethics, db, web, auth, stats, kapdf + connectors/ (10)
68 −├── frontend/ # src/ (template) → dist/ (généré par build_frontend.py)
121 +├── creaka/ # cœur Python : schema, identity, dedup, ethics, db, web, auth, stats, kapdf + connectors/ (22)
122 +├── frontend/ # src/ (template) → dist/ (généré par build_frontend.py, tracké — incl. doc/)
69 123 ├── scripts/ # build_frontend.py · deploy-m3u96b.sh · screenshots.sh
70 124 ├── tests/ # 25 tests pytest
71 125 ├── data/ # SQLite, optout.json, datasets locaux (gitignorés au besoin)
@@ -73,6 +127,12 @@ crea-ka/
73 127 └── docs/ # captures d'écran + docs connecteurs
74 128 ```
75 129
130 +## Documentation
131 +
132 +- **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.
133 +- **Guide PDF** : [crea-ka-documentation.pdf](https://www.crea-ka.com/doc/crea-ka-documentation.pdf) — la même documentation, téléchargeable.
134 +- Les captures du guide sont versionnées dans `frontend/dist/doc/img/` (etape1 → etape4).
135 +
76 136 ## Développement (remote-first)
77 137
78 138 **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.
@@ -101,19 +161,26 @@ pm2 restart crea-ka-web # après un changement en production
101 161
102 162 ## Écosystème Groupe KA
103 163
104 −- [groupe-ka.com](https://www.groupe-ka.com) — portail du groupe et compte unique KA ID
105 −- [lou-ka.com](https://www.lou-ka.com) — logements à louer
106 −- [immo-ka.com](https://www.immo-ka.com) — propriétés à vendre
107 −- [vrai-prix.com](https://www.vrai-prix.com) — estimation immobilière
108 −- [auto-ka.com](https://www.auto-ka.com) — véhicules
109 −- [fabri-ka.com](https://www.fabri-ka.com) — produits québécois
110 −- [food-ka.com](https://www.food-ka.com) — épicerie et alimentation
111 −- [resto-ka.com](https://www.resto-ka.com) — restaurants
112 −- [sorti-ka.com](https://www.sorti-ka.com) — sorties et événements
113 −- [job-ka.com](https://www.job-ka.com) — emplois
114 −- [crea-ka.com](https://www.crea-ka.com) — créateurs de contenu *(ce repo)*
115 −- [trouve-ka.com](https://www.trouve-ka.com) — petites annonces
116 −- [api-ka.com](https://www.api-ka.com) — API de données
164 +| Plateforme | Vocation |
165 +|---|---|
166 +| [groupe-ka.com](https://www.groupe-ka.com) | portail du groupe et compte unique KA ID |
167 +| [lou-ka.com](https://www.lou-ka.com) | logements à louer |
168 +| [immo-ka.com](https://www.immo-ka.com) | propriétés à vendre |
169 +| [vrai-prix.com](https://www.vrai-prix.com) | estimation immobilière |
170 +| [auto-ka.com](https://www.auto-ka.com) | véhicules |
171 +| [fabri-ka.com](https://www.fabri-ka.com) | produits québécois |
172 +| [food-ka.com](https://www.food-ka.com) | épicerie et alimentation |
173 +| [resto-ka.com](https://www.resto-ka.com) | restaurants |
174 +| [sorti-ka.com](https://www.sorti-ka.com) | sorties et événements |
175 +| [job-ka.com](https://www.job-ka.com) | emplois |
176 +| [crea-ka.com](https://www.crea-ka.com) | créateurs de contenu *(ce repo)* |
177 +| [trouve-ka.com](https://www.trouve-ka.com) | petites annonces |
178 +| [api-ka.com](https://www.api-ka.com) | API de données |
179 +
180 +## Contact
181 +
182 +**Simon-Pierre Boucher** — fondateur, Groupe KA
183 +📧 [contact@spboucher.ai](mailto:contact@spboucher.ai)
117 184
118 185 ---
119 186
120 187