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%

fix(accueil): intégrer House·Ka et Rent·Ka partout sur la page d accueil

- Compteurs à jour : « treize plateformes » (héros, CTA, kicker, équation
  ·Ka, sablier SVG, signes vitaux), « quatorze » au socle (avec Trouve·Ka)
- Rent·Ka ajouté aux totaux globaux (connecteurs + fiches) de live.ts —
  House·Ka y était déjà, Rent·Ka avait été oublié
- Inventaire vivant + flotte de connecteurs : barres/points House·Ka et
  Rent·Ka avec métriques live
- Santé des syncs : lignes House·Ka et Rent·Ka
- Définition ·Ka du héros et lead de l index : mention du Canada
- Métadonnées SEO/OG (layout) : Rent·Ka listé, compte corrigé

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Simon-Pierre Boucher committed 1 mo ago (Aug 28, 2026) parent 527ceef

4 changed files +27 −17

modified src/app/figures.tsx +3 −3
@@ -96,7 +96,7 @@ export function AggregationFigure() {
96 96 <svg
97 97 viewBox={`0 0 ${W} ${H}`}
98 98 role="img"
99 − aria-label="Schéma de l'agrégation KA : des centaines de sites sources sont lus par des connecteurs, la donnée converge vers KA qui la redistribue vers les dix plateformes."
99 + aria-label="Schéma de l'agrégation KA : des centaines de sites sources sont lus par des connecteurs, la donnée converge vers KA qui la redistribue vers les treize plateformes."
100 100 className="block min-w-[760px]"
101 101 >
102 102 <defs>
@@ -329,14 +329,14 @@ export function AggregationFigure() {
329 329 letterSpacing="1.5"
330 330 fill="#8b928c"
331 331 >
332 − DIX PLATEFORMES
332 + TREIZE PLATEFORMES
333 333 </text>
334 334 </svg>
335 335 </div>
336 336 <FigCaption lead="LE SABLIER ·KA">
337 337 des centaines de sites éparpillés, lus à la source par des connecteurs
338 338 dédiés ; tout converge vers KA, qui normalise, dédoublonne et
339 − redistribue vers dix plateformes. Une flèche entre, dix flèches
339 + redistribue vers treize plateformes. Une flèche entre, treize flèches
340 340 sortent : c&apos;est ça, agréger.
341 341 </FigCaption>
342 342 </figure>
modified src/app/layout.tsx +2 −2
@@ -26,11 +26,11 @@ export const metadata: Metadata = {
26 26 canonical: "./",
27 27 },
28 28 description:
29 − "Groupe KA est un holding québécois d’agrégateurs de produits et services entièrement automatisés : Trouve·Ka (le moteur de recherche de l’écosystème), Lou·Ka (location), Immo·Ka (propriétés à vendre), House·Ka (maisons à vendre — Canada hors Québec), Vrai-Prix (valeur résidentielle), ValoPlex (plex), Auto·Ka (voitures usagées), Fabri·Ka (produits québécois), Food·Ka (épicerie), Resto·Ka (restaurants, menus et prix), Sorti·Ka (sorties et événements) Créa·Ka (créateurs d’ici) et Job·Ka (emplois). Zéro saisie manuelle.",
29 + "Groupe KA est un holding québécois d’agrégateurs de produits et services entièrement automatisés : Trouve·Ka (le moteur de recherche de l’écosystème), Lou·Ka (location), Rent·Ka (location — Canada hors Québec), Immo·Ka (propriétés à vendre), House·Ka (maisons à vendre — Canada hors Québec), Vrai-Prix (valeur résidentielle), ValoPlex (plex), Auto·Ka (voitures usagées), Fabri·Ka (produits québécois), Food·Ka (épicerie), Resto·Ka (restaurants, menus et prix), Sorti·Ka (sorties et événements) Créa·Ka (créateurs d’ici) et Job·Ka (emplois). Zéro saisie manuelle.",
30 30 openGraph: {
31 31 title: "Groupe KA — holding d’agrégateurs automatisés, sans boîte noire",
32 32 description:
33 − "Ka, c’est l’agrégation : des centaines de connecteurs, dix plateformes — Lou·Ka, Immo·Ka, House·Ka, Vrai-Prix, ValoPlex, Auto·Ka, Fabri·Ka, Food·Ka, Resto·Ka, Sorti·Ka, Créa·Ka et Job·Ka.",
33 + "Ka, c’est l’agrégation : des centaines de connecteurs, treize plateformes — Lou·Ka, Rent·Ka, Immo·Ka, House·Ka, Vrai-Prix, ValoPlex, Auto·Ka, Fabri·Ka, Food·Ka, Resto·Ka, Sorti·Ka, Créa·Ka et Job·Ka.",
34 34 url: "./",
35 35 siteName: "Groupe KA",
36 36 locale: "fr_CA",
modified src/app/page.tsx +20 −12
@@ -610,7 +610,8 @@ function KaDefinition() {
610 610 <span>
611 611 Marque de fabrique du groupe : Lou·Ka loge, Immo·Ka vend, Auto·Ka
612 612 roule, Fabri·Ka fabrique, Food·Ka nourrit, Resto·Ka régale,
613 − Sorti·Ka divertit, Créa·Ka rassemble.
613 + Sorti·Ka divertit, Créa·Ka rassemble, Job·Ka embauche — et
614 + House·Ka et Rent·Ka portent le geste au reste du Canada.
614 615 </span>
615 616 </li>
616 617 </ol>
@@ -630,7 +631,7 @@ function VitalsBand({ m }: { m: LiveMetrics }) {
630 631 const vitals: { v: string; l: string }[] = [
631 632 { v: fmtPlus(m.totals.items), l: "fiches en ligne, comptées à l'instant" },
632 633 { v: `${fmtInt(m.totals.connectors)}+`, l: "connecteurs sources actifs" },
633 − { v: "10", l: "agrégateurs + 1 moteur de recherche" },
634 + { v: "13", l: "plateformes + 1 moteur de recherche" },
634 635 { v: fmtPlus(m.trouveka.pages), l: "pages indexées par Trouve·Ka" },
635 636 { v: fmtInt(m.vraiprix.units), l: "propriétés évaluées au Québec" },
636 637 { v: "22 M+", l: "observations immobilières" },
@@ -800,7 +801,9 @@ function ProductRow({ p }: { p: Product }) {
800 801 function SyncHealth({ m }: { m: LiveMetrics }) {
801 802 const rows = [
802 803 { name: "Lou·Ka", syncs: m.louka.syncs },
804 + { name: "Rent·Ka", syncs: m.rentka.syncs },
803 805 { name: "Immo·Ka", syncs: m.immoka.syncs },
806 + { name: "House·Ka", syncs: m.houseka.syncs },
804 807 { name: "Auto·Ka", syncs: m.autoka.syncs },
805 808 { name: "Fabri·Ka", syncs: m.fabrika.syncs },
806 809 { name: "Food·Ka", syncs: m.foodka.syncs },
@@ -942,15 +945,15 @@ export default async function Home() {
942 945 normalisent la donnée et se resynchronisent seuls, jour et nuit.
943 946 Se loger, acheter, évaluer, rouler, consommer local, faire
944 947 l&apos;épicerie, manger au resto, sortir, suivre les créateurs
945 − d&apos;ici, chercher — dix agrégateurs et un moteur de recherche,
946 − zéro saisie manuelle.
948 + d&apos;ici, chercher — du Québec au reste du Canada, treize
949 + plateformes et un moteur de recherche, zéro saisie manuelle.
947 950 </p>
948 951 <div className="rise mt-8 flex flex-wrap items-center gap-x-7 gap-y-4 [animation-delay:0.24s]">
949 952 <a href="#flux" className="btn btn-primary">
950 953 Voir comment KA agrège ↓
951 954 </a>
952 955 <a href="#produits" className="cta-link">
953 − Les onze plateformes
956 + Les treize plateformes
954 957 </a>
955 958 </div>
956 959 </div>
@@ -1144,8 +1147,10 @@ export default async function Home() {
1144 1147 <InventoryBars
1145 1148 data={[
1146 1149 { name: "Fabri·Ka", value: m.fabrika.products, unit: "produits québécois" },
1150 + { name: "House·Ka", value: m.houseka.total, unit: "propriétés — Canada" },
1147 1151 { name: "Resto·Ka", value: m.restoka.items, unit: "plats & prix réels" },
1148 1152 { name: "Immo·Ka", value: m.immoka.total, unit: "propriétés à vendre" },
1153 + { name: "Rent·Ka", value: m.rentka.total, unit: "logements — Canada" },
1149 1154 { name: "Food·Ka", value: m.foodka.total, unit: "prix d'épicerie" },
1150 1155 { name: "Auto·Ka", value: m.autoka.total, unit: "véhicules d'occasion" },
1151 1156 { name: "Sorti·Ka", value: m.sortika.active, unit: "événements & sorties" },
@@ -1157,9 +1162,11 @@ export default async function Home() {
1157 1162 <ConnectorMatrix
1158 1163 data={[
1159 1164 { name: "Lou·Ka", count: m.louka.sources, kind: "gestionnaires & portails" },
1165 + { name: "Rent·Ka", count: m.rentka.sources, kind: "gestionnaires — Canada" },
1160 1166 { name: "Auto·Ka", count: m.autoka.sources, kind: "concessionnaires" },
1161 1167 { name: "Food·Ka", count: m.foodka.sources, kind: "bannières" },
1162 1168 { name: "Immo·Ka", count: m.immoka.sources, kind: "agences" },
1169 + { name: "House·Ka", count: m.houseka.sources, kind: "réseaux & courtiers — Canada" },
1163 1170 { name: "Resto·Ka", count: m.restoka.chains, kind: "chaînes de restos" },
1164 1171 { name: "Job·Ka", count: m.jobka.employers, kind: "employeurs (pages carrières)" },
1165 1172 { name: "Sorti·Ka", count: SORTIKA_CONNECTORS, kind: "billetteries & données ouvertes" },
@@ -1194,7 +1201,7 @@ export default async function Home() {
1194 1201 <span className="text-lime">
1195 1202 → {fmtInt(m.totals.connectors)}+ connecteurs
1196 1203 </span>
1197 − <br />→ 10 plateformes
1204 + <br />→ 13 plateformes
1198 1205 </p>
1199 1206 <p className="mt-4 max-w-md text-[13.5px] leading-relaxed text-[rgba(245,243,238,0.7)]">
1200 1207 La donnée entre éparpillée, elle ressort rangée. Entre les
@@ -1238,7 +1245,7 @@ export default async function Home() {
1238 1245 <Section
1239 1246 id="produits"
1240 1247 index="04"
1241 − kicker="Onze plateformes · un écosystème"
1248 + kicker="Treize plateformes · un écosystème"
1242 1249 title={
1243 1250 <>
1244 1251 Ce que nous <span className="hl">agrégeons</span>
@@ -1246,10 +1253,11 @@ export default async function Home() {
1246 1253 }
1247 1254 lead={
1248 1255 <>
1249 − Chaque agrégateur attaque un angle mort du quotidien québécois : se
1250 − loger, acheter, évaluer, rouler, consommer local, faire
1251 − l&apos;épicerie, manger au resto, sortir, suivre les créateurs
1252 − d&apos;ici. Aucune saisie manuelle — les plateformes se
1256 + Chaque agrégateur attaque un angle mort du quotidien : se loger,
1257 + acheter, évaluer, rouler, consommer local, faire l&apos;épicerie,
1258 + manger au resto, sortir, suivre les créateurs d&apos;ici — au
1259 + Québec d&apos;abord, et jusqu&apos;au reste du Canada avec House·Ka
1260 + et Rent·Ka. Aucune saisie manuelle — les plateformes se
1253 1261 maintiennent elles-mêmes, annonce par annonce, prix par prix.
1254 1262 </>
1255 1263 }
@@ -1272,7 +1280,7 @@ export default async function Home() {
1272 1280 title="Le socle commun"
1273 1281 lead={
1274 1282 <>
1275 − Les onze plateformes partagent la même colonne vertébrale : données
1283 + Les quatorze plateformes partagent la même colonne vertébrale : données
1276 1284 publiques et annonces lues directement à la source, connecteurs
1277 1285 dédiés synchronisés en continu, moteurs statistiques validés, et
1278 1286 une identité visuelle unique — bordures encre, lime électrique,
modified src/lib/live.ts +2 −0
@@ -354,6 +354,7 @@ export async function getLiveMetrics(): Promise<LiveMetrics> {
354 354
355 355 m.totals.connectors =
356 356 m.louka.sources +
357 + m.rentka.sources +
357 358 m.immoka.sources +
358 359 m.houseka.sources +
359 360 m.autoka.sources +
@@ -363,6 +364,7 @@ export async function getLiveMetrics(): Promise<LiveMetrics> {
363 364 SORTIKA_CONNECTORS;
364 365 m.totals.items =
365 366 m.louka.total +
367 + m.rentka.total +
366 368 m.immoka.total +
367 369 m.houseka.total +
368 370 m.autoka.total +
369 371