docs: README v3 — chiffres live vérifiés, pastilles dynamiques, sections complètes
1 changed file +127 −38
modified
README.md
+127 −38
@@ -6,23 +6,48 @@ | ||
| 6 | 6 | <h1 align="center">Groupe·Ka</h1> |
| 7 | 7 | <p align="center"><b>Le portail de l'écosystème ·Ka</b></p> |
| 8 | 8 | |
| 9 | −<p align="center"> | |
| 10 | − <a href="https://www.groupe-ka.com"><img src="https://img.shields.io/website?url=https%3A%2F%2Fwww.groupe-ka.com&style=flat-square&label=www.groupe-ka.com&up_color=d9f26b&up_message=en%20ligne" alt="Site"></a> | |
| 11 | − <a href="https://www.groupe-ka.com/doc/"><img src="https://img.shields.io/badge/📖_documentation-%2Fdoc-d9f26b?style=flat-square" alt="Documentation"></a> | |
| 12 | − <a href="https://www.groupe-ka.com/doc/groupe-ka-documentation.pdf"><img src="https://img.shields.io/badge/guide-PDF-d9f26b?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-8110-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/Next.js-16-000000?style=flat-square&logo=nextdotjs&logoColor=white" alt="Next.js"> | |
| 19 | − <img src="https://img.shields.io/badge/React-19-087EA4?style=flat-square&logo=react&logoColor=white" alt="React"> | |
| 20 | − <img src="https://img.shields.io/badge/TypeScript-5-3178C6?style=flat-square&logo=typescript&logoColor=white" alt="TypeScript"> | |
| 21 | − <img src="https://img.shields.io/badge/SQLite-WAL-003B57?style=flat-square&logo=sqlite&logoColor=white" alt="SQLite"> | |
| 22 | − <img src="https://img.shields.io/badge/Groupe-KA-d9f26b?style=flat-square" alt="Groupe KA"> | |
| 23 | −</p> | |
| 9 | +<div align="center"> | |
| 10 | + | |
| 11 | +<a href="https://www.groupe-ka.com"><img src="https://img.shields.io/website?url=https%3A%2F%2Fwww.groupe-ka.com&style=flat-square&label=www.groupe-ka.com&up_color=d9f26b&up_message=en%20ligne" alt="Site"></a> | |
| 12 | +<a href="https://www.groupe-ka.com/doc/"><img src="https://img.shields.io/badge/📖_documentation-%2Fdoc-d9f26b?style=flat-square" alt="Documentation"></a> | |
| 13 | +<a href="https://www.groupe-ka.com/doc/groupe-ka-documentation.pdf"><img src="https://img.shields.io/badge/guide-PDF-d9f26b?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-8110-141814?style=flat-square" alt="Port"> | |
| 16 | +<img src="https://img.shields.io/badge/process-PM2-2b037a?style=flat-square&logo=pm2&logoColor=white" alt="PM2"> | |
| 17 | + | |
| 18 | +</div> | |
| 19 | + | |
| 20 | +<div align="center"> | |
| 21 | + | |
| 22 | +<img src="https://img.shields.io/badge/dynamic/json?style=flat-square&color=d9f26b&url=https%3A%2F%2Fwww.groupe-ka.com%2Fapi%2Fhealth&query=%24.status&label=sant%C3%A9%20du%20hub" alt="Santé du hub (live)"> | |
| 23 | +<img src="https://img.shields.io/badge/dynamic/json?style=flat-square&color=d9f26b&url=https%3A%2F%2Fwww.lou-ka.com%2Fapi%2Fstats&query=%24.total&label=logements%20Lou%C2%B7Ka" alt="Logements Lou·Ka (live)"> | |
| 24 | +<img src="https://img.shields.io/badge/dynamic/json?style=flat-square&color=d9f26b&url=https%3A%2F%2Fwww.immo-ka.com%2Fapi%2Fstats&query=%24.total&label=propri%C3%A9t%C3%A9s%20Immo%C2%B7Ka" alt="Propriétés Immo·Ka (live)"> | |
| 25 | +<img src="https://img.shields.io/badge/dynamic/json?style=flat-square&color=d9f26b&url=https%3A%2F%2Fwww.auto-ka.com%2Fapi%2Fstats&query=%24.total&label=v%C3%A9hicules%20Auto%C2%B7Ka" alt="Véhicules Auto·Ka (live)"> | |
| 26 | +<img src="https://img.shields.io/badge/dynamic/json?style=flat-square&color=d9f26b&url=https%3A%2F%2Fwww.fabri-ka.com%2Fapi%2Fstats&query=%24.totals.products&label=produits%20Fabri%C2%B7Ka" alt="Produits Fabri·Ka (live)"> | |
| 27 | +<img src="https://img.shields.io/badge/dynamic/json?style=flat-square&color=d9f26b&url=https%3A%2F%2Fwww.food-ka.com%2Fapi%2Fstats&query=%24.total&label=aliments%20Food%C2%B7Ka" alt="Aliments Food·Ka (live)"> | |
| 28 | +<img src="https://img.shields.io/badge/dynamic/json?style=flat-square&color=d9f26b&url=https%3A%2F%2Fwww.resto-ka.com%2Fapi%2Fstats&query=%24.restaurants&label=restos%20Resto%C2%B7Ka" alt="Restaurants Resto·Ka (live)"> | |
| 29 | +<img src="https://img.shields.io/badge/dynamic/json?style=flat-square&color=d9f26b&url=https%3A%2F%2Fwww.sorti-ka.com%2Fapi%2Fstats&query=%24.total_active&label=sorties%20Sorti%C2%B7Ka" alt="Sorties Sorti·Ka (live)"> | |
| 30 | +<img src="https://img.shields.io/badge/dynamic/json?style=flat-square&color=d9f26b&url=https%3A%2F%2Fwww.job-ka.com%2Fapi%2Fstats&query=%24.total&label=emplois%20Job%C2%B7Ka" alt="Emplois Job·Ka (live)"> | |
| 31 | +<img src="https://img.shields.io/badge/dynamic/json?style=flat-square&color=d9f26b&url=https%3A%2F%2Fwww.crea-ka.com%2Fapi%2Fstats&query=%24.creators&label=cr%C3%A9ateurs%20Cr%C3%A9a%C2%B7Ka" alt="Créateurs Créa·Ka (live)"> | |
| 32 | + | |
| 33 | +<sub>↑ pastilles <b>live</b> — les chiffres sont tirés en direct des <code>/api/stats</code> publics de l'écosystème, exactement comme la page d'accueil du hub.</sub> | |
| 34 | + | |
| 35 | +</div> | |
| 24 | 36 | |
| 25 | −**Groupe·Ka** ([www.groupe-ka.com](https://www.groupe-ka.com)) est le **hub central de l'écosystème ·Ka**. Il joue trois rôles : la **vitrine du groupe** (présentation des plateformes québécoises, métriques live tirées en direct des `/api/stats` de chaque site, pages corporatives `/agents`, `/investisseurs`, `/telecharger`, `/marque`) ; le **KA ID**, l'identité centrale du groupe — un seul compte (courriel + mot de passe, Google, Apple) et un `ka_id` partagé par toutes les plateformes via un **SSO maison** ; et une **tour de contrôle publique** — pages `/status` (disponibilité des 12 sites, historique 90 jours, ticks aux 5 min) et `/stats` (tableau de bord maître consolidé). | |
| 37 | +<div align="center"> | |
| 38 | + | |
| 39 | +<img src="https://img.shields.io/badge/Next.js-16-000000?style=flat-square&logo=nextdotjs&logoColor=white" alt="Next.js"> | |
| 40 | +<img src="https://img.shields.io/badge/React-19-087EA4?style=flat-square&logo=react&logoColor=white" alt="React"> | |
| 41 | +<img src="https://img.shields.io/badge/TypeScript-5-3178C6?style=flat-square&logo=typescript&logoColor=white" alt="TypeScript"> | |
| 42 | +<img src="https://img.shields.io/badge/Tailwind_CSS-4-06B6D4?style=flat-square&logo=tailwindcss&logoColor=white" alt="Tailwind CSS"> | |
| 43 | +<img src="https://img.shields.io/badge/SQLite-WAL-003B57?style=flat-square&logo=sqlite&logoColor=white" alt="SQLite"> | |
| 44 | +<img src="https://img.shields.io/badge/tunnel-ngrok-1F1E37?style=flat-square&logo=ngrok&logoColor=white" alt="ngrok"> | |
| 45 | +<img src="https://img.shields.io/badge/Groupe-KA-d9f26b?style=flat-square" alt="Groupe KA"> | |
| 46 | +<img src="https://img.shields.io/badge/remote--first-spbgit-8250df?style=flat-square&logo=git&logoColor=white" alt="spbgit"> | |
| 47 | + | |
| 48 | +</div> | |
| 49 | + | |
| 50 | +**Groupe·Ka** ([www.groupe-ka.com](https://www.groupe-ka.com)) est le **hub central de l'écosystème ·Ka**. Il joue trois rôles : la **vitrine du groupe** (présentation des plateformes québécoises, métriques live tirées en direct des `/api/stats` de chaque site, pages corporatives `/agents`, `/investisseurs`, `/telecharger`, `/marque`) ; le **KA ID**, l'identité centrale du groupe — un seul compte (courriel + mot de passe, Google, Apple) et un `ka_id` partagé par toutes les plateformes via un **SSO maison** ; et une **tour de contrôle publique** — pages `/status` (disponibilité de **16 cibles** : les 13 sites de l'écosystème + les 3 agents gardiens ka2.bot/ka4.bot/ka6.bot, historique 90 jours, ticks aux 5 min) et `/stats` (tableau de bord maître consolidé). | |
| 26 | 51 | |
| 27 | 52 | Pour qui ? Les visiteurs qui découvrent le groupe, les membres qui gèrent leur compte KA ID (profil, favoris « Mon univers Ka », carte de membre, jeton API personnel), et les investisseurs (dossier corporatif PDF). |
| 28 | 53 | |
@@ -47,23 +72,25 @@ Pour qui ? Les visiteurs qui découvrent le groupe, les membres qui gèrent leur | ||
| 47 | 72 | |
| 48 | 73 | - **KA ID** — identifiant membre unique (`ka-` + 10 chiffres) créé au hub, source de vérité de tout le groupe. |
| 49 | 74 | - **Trois modes de connexion** : Google OAuth 2.0, Sign in with Apple, courriel + mot de passe (scrypt natif Node, zéro dépendance). |
| 50 | −- **SSO maison** vers les 12 plateformes + l'app iOS native (`ka-ios`) — jeton JWT signé par plateforme, valide 5 min (`/sso/authorize?client=<plateforme>`). | |
| 75 | +- **SSO maison** vers les 12 plateformes et les apps natives — **16 clients au registre** (`src/lib/sso.ts`) : les 12 plateformes actives, les apps `ka-ios` et `ka-android`, plus les alias historiques Ora·Ka et Toit·Ka — jeton JWT signé par plateforme, valide 5 min (`/sso/authorize?client=<plateforme>`). | |
| 51 | 76 | - **Profil enrichi** (bio, ville, réseaux sociaux, rôle) affiché par toutes les plateformes, avec page publique `/u/[kaId]`. |
| 52 | 77 | - **Favoris unifiés « Mon univers Ka »** — magasin central ; les plateformes poussent et lisent via `/api/sso/favorites`. |
| 53 | 78 | - **Carte de membre** avec QR code + passe **Apple Wallet** signée (`/api/wallet/pass`). |
| 54 | 79 | - **Jeton API personnel** (`kapi_`) généré depuis `/compte` pour l'API·Ka. |
| 55 | −- **Page `/status`** — état des sites vérifié en direct + historique de disponibilité 90 jours (`data/status/history.jsonl`, ticks aux 5 min), uptime 24 h / 7 j / 30 j. | |
| 80 | +- **Page `/status`** — 16 cibles vérifiées en direct (13 sites + agents ka2/ka4/ka6) + historique de disponibilité 90 jours (`data/status/history.jsonl`, ticks aux 5 min), uptime 24 h / 7 j / 30 j. | |
| 56 | 81 | - **Page `/stats`** — consolidation live des métriques de l'écosystème + rapports PDF personnalisés (`/rapports`, catalogue et ReportBuilder). |
| 57 | −- **Pages corporatives** : `/agents` (agents gardiens ka2/ka4/ka6), `/investisseurs` (dossier PDF), `/telecharger` (apps iOS/Android/macOS), `/avis`, `/bots`, `/marque`. | |
| 82 | +- **Rapport quotidien automatisé** — rédaction Claude + PDF chaque matin (6 h), archivé sur `/rapports/[date]`. | |
| 83 | +- **Recherche écosystème** — barre dans le header + page `/recherche` propulsée par le moteur Trouve·Ka. | |
| 84 | +- **Pages corporatives** : `/agents` (agents gardiens ka2/ka4/ka6), `/investisseurs` (6 documents corporatifs PDF), `/telecharger` (apps iOS/Android/macOS), `/avis`, `/bots`, `/marque` (logos + palettes des 13 plateformes). | |
| 58 | 85 | - **Conformité** : `/loi-25`, `/conditions`, `/confidentialite`, `/retrait` (droit de retrait des données). |
| 59 | −- **KA Agent** — bulle de chat IA du groupe (`public/ka-agent.js`) câblée sur toutes les pages. | |
| 86 | +- **KA Agent** — bulle de chat IA du groupe (`public/ka-agent.js`) câblée sur toutes les pages (v3 : déplaçable, plein écran, Markdown streaming). | |
| 60 | 87 | - **ka-ui vendoré** (`src/ka/` + `ecosystem.json`) — design system, accents officiels et footer partagés de l'écosystème. |
| 61 | 88 | |
| 62 | −## API (routes principales) | |
| 89 | +## API (25 routes) | |
| 63 | 90 | |
| 64 | −Toutes les routes vivent dans `src/app/api/` (App Router Next.js). | |
| 91 | +Toutes les routes vivent dans `src/app/api/` (App Router Next.js) — **25 fichiers `route.ts`** au total. | |
| 65 | 92 | |
| 66 | −| Route | Rôle | | |
| 93 | +| Méthode(s) & route | Rôle | | |
| 67 | 94 | |---|---| |
| 68 | 95 | | `POST /api/auth/register` · `POST /api/auth/login` · `POST /api/auth/logout` | comptes courriel + mot de passe (scrypt) | |
| 69 | 96 | | `GET /api/auth/google` · `GET /api/auth/callback/google` | connexion Google OAuth 2.0 (vérification `id_token` par JWKS) | |
@@ -76,27 +103,44 @@ Toutes les routes vivent dans `src/app/api/` (App Router Next.js). | ||
| 76 | 103 | | `GET /api/wallet/pass` | passe Apple Wallet signée (carte de membre) | |
| 77 | 104 | | `GET /api/stats/report` · `/api/stats/catalog` · `POST /api/stats/report/custom` · `GET /api/stats/ecosystem-report` | rapports PDF (plateforme, catalogue, personnalisés, écosystème) | |
| 78 | 105 | | `GET /api/rapports/[date]/pdf` | rapport quotidien archivé | |
| 79 | −| `GET /api/status/tick` | tick de disponibilité (alimenté aux 5 min) | | |
| 80 | −| `GET /api/health` | santé du service | | |
| 106 | +| `GET /api/status/tick` | tick de disponibilité — vérifie les 16 cibles et enregistre l'historique (appelé aux 5 min par PM2 ; ⚠️ effet de bord, ne pas l'appeler en boucle) | | |
| 107 | +| `GET /api/health` | santé du service → `{"status":"ok","app":"groupe-ka"}` | | |
| 108 | + | |
| 109 | +## Métriques live consolidées (sources) | |
| 110 | + | |
| 111 | +Le hub tire ses chiffres **en direct** des endpoints publics des plateformes (`src/lib/live.ts`, cache serveur ISR 10 min, valeurs de repli en cas de panne). Instantané **au 2026-08-24** : | |
| 112 | + | |
| 113 | +| Plateforme | Endpoint consommé | Volume live (au 2026-08-24) | | |
| 114 | +|---|---|---| | |
| 115 | +| Lou·Ka | `lou-ka.com/api/stats` | 45 762 logements · 190 sources | | |
| 116 | +| Immo·Ka | `immo-ka.com/api/stats` | 67 735 propriétés · 48 sources · 3 273 villes | | |
| 117 | +| Vrai-Prix | `vrai-prix.com/api/stats` | 3 747 008 unités évaluées · 1 097 municipalités | | |
| 118 | +| Auto·Ka | `auto-ka.com/api/stats` | 48 388 véhicules · 129 sources | | |
| 119 | +| Fabri·Ka | `fabri-ka.com/api/stats` | 385 308 produits · 1 582 boutiques live | | |
| 120 | +| Food·Ka | `food-ka.com/api/stats` | 50 892 aliments · 57 sources | | |
| 121 | +| Resto·Ka | `resto-ka.com/api/stats` | 14 716 restaurants · 149 569 items de menus | | |
| 122 | +| Sorti·Ka | `sorti-ka.com/api/stats` | 18 186 sorties actives · 332 villes | | |
| 123 | +| Créa·Ka | `crea-ka.com/api/stats` | 12 791 créateurs · 18 942 comptes | | |
| 124 | +| Job·Ka | `job-ka.com/api/stats` | 21 492 emplois · 1 653 employeurs | | |
| 125 | +| Trouve·Ka | `trouve-ka.com/api/status` | 302 391 pages indexées · 14 domaines | | |
| 126 | +| API·Ka | `api-ka.com/api/stats` | 6 198 appels API / 7 jours | | |
| 81 | 127 | |
| 82 | 128 | ## Architecture |
| 83 | 129 | |
| 84 | −- **Next.js 16 (App Router, Turbopack) + React 19 + TypeScript 5 + Tailwind CSS 4** — pages et API dans `src/app/`. | |
| 130 | +- **Next.js 16 (App Router, Turbopack) + React 19 + TypeScript 5 + Tailwind CSS 4** — pages et API dans `src/app/` (20 pages + accueil, 25 routes API). | |
| 85 | 131 | - **SQLite (better-sqlite3, mode WAL)** dans `data/` — comptes, profils, favoris ; zéro serveur de base de données. |
| 86 | 132 | - **jose** pour les JWT/JWKS (sessions HS256 en témoin HttpOnly `ka_session` 30 jours ; vérification des `id_token` Google par JWKS ; `client_secret` Apple signé ES256 à la volée). |
| 87 | 133 | - **sharp** (avatars), **qrcode** (carte de membre), **pdfkit** (rapports). |
| 88 | 134 | - Bibliothèques internes : `src/lib/` (`auth.ts`, `sso.ts`, `db.ts`, `live.ts`, `ecostats.ts`, `status.ts`). |
| 89 | 135 | |
| 90 | −Processus PM2 sur le nœud : | |
| 91 | − | |
| 92 | −| Processus | Rôle | Cadence | | |
| 93 | −|---|---|---| | |
| 94 | −| `groupe-ka` | serveur Next.js de production sur le port **8110** | continu | | |
| 95 | −| `groupe-ka-ngrok` | tunnel ngrok vers **www.groupe-ka.com** | continu | | |
| 96 | −| `groupe-ka-status-tick` | tick de disponibilité (`scripts/status-tick.sh`) → `data/status/history.jsonl` | toutes les 5 min | | |
| 97 | −| `groupe-ka-rapport-quotidien` | génération du rapport quotidien (`scripts/rapport-quotidien.sh`) | quotidien | | |
| 136 | +Processus PM2 sur le nœud (commandes de lancement réelles) : | |
| 98 | 137 | |
| 99 | −Points de configuration notables (variables d'environnement, sans secrets dans le repo) : identifiants OAuth Google et Apple, secret de session/SSO, certificats de la passe Apple Wallet. La base SQLite et l'historique de statut vivent dans `data/` (gitignoré). | |
| 138 | +| Processus | Rôle | Cadence | Commande | | |
| 139 | +|---|---|---|---| | |
| 140 | +| `groupe-ka` | serveur Next.js de production | continu | `next start -H 0.0.0.0 -p 8110` | | |
| 141 | +| `groupe-ka-ngrok` | tunnel public | continu | `ngrok http --url=www.groupe-ka.com 8110` | | |
| 142 | +| `groupe-ka-status-tick` | tick de disponibilité → `data/status/history.jsonl` | cron `*/5 * * * *` | `scripts/status-tick.sh` | | |
| 143 | +| `groupe-ka-rapport-quotidien` | rapport quotidien (rédaction Claude + PDF) | cron `0 6 * * *` | `scripts/rapport-quotidien.sh` | | |
| 100 | 144 | |
| 101 | 145 | ## Structure du repo |
| 102 | 146 | |
@@ -106,16 +150,61 @@ groupe-ka/ | ||
| 106 | 150 | ├── public/ # favicon, og.png, ka-agent.js (widget IA), doc/ (guide + captures), documents publics |
| 107 | 151 | ├── assets/ # captures d'écran historiques |
| 108 | 152 | ├── data/ # SQLite (WAL) + status/history.jsonl (90 jours) — gitignoré |
| 109 | −├── scripts/ # status-tick.sh (tick de disponibilité) + rapport-quotidien | |
| 153 | +├── scripts/ # status-tick.sh (tick de disponibilité) + rapport-quotidien.sh | |
| 110 | 154 | └── docs/ # captures d'écran du README |
| 111 | 155 | ``` |
| 112 | 156 | |
| 157 | +## Démarrage rapide | |
| 158 | + | |
| 159 | +```bash | |
| 160 | +git clone gitsrv:groupe-ka.git && cd groupe-ka # spbgit (alias SSH gitsrv) | |
| 161 | +npm install | |
| 162 | +# créer .env.local (voir « Variables d'environnement » ci-dessous) | |
| 163 | +npm run dev # développement (Turbopack) | |
| 164 | +npm run build # build de production | |
| 165 | +npm start # sert le build | |
| 166 | +npm run lint # eslint | |
| 167 | +``` | |
| 168 | + | |
| 169 | +Sans `.env.local`, le site tourne mais les connexions Google/Apple, le SSO et la passe Wallet sont inactifs. La base SQLite (`data/`) se crée toute seule au premier lancement. | |
| 170 | + | |
| 171 | +## Variables d'environnement | |
| 172 | + | |
| 173 | +Noms attendus dans `.env.local` (jamais de valeurs dans le repo) : | |
| 174 | + | |
| 175 | +| Groupe | Variables | | |
| 176 | +|---|---| | |
| 177 | +| Base | `BASE_URL`, `KA_AUTH_SECRET` | | |
| 178 | +| Google OAuth | `GOOGLE_CLIENT_ID`, `GOOGLE_CLIENT_SECRET` | | |
| 179 | +| Sign in with Apple | `APPLE_CLIENT_ID`, `APPLE_TEAM_ID`, `APPLE_KEY_ID`, `APPLE_PRIVATE_KEY` | | |
| 180 | +| Apple Wallet (carte de membre) | `KA_PASS_DIR`, `KA_PASS_TYPE_ID`, `KA_PASS_TEAM_ID` | | |
| 181 | +| KA Agent | `ANTHROPIC_API_KEY` | | |
| 182 | +| Secrets SSO (un par client) | `KA_SSO_SECRET_LOU_KA`, `KA_SSO_SECRET_IMMO_KA`, `KA_SSO_SECRET_VRAI_PRIX`, `KA_SSO_SECRET_AUTO_KA`, `KA_SSO_SECRET_FABRI_KA`, `KA_SSO_SECRET_FOOD_KA`, `KA_SSO_SECRET_RESTO_KA`, `KA_SSO_SECRET_SORTI_KA`, `KA_SSO_SECRET_CREA_KA`, `KA_SSO_SECRET_TROUVE_KA`, `KA_SSO_SECRET_API_KA`, `KA_SSO_SECRET_JOB_KA`, `KA_SSO_SECRET_KA_IOS`, `KA_SSO_SECRET_KA_ANDROID`, `KA_SSO_SECRET_ORA_KA`, `KA_SSO_SECRET_TOIT_KA`, `KA_SSO_SECRET_VALOPLEX` | | |
| 183 | + | |
| 184 | +## Données & conformité | |
| 185 | + | |
| 186 | +- **Provenance** : les métriques affichées par le hub proviennent exclusivement des **endpoints publics `/api/stats`** (ou `/api/status` pour Trouve·Ka) des plateformes du groupe — aucune collecte externe. | |
| 187 | +- **Cadences** : métriques live rafraîchies aux **10 min** (cache serveur `live.ts`) ; disponibilité vérifiée aux **5 min** (tick PM2 → historique 90 jours) ; rapport quotidien généré chaque matin à **6 h**. | |
| 188 | +- **Données personnelles** : les comptes KA ID (courriel, profil, favoris) vivent dans une SQLite locale au nœud (`data/`, gitignorée) — mots de passe hachés scrypt, sessions JWT HttpOnly 30 jours. Aucun tiers. | |
| 189 | +- **Pages légales** publiées sur le site : [Conditions d'utilisation](https://www.groupe-ka.com/conditions), [Politique de confidentialité](https://www.groupe-ka.com/confidentialite), [Protection des renseignements personnels (Loi 25)](https://www.groupe-ka.com/loi-25), [Transparence des robots d'indexation](https://www.groupe-ka.com/bots), plus le **droit de retrait** (`/retrait`). | |
| 190 | + | |
| 113 | 191 | ## Documentation |
| 114 | 192 | |
| 115 | 193 | - **Guide en ligne** : [www.groupe-ka.com/doc/](https://www.groupe-ka.com/doc/) — à quoi sert le site, le parcours en 4 étapes (accueil → KA ID → /status → /stats), d'où viennent les données, FAQ. |
| 116 | 194 | - **Guide PDF** : [groupe-ka-documentation.pdf](https://www.groupe-ka.com/doc/groupe-ka-documentation.pdf) — la même documentation, téléchargeable. |
| 117 | 195 | - Les captures du guide sont versionnées dans `public/doc/img/` (etape1 → etape4). |
| 118 | 196 | |
| 197 | +## Historique | |
| 198 | + | |
| 199 | +Jalons tirés du `git log` du repo : | |
| 200 | + | |
| 201 | +- **2026-08-17** — naissance du hub écosystème : métriques live (`live.ts`, ISR 10 min), page `/status` v2 (ticks 5 min, historique 90 j), tableau de bord maître `/stats`, widget KA Agent câblé partout, Job·Ka rejoint l'écosystème (13 sites dans `ecosystem.json`). | |
| 202 | +- **2026-08-18** — page `/telecharger` (iOS TestFlight, APK Android signé + SHA-256, DMG macOS notarié) et client SSO `ka-android`. | |
| 203 | +- **2026-08-19** — `/stats` maître v2 (KPI + sparklines, croissance indice 100, kit kacharts/kapdf) + KA Agent v2 plein écran + campagne mobile (tokens.css, overlay menu). | |
| 204 | +- **2026-08-22** — SEO complet (canonical, JSON-LD Organization+WebSite, robots.txt, sitemap.xml) + KA Agent v3 (bulle déplaçable). | |
| 205 | +- **2026-08-23** — rapports quotidiens automatisés (rédaction Claude + PDF), onglet `/investisseurs` (6 documents corporatifs), `/recherche` propulsée par Trouve·Ka, pages `/agents` et `/marque`, jeton API personnel `kapi_`, stats v3 (ReportBuilder). | |
| 206 | +- **2026-08-24** — page documentation `/doc` (guide + captures + PDF téléchargeable) et refonte du README. | |
| 207 | + | |
| 119 | 208 | ## Développement (remote-first) |
| 120 | 209 | |
| 121 | 210 | **La source de vérité est le repo git sur le nœud M3U96b** (`~/apps/groupe-ka`) — on n'édite jamais les copies laptop. Toute modification se fait sur le nœud via SSH : édition, build, redémarrage, puis commit/push depuis le nœud. |
@@ -137,7 +226,7 @@ pm2 restart groupe-ka # après un changement en production | ||
| 137 | 226 | |
| 138 | 227 | - **Nœud** : M3U96b (Mac Studio, cluster MacLustr) — répertoire `~/apps/groupe-ka` |
| 139 | 228 | - **Port** : **8110** (local, exposé uniquement via le tunnel) |
| 140 | −- **Processus PM2** : `groupe-ka` (serveur Next.js) + `groupe-ka-ngrok` (tunnel) + `groupe-ka-status-tick` (ticks 5 min) + `groupe-ka-rapport-quotidien` (rapport) | |
| 229 | +- **Processus PM2** : `groupe-ka` (serveur Next.js) + `groupe-ka-ngrok` (tunnel) + `groupe-ka-status-tick` (ticks 5 min) + `groupe-ka-rapport-quotidien` (rapport 6 h) | |
| 141 | 230 | - **Domaine** : **https://www.groupe-ka.com** (tunnel ngrok) |
| 142 | 231 | |
| 143 | 232 | ## Écosystème Groupe KA |
@@ -155,7 +244,7 @@ pm2 restart groupe-ka # après un changement en production | ||
| 155 | 244 | | [sorti-ka.com](https://www.sorti-ka.com) | sorties et événements | |
| 156 | 245 | | [job-ka.com](https://www.job-ka.com) | emplois | |
| 157 | 246 | | [crea-ka.com](https://www.crea-ka.com) | créateurs de contenu | |
| 158 | −| [trouve-ka.com](https://www.trouve-ka.com) | petites annonces | | |
| 247 | +| [trouve-ka.com](https://www.trouve-ka.com) | petites annonces et moteur de recherche | | |
| 159 | 248 | | [api-ka.com](https://www.api-ka.com) | API de données | |
| 160 | 249 | |
| 161 | 250 | ## Contact |
| 162 | 251 | |