SPB Git forge

spb/ka-stats

Public
8commits 1branches 0releases
2.2 MBsize
maindefault branch
26 days agolast push
JavaScript 73.4% CSS 25.3% HTML 1.3%
ZIP tar.gz
NameLast commitUpdated
docs docs: visite guidée complétée à 10 captures distinctes 26 days ago
public Ajoute Rent·Ka (locations Canada hors Québec) — 13e plateforme de... 27 days ago
.gitignore Import initial ka-stats + Nav mobile v2 (panneau plein écran fixed) 1 mo ago
package.json Import initial ka-stats + Nav mobile v2 (panneau plein écran fixed) 1 mo ago
README.md docs: visite guidée complétée à 10 captures distinctes 26 days ago
server.mjs feat(house-ka): House-Ka dans l observatoire Ka-Stats (dashboard... 27 days ago
README.md source

# 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

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

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

/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

/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

/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

/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

/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

/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

/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

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

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 globalauj / 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

text
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://<plateforme>/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

text
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-statsgit 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.

© Groupe KA. Tous droits réservés.