# Ka·Stats — l'explorateur de statistiques du Québec
**www.ka-stats.com** · Un service **Groupe KA**
Ka·Stats est l'**observatoire de données** de l'écosystème Groupe KA : un
serveur Node **zéro dépendance** qui agrège **en direct** les tableaux de bord
`GET /api/stats/dashboard` (contrat **ka-stats v2**) des **14 plateformes
publiques** du groupe — Lou·Ka, Immo·Ka, House·Ka, Vrai-Prix, Auto·Ka, Job·Ka,
Food·Ka, Resto·Ka, Fabri·Ka, Sorti·Ka, Créa·Ka, Trouve·Ka, Rent·Ka, API·Ka —
et les rend explorables dans une seule interface : graphiques interactifs,
indicateurs du Québec par thème, comparateur base 100, studio d'indicateurs
sur mesure et palmarès des records.
Au moment d'écrire ces lignes, l'observatoire suit **plus de 5,8 millions
d'éléments** (annonces, propriétés, produits, offres d'emploi, événements,
créateurs, pages indexées…), **434 graphiques** rendus depuis les dashboards
satellites et un catalogue de **248 métriques** combinables dans le Studio —
le tout mis à jour en continu, sans base de données propre.
**Identité visuelle** : accent **#095797** (le bleu officiel du Québec),
wordmark « Ka·Stats » dont le segment **« Stats » est posé en boîte inversée**
sur l'accent (le motif signature ka-ui), typographies Space Grotesk (titres) et
JetBrains Mono (chiffres), design system `tokens.css` de ka-ui vendorisé.
---
## Sommaire
- [Visite guidée](#visite-guidée)
- [Aperçu mobile & desktop](#aperçu-mobile--desktop)
- [Les 14 plateformes agrégées](#les-14-plateformes-agrégées)
- [Pages & fonctionnalités](#pages--fonctionnalités)
- [Le contrat ka-stats v2 et son rendu générique](#le-contrat-ka-stats-v2-et-son-rendu-générique)
- [QCharts — graphiques SVG maison](#qcharts--graphiques-svg-maison)
- [API](#api)
- [Architecture](#architecture)
- [Structure du dépôt](#structure-du-dépôt)
- [Exploitation & déploiement](#exploitation--déploiement)
- [Développement remote-first](#développement-remote-first)
- [Écosystème & contact](#écosystème--contact)
---
## Visite guidée
*Captures du 2026-08-28, prises sur le site en production
(www.ka-stats.com) — desktop 1440×900, mobile 390×844.*
### 1 · Vue d'ensemble — le pouls de l'écosystème

La page d'accueil (`/`) donne le pouls du Québec en un coup d'œil : total
d'éléments suivis, plateformes en direct, courbe de la somme quotidienne des
indicateurs principaux des 14 plateformes, grille des plateformes (chacune
avec son accent officiel, ses KPI et sa sparkline), prix du Québec en direct
et premiers records. Le sélecteur de période global (aujourd'hui → tout,
plus plage libre) est relayé à toutes les plateformes satellites. Le bouton
« ✦ Construire un indicateur sur mesure » mène directement au Studio.
### 2 · Indicateurs — les chiffres du Québec par thème

`/indicateurs` regroupe les chiffres du Québec par grand thème — habitation,
mobilité, emploi, consommation, culture, infrastructure : loyer moyen, prix
des propriétés, valeur foncière, prix des voitures usagées, salaires affichés,
prix d'épicerie… Chaque carte affiche la valeur en direct, son unité et son
delta (▲/▼ %) sur la période choisie, avec les graphiques associés en
deux colonnes sous chaque thème.
### 3 · Comparer — la croissance sur un seul axe

`/comparer` met jusqu'à **4 plateformes sur un seul axe** en **indice
base 100** (100 = début de période) : des univers aux unités hétérogènes
(annonces, produits, pages indexées…) deviennent directement comparables,
sans jamais recourir à une double échelle. Un mode « valeurs brutes » existe
mais affiche un avertissement — l'indice est la lecture recommandée.
### 4 · Studio — construisez votre indicateur sur mesure

`/studio` est le **constructeur d'indicateurs** : recherche floue parmi les
**248 métriques** du catalogue (14 plateformes), sélection de **jusqu'à
4 métriques**, **transformations** (valeurs brutes, indice 100, variation %
jour, moyenne mobile 7 j, cumul), **combinaisons** de 2 métriques (ratio
A ÷ B, écart A − B, somme A + B), choix du type de graphique (ligne, aire,
barres), titre personnalisé, **enregistrement local** de ses indicateurs et
**lien partageable** (`/studio?c=…`, la configuration complète encodée dans
l'URL). Chaque graphique du site propose d'ailleurs un bouton « Ouvrir dans
le Studio » pour repartir de n'importe quelle courbe.
### 5 · Palmarès — records et faits marquants

`/palmares` agrège les faits saillants détectés dans les données : jours
records de chaque plateforme, classement des **plus fortes croissances**
(variation de l'indicateur principal entre le début et la fin de la période)
et la grille de tous les records de l'écosystème.
### 6 · Fiche plateforme — le dashboard complet de Lou·Ka

`/site/:id` (ici `/site/lou-ka`) rend **génériquement et intégralement** le
contrat ka-stats v2 de la plateforme, aux couleurs de son accent officiel :
KPI + sparklines, jauges, séries temporelles (crosshair + infobulles +
comparaison à la période précédente), multi-courbes, aires empilées, anneaux,
histogrammes, répartitions géographiques, heatmaps calendrier et horaire,
tableaux triables/filtrables/paginés, records — et les liens vers les
**5 rapports PDF** générés par la plateforme elle-même.
### 7 · Fiche plateforme — Vrai-Prix, la valeur foncière en direct

`/site/vrai-prix` : même moteur de rendu, tout autre univers. Le dashboard de
Vrai-Prix (la valeur réelle de chaque propriété) s'affiche dans le rouge
signature de la plateforme — indicateurs fonciers, évolutions quotidiennes,
répartitions et records, avec le sélecteur de période et les exports CSV/PNG
sur chaque graphique. C'est la démonstration du contrat v2 : Ka·Stats ne
connaît pas Vrai-Prix en particulier, il rend ce que son dashboard déclare.
### 8 · Fiche plateforme — Trouve·Ka, le moteur de recherche québécois

`/site/trouve-ka` : le tableau de bord d'une plateforme d'infrastructure de
recherche — pages indexées, domaines couverts, activité d'indexation — rendu
en bleu Trouve·Ka. Les unités changent (pages, domaines), la mécanique reste
la même : KPI + sparklines, séries interactives, tableaux triables et records.
### 9 · Le pouls de l'écosystème — la somme quotidienne

La section « pouls » de l'accueil trace la **somme quotidienne des
indicateurs principaux des 14 plateformes** (annonces + produits + offres +
événements + créateurs + pages…) : une seule courbe qui raconte la croissance
de tout l'écosystème, avec crosshair, infobulle, zoom par sélection et vue
tableau jumelle — plus de 5,8 M d'éléments au dernier point.
### 10 · Mobile — l'observatoire dans la poche

La vue d'ensemble en 390 px : la SPA est entièrement responsive (socle mobile
ka-ui — zones sûres, cibles tactiles, panneau de navigation plein écran), les
graphiques SVG se recomposent à la largeur du téléphone et le sélecteur de
période reste accessible en tête de page.
---
## Aperçu mobile & desktop
*Captures du 2026-08-25 (mobile 390×844 · desktop 1440×900).*
### Mobile
 Vue d'ensemble — l'observatoire de données |
 Indicateurs — les chiffres du Québec par thème |
 Nav v2 — panneau plein écran |
### Desktop
 Vue d'ensemble — période ajustable (jour → tout) |
 Indicateurs — prix, salaires, loyers, volumes des plateformes KA |
 Comparer — métriques croisées entre plateformes |
 Palmarès — records et faits marquants détectés |
 Studio — construisez votre indicateur : 248 métriques, 14 plateformes, transformations (indice 100, variation, moyenne mobile, cumul), partage par lien |
---
## Les 14 plateformes agrégées
Chaque plateforme expose `GET /api/stats/dashboard` (contrat ka-stats v2) ;
Ka·Stats les interroge en parallèle avec la période demandée. Les accents
proviennent de l'`ecosystem.json` de ka-ui.
| Plateforme | Domaine | Thème | Mission |
|---|---|---|---|
| Lou·Ka | www.lou-ka.com | habitation | Tous les logements à louer |
| Immo·Ka | www.immo-ka.com | habitation | Toutes les propriétés à vendre |
| House·Ka | www.house-ka.com | habitation | Maisons à vendre — Canada hors Québec (EN) |
| Vrai-Prix | www.vrai-prix.com | habitation | La valeur réelle de chaque propriété |
| Rent·Ka | www.rent-ka.com | habitation | Locations résidentielles — Canada hors Québec |
| Auto·Ka | www.auto-ka.com | mobilité | Les voitures usagées du Québec |
| Job·Ka | www.job-ka.com | emploi | Tous les emplois des employeurs québécois |
| Food·Ka | www.food-ka.com | consommation | Les prix d'épicerie, suivis à la source |
| Resto·Ka | www.resto-ka.com | consommation | Chaque resto, chaque plat, chaque prix |
| Fabri·Ka | www.fabri-ka.com | consommation | Les produits fabriqués au Québec |
| Sorti·Ka | www.sorti-ka.com | culture | Toutes les sorties, dans les 17 régions |
| Créa·Ka | www.crea-ka.com | culture | Les créateurs d'ici, tous leurs liens |
| Trouve·Ka | www.trouve-ka.com | culture | Le moteur de recherche du web québécois |
| API·Ka | www.api-ka.com | infrastructure | La donnée de l'écosystème, par API |
---
## Pages & fonctionnalités
| Route | Page | Contenu |
|---|---|---|
| `/` | Vue d'ensemble | Pouls de l'écosystème (somme quotidienne des indicateurs principaux), grille des 14 plateformes (accents officiels, KPI, sparklines), prix du Québec en direct, records, CTA vers le Studio |
| `/site/:id` | Fiche plateforme | Rendu générique complet du dashboard v2 de la plateforme + liens vers ses 5 rapports PDF (`/api/stats/report?mode=…` sur le domaine satellite) |
| `/indicateurs` | Indicateurs | Les chiffres du Québec par thème (habitation, mobilité, emploi, consommation, culture, infrastructure) avec deltas ▲/▼ % |
| `/comparer` | Comparateur | Jusqu'à 4 plateformes sur un seul axe, indice base 100 (mode brut disponible mais déconseillé — avertissement affiché) |
| `/studio` | Studio | Constructeur d'indicateurs : 248 métriques, transformations, combinaisons, types de graphique, sauvegarde locale, liens partageables |
| `/palmares` | Palmarès | Jours records, classement de croissance, grille des faits marquants |
Fonctions transversales :
- **Sélecteur de période global** — `auj / 7j / 30j / 3m / 6m / 12m / annee /
tout` + plage libre `from/to` (AAAA-MM-JJ), relayé tel quel aux satellites,
persistant à travers les pages.
- **Routeur History API** — SPA vanilla sans framework ; navigation interne
interceptée (`a[data-link]`), scroll remis à zéro à chaque page.
- **Exports** — chaque graphique offre **CSV** (données exactes) et **PNG**
(rendu du SVG), plus « Ouvrir dans le Studio » pour les séries temporelles.
- **Footer d'écosystème** — avis d'agrégateur (« nous ne vendons rien, ne
louons rien »), liens vers toutes les plateformes et Groupe-KA.com.
- **Analytics maison** — beacon `ka-a.js` d'administration-ka.com
(`__kaSite = "ka-stats"`), trafic humain seulement.
---
## Le contrat ka-stats v2 et son rendu générique
La fiche `/site/:id` ne connaît **aucune plateforme en particulier** : elle
rend ce que le dashboard v2 déclare, bloc par bloc. Types de blocs pris en
charge :
| Bloc v2 | Rendu Ka·Stats |
|---|---|
| `kpis[]` | Cartes KPI (valeur, unité, delta %) + **sparkline** si fournie |
| `gauges[]` | **Jauges** (arc SVG) |
| `series[]` | Séries temporelles — ligne/aire/barres commutables, courbe fantôme « période précédente » en tireté si `compare` est fourni |
| `multiseries[]` | **Multi-courbes** (≤ 4 sous-séries, motifs de trait distincts pour l'accessibilité) |
| `stacked[]` | Aires/barres **empilées** |
| `breakdowns[]` | Répartitions — **barres horizontales ↔ anneau** commutables |
| `histograms[]` | **Histogrammes** de distribution |
| `geo[]` | Répartitions **géographiques** (barres par région) |
| `heatmap_calendar` / `heatmap_hours` | **Heatmaps** calendrier (jour × semaine) et horaire (heure × jour) |
| `tables[]` | Tableaux **triables, filtrables, paginés** |
| `records[]` | Cartes de records / faits marquants |
L'enveloppe `{success, data}` propre à API·Ka est **dépliée automatiquement**
côté serveur — le front ne voit qu'un seul format.
---
## QCharts — graphiques SVG maison
`public/charts.js` (~1 000 lignes) : bibliothèque de graphiques **SVG
vanilla**, zéro dépendance, conforme au design system ka-ui et aux règles
dataviz du groupe :
- marques fines (traits 2 px), grilles *hairline*, texte toujours en encre,
palette catégorielle validée en ordre fixe (`Q.CAT`), rampes mono-teinte,
motifs de trait (`Q.DASHES`) pour distinguer les séries sans dépendre de la
couleur seule ;
- **crosshair + infobulle toutes-séries** sur les lignes, infobulle par-marque
sur barres et cellules ;
- **zoom par sélection horizontale** (glisser sur le graphique), bandeau de
zoom avec bouton « Réinitialiser », **double-clic = réinitialiser** ;
- **légende cliquable** dès 2 séries pour masquer/afficher chaque série ;
- **vue tableau jumelle sur chaque graphique** (l'infobulle ne « garde »
jamais une valeur : les données exactes sont toujours à un clic) ;
- exports **CSV** et **PNG** intégrés à la coquille de carte (`switchableChart`),
types commutables (ligne ↔ aire ↔ barres, barres ↔ anneau) ;
- primitives : `sparkline`, `lineChart`, `vBarChart`, `hBarChart`, `donut`,
`stackedBar`, `gauge`, `calendarHeatmap`, `hourHeatmap`.
---
## API
Toutes les routes acceptent `?period=` (`auj|7j|30j|3m|6m|12m|annee|tout`,
défaut `30j`) et, pour une plage libre, `?from=AAAA-MM-JJ&to=AAAA-MM-JJ`.
| Route | Rôle |
|---|---|
| `GET /healthz` (alias `/api/health`) | Healthcheck : `{ok, app, sites, uptime}` |
| `GET /api/sites` | Les 14 plateformes (id, wordmark, domaine, accents, tagline, thème) |
| `GET /api/overview` | Agrégat global : totaux (éléments, plateformes en vie, graphiques), pouls quotidien, KPI et records par plateforme |
| `GET /api/dashboard/:id` | Dashboard v2 complet d'une plateforme (proxy avec cache ; `stale: true` si copie de secours) |
| `GET /api/catalog` | Catalogue des métriques combinables du Studio (248 refs : `site\|kpi\|id`, `site\|series\|id`, `site\|multi\|id\|i`, `site\|stacked\|id\|i`) |
| `GET /api/metric?refs=a,b,…` | Points normalisés de 1 à 4 métriques (label, unité, série `{t,v}`) — le moteur du Studio |
Exemple :
```bash
curl -s "https://www.ka-stats.com/api/overview?period=30j" | jq .totals
curl -s "https://www.ka-stats.com/api/metric?refs=lou-ka|kpi|active,food-ka|series|avg_price&period=12m"
```
---
## Architecture
```
navigateur ── SPA vanilla (app.js + charts.js + tokens.css)
│
server.mjs (Node ≥ 18, zéro dépendance, ~400 lignes)
│ statique + SSR des metas SEO + API agrégatrice
├── cache mémoire par (site, période) — TTL 10 min
├── cache disque data/cache.json (périodes standard seulement)
└── fan-out HTTPS parallèle vers les 14 satellites
https:///api/stats/dashboard?period=…
```
- **Zéro dépendance** : `node:http`, `node:fs`, `node:path` — pas de
`node_modules`, pas de build, pas de base de données.
- **Cache 10 min + *stale-while-error*** : chaque couple (site, période) est
mis en cache 10 minutes (mémoire + disque). Si un satellite est injoignable,
Ka·Stats sert **la dernière bonne copie** (marquée `stale: true`) au lieu
d'échouer ; les requêtes concurrentes vers un même satellite sont
dédupliquées (map *inflight*). Les plages libres (`from/to`) ne sont jamais
persistées sur disque (cardinalité illimitée).
- **SEO** : SSR léger des metas — title/description/canonical/OpenGraph +
**JSON-LD** (schema.org) injectés par route dans `index.html` (la SPA rend
le contenu, le serveur rend les metas — même approche que les autres sites
Ka). `sitemap.xml` et `robots.txt` servis statiquement. Routes `/site/:id`
titrées dynamiquement d'après la plateforme.
- **Sécurité/robustesse** : id de plateforme assaini (`[^a-z0-9-]` retiré),
périodes validées par liste blanche, dates par regex stricte ; en-têtes
`Cache-Control` différenciés (HTML `no-cache`, assets 1 h).
---
## Structure du dépôt
```
ka-stats/
├── server.mjs # serveur Node zéro-dép : statique + API + SEO SSR
├── package.json # aucune dépendance — script start seulement
├── public/
│ ├── index.html # coquille SPA (metas remplacées par le serveur)
│ ├── app.js # SPA vanilla : routeur, 6 pages, Studio, header/footer
│ ├── charts.js # QCharts — graphiques SVG maison (voir plus haut)
│ ├── styles.css # styles Ka·Stats (sur les tokens ka-ui)
│ ├── tokens.css # design system ka-ui vendorisé + accent #095797
│ ├── fonts/ # Space Grotesk + JetBrains Mono (auto-hébergées)
│ ├── favicon.svg · og.png · apple-touch-icon.png
│ └── sitemap.xml · robots.txt
├── data/
│ └── cache.json # cache disque (généré — ignoré par git)
└── docs/
└── screenshots/ # visite guidée (JPG) + mobile/ + desktop/ (webp)
```
---
## Exploitation & déploiement
```bash
node server.mjs 8140 # défaut 8140 — healthcheck : /healthz
```
- **Production** : nœud **M1M32** du cluster MacLustr, `~/apps/ka-stats`,
port **8140**, sous **PM2** (`ka-stats` pour le serveur, `ka-stats-ngrok`
pour le tunnel) → **https://www.ka-stats.com**.
- PM2 est configuré en service de démarrage (launchd) : l'app survit aux
redémarrages du nœud.
- Registre des déploiements du cluster :
`~/Desktop/cluster-skill/cluster-deployments.json`.
- Aucune clé, aucun secret : Ka·Stats ne consomme que les endpoints publics
des plateformes.
---
## Développement remote-first
La **source de vérité est le repo git sur le nœud de déploiement**
(M1M32 `~/apps/ka-stats`), pas une copie locale. Le remote `origin` est
**spbgit**, le serveur git personnel du groupe (bare repo
`srv/git/ka-stats.git` sur M3U96a, alias SSH `gitsrv`) — pas GitHub.
Cycle type : éditer sur le nœud via SSH → tester (`curl localhost:8140/healthz`)
→ `pm2 restart ka-stats` → `git add/commit/push origin main` **sur le nœud**
(agent forwarding actif). Référence complète du flux remote-first :
`~/Desktop/cluster-skill/KA-REMOTE-DEV.md`.
---
## Écosystème & contact
Ka·Stats est l'observatoire transversal du **Groupe KA**, l'écosystème de
plateformes de données du Québec (et, pour House·Ka et Rent·Ka, du Canada
hors Québec). **Avis** : Groupe KA est un agrégateur de contenu — nous ne
vendons rien, ne louons rien et ne sommes partie à aucune transaction ; les
statistiques reflètent les données collectées par nos plateformes.
- Hub : **https://www.groupe-ka.com**
- Données par API : **https://www.api-ka.com**
- Auteur : Simon-Pierre Boucher · contact@spboucher.ai
© Groupe KA. Tous droits réservés.