# 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 ![Vue d'ensemble](docs/screenshots/01-accueil.jpg) 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](docs/screenshots/02-indicateurs.jpg) `/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](docs/screenshots/03-comparer.jpg) `/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](docs/screenshots/04-studio.jpg) `/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 ![Palmarès](docs/screenshots/05-palmares.jpg) `/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 ![Fiche Lou·Ka](docs/screenshots/06-site-lou-ka.jpg) `/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 ![Fiche Vrai-Prix](docs/screenshots/07-site-vrai-prix.jpg) `/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 ![Fiche Trouve·Ka](docs/screenshots/08-site-trouve-ka.jpg) `/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 ![Pouls de l'écosystème](docs/screenshots/09-accueil-pouls.jpg) 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 ![Accueil mobile](docs/screenshots/10-accueil-mobile.jpg) 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 mobile
Vue d'ensemble — l'observatoire de données
Indicateurs mobile
Indicateurs — les chiffres du Québec par thème
Menu mobile
Nav v2 — panneau plein écran
### Desktop
Vue d'ensemble
Vue d'ensemble — période ajustable (jour → tout)
Indicateurs
Indicateurs — prix, salaires, loyers, volumes des plateformes KA
Comparer
Comparer — métriques croisées entre plateformes
Palmarès
Palmarès — records et faits marquants détectés
Studio
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.