docs: README v2 — galerie multi-pages, style du site, documentation, contact
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 | −[](https://www.crea-ka.com) | |
| 8 | − | |
| 9 | − | |
| 10 | − | |
| 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 | − | |
| 13 | − | |
| 14 | − | |
| 15 | − | |
| 16 | − | |
| 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 | |