SPB Git forge

spb/groupe-ka

Public

Groupe KA — site du holding + KA ID (compte unique & SSO des 7 plateformes). Next.js 16, SQLite, Google & Apple login.

81commits 1branches 0releases
89.2 MBsize
maindefault branch
22 days agolast push
TypeScript 70.4% HTML 18.4% JavaScript 4% Python 3.8% CSS 3.4%

docs: README v3 — chiffres live vérifiés, pastilles dynamiques, sections complètes

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

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