SPB Git

spb/groupe-ka Public

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

TypeScript 93.9% CSS 6%

feat: ajout de Ka4 — la section Ka2 devient « les bots de découverte »

Section #bots avec les deux agents (Ka2 et Ka4) en cartes jumelles +
carte encre commune sur leur rôle dans l'écosystème; nav, ticker et
footer mis à jour.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Simon-Pierre Boucher committed 59 min ago (Aug 13, 2026) parent 62bfdb2

Showing 2 changed files with +142 and −91

modified src/app/layout.tsx +3 −2
@@ -35,7 +35,7 @@ const NAV_ITEMS = [
35 35 { href: "/#chiffres", label: "Chiffres" },
36 36 { href: "/#produits", label: "Plateformes" },
37 37 { href: "/#socle", label: "Le socle" },
38 { href: "/#ka2", label: "Ka2, le bot" },
38 + { href: "/#bots", label: "Les bots" },
39 39 { href: "/#mission", label: "Mission" },
40 40 { href: "/#contact", label: "Contact" },
41 41 ];
@@ -51,7 +51,7 @@ const TICKER_ITEMS = [
51 51 "23 700+ prix d'épicerie suivis chez 20 bannières",
52 52 "3 747 008 propriétés évaluées au Québec",
53 53 "393 867 plex · 1 733 744 portes",
54 "Ka2 cartographie le web québécois — www.ka2.bot",
54 + "Ka2 & Ka4 cartographient le web québécois — ka2.bot · ka4.bot",
55 55 "Zéro boîte noire — tout est automatisé, rien n'est inventé",
56 56 ];
57 57
@@ -211,6 +211,7 @@ export default function RootLayout({
211 211 ["Fabri·Ka", "https://www.fabri-ka.com"],
212 212 ["Food·Ka", "https://www.food-ka.com"],
213 213 ["Ka2", "https://www.ka2.bot"],
214 + ["Ka4", "https://www.ka4.bot"],
214 215 ].map(([label, href]) => (
215 216 <li key={label}>
216 217 <a
modified src/app/page.tsx +139 −89
@@ -159,6 +159,55 @@ const PRODUCTS: Product[] = [
159 159 },
160 160 ];
161 161
162 +type Bot = {
163 + digit: string;
164 + accent: string;
165 + inkbox: string;
166 + domain: string;
167 + url: string;
168 + tagline: string;
169 + description: string;
170 + chips: string[];
171 + features: string[];
172 +};
173 +
174 +const BOTS: Bot[] = [
175 + {
176 + digit: "2",
177 + accent: "#d9f26b",
178 + inkbox: "#141814",
179 + domain: "www.ka2.bot",
180 + url: "https://www.ka2.bot",
181 + tagline: "Le web québécois, cartographié entité par entité.",
182 + description:
183 + "Ka2 est un bot IA de cartographie : il parcourt le web québécois, identifie les entités — entreprises, organisations, personnes, sites web — et les documente. Propulsé par Claude Haiku 4.5 avec Firecrawl et Scrapfly, il ne copie pas les pages : il les comprend, puis les classe.",
184 + chips: ["4 types d'entités", "Propulsé par IA", "robots.txt respecté"],
185 + features: [
186 + "Découverte et classement : entreprises, organisations, personnes, sites web",
187 + "Chaque page lue est comprise par un modèle d'IA, pas seulement copiée",
188 + "Budget quotidien et délais entre requêtes — un crawl qui ménage les sites",
189 + "Données publiques seulement, Loi 25 et LPRPDE comme plancher",
190 + ],
191 + },
192 + {
193 + digit: "4",
194 + accent: "#ff9f45",
195 + inkbox: "#141814",
196 + domain: "www.ka4.bot",
197 + url: "https://www.ka4.bot",
198 + tagline: "Le deuxième éclaireur, avec l'activité à découvert.",
199 + description:
200 + "Ka4 double la flotte de découverte : même moteur IA — Claude Haiku 4.5 avec Firecrawl et Scrapfly —, mais une classification élargie à cinq types d'entités et un tableau de bord où l'exploration se regarde en direct. Deux bots, deux fronts, une seule carte du web québécois.",
201 + chips: ["5 types d'entités", "Activité en direct", "robots.txt respecté"],
202 + features: [
203 + "Classification élargie : entreprises, organisations, personnes, sites web, données",
204 + "Tableau de bord public : l'activité du bot et ses découvertes, en direct",
205 + "Bascule automatique entre backends de lecture (Firecrawl → Scrapfly)",
206 + "Données publiques seulement, Loi 25 et LPRPDE comme plancher",
207 + ],
208 + },
209 +];
210 +
162 211 const MANIFESTO = [
163 212 {
164 213 num: "01",
@@ -515,109 +564,110 @@ export default function Home() {
515 564 </div>
516 565 </Section>
517 566
518 {/* ---------- Ka2 — l'agent de découverte ---------- */}
567 + {/* ---------- Ka2 & Ka4 — les agents de découverte ---------- */}
519 568 <Section
520 id="ka2"
521 kicker="L'éclaireur du groupe · découverte web"
569 + id="bots"
570 + kicker="Les éclaireurs du groupe · découverte web"
522 571 title={
523 572 <>
524 Avant d&apos;agréger, <span className="hl">Ka2 découvre</span>
573 + Avant d&apos;agréger, <span className="hl">les bots découvrent</span>
525 574 </>
526 575 }
527 576 >
528 577 <p className="mt-3 max-w-xl text-[14.5px] text-ink-2">
529 578 Les connecteurs ·Ka lisent des sources connues. Mais qui trouve les
530 sources ? Ka2, l&apos;agent de découverte web du groupe : un bot IA
531 qui explore et cartographie le web québécois, entité par entité, pour
532 alimenter tout l&apos;écosystème.
579 + sources ? Ka2 et Ka4, les agents de découverte web du groupe : des
580 + bots IA qui explorent et cartographient le web québécois, entité par
581 + entité, pour alimenter tout l&apos;écosystème.
533 582 </p>
534 <div className="mt-7 grid items-stretch gap-6 lg:grid-cols-[minmax(0,1.15fr)_minmax(0,1fr)]">
535 <article className="gk-card gk-card-hover p-5 sm:p-7">
536 <div className="flex flex-wrap items-baseline justify-between gap-3">
537 <span className="gk-mono text-[12px] font-bold text-green">
538 BOT
539 </span>
540 <span className="klabel">www.ka2.bot</span>
541 </div>
542 <h3 className="gk-display mt-4 inline-flex items-baseline gap-[5px] text-[32px] font-bold tracking-[-0.04em] sm:text-[38px]">
543 Ka
544 <span
545 className="inline-block -rotate-2 rounded-md px-[8px] pb-[3px]"
546 style={{ background: "#141814", color: "#d9f26b" }}
583 + <div className="mt-7 grid gap-5 lg:grid-cols-2">
584 + {BOTS.map((b) => (
585 + <article key={b.domain} className="gk-card gk-card-hover p-5 sm:p-7">
586 + <div className="flex flex-wrap items-baseline justify-between gap-3">
587 + <span className="gk-mono text-[12px] font-bold text-green">
588 + BOT
589 + </span>
590 + <span className="klabel">{b.domain}</span>
591 + </div>
592 + <h3 className="gk-display mt-4 inline-flex items-baseline gap-[5px] text-[32px] font-bold tracking-[-0.04em] sm:text-[38px]">
593 + Ka
594 + <span
595 + className="inline-block -rotate-2 rounded-md px-[8px] pb-[3px]"
596 + style={{ background: b.inkbox, color: b.accent }}
597 + >
598 + {b.digit}
599 + </span>
600 + </h3>
601 + <p className="gk-display mt-3 text-[17px] font-bold uppercase tracking-[-0.01em]">
602 + {b.tagline}
603 + </p>
604 + <p className="mt-3 text-[13.5px] leading-relaxed text-ink-2">
605 + {b.description}
606 + </p>
607 + <div className="mt-5 flex flex-wrap gap-2">
608 + {b.chips.map((chip) => (
609 + <span key={chip} className="stat-chip !text-[11px]">
610 + {chip}
611 + </span>
612 + ))}
613 + </div>
614 + <ul className="mt-5 space-y-2 border-t-[1.5px] border-dashed border-[rgba(20,24,20,0.25)] pt-5">
615 + {b.features.map((f) => (
616 + <li key={f} className="flex gap-3 text-[13.5px] text-ink-2">
617 + <span
618 + aria-hidden="true"
619 + className="mt-[7px] h-[5px] w-[5px] flex-none rotate-45 border border-ink bg-lime"
620 + />
621 + {f}
622 + </li>
623 + ))}
624 + </ul>
625 + <a
626 + href={b.url}
627 + target="_blank"
628 + rel="noopener noreferrer"
629 + className="btn btn-primary mt-6 w-full sm:w-auto"
547 630 >
548 2
549 </span>
550 </h3>
551 <p className="gk-display mt-3 text-[17px] font-bold uppercase tracking-[-0.01em]">
552 Le web québécois, cartographié entité par entité.
553 </p>
554 <p className="mt-3 text-[13.5px] leading-relaxed text-ink-2">
555 Ka2 est un bot IA de cartographie : il parcourt le web québécois,
556 identifie les entités — entreprises, organisations, personnes,
557 sites web — et les documente. Propulsé par Claude Haiku 4.5 avec
558 Firecrawl et Scrapfly, il ne copie pas les pages : il les
559 comprend, puis les classe.
560 </p>
561 <div className="mt-5 flex flex-wrap gap-2">
562 <span className="stat-chip !text-[11px]">4 types d&apos;entités</span>
563 <span className="stat-chip !text-[11px]">Propulsé par IA</span>
564 <span className="stat-chip !text-[11px]">robots.txt respecté</span>
565 </div>
566 <ul className="mt-5 space-y-2 border-t-[1.5px] border-dashed border-[rgba(20,24,20,0.25)] pt-5">
567 {[
568 "Découverte et classement : entreprises, organisations, personnes, sites web",
569 "Chaque page lue est comprise par un modèle d'IA, pas seulement copiée",
570 "Budget quotidien et délais entre requêtes — un crawl qui ménage les sites",
571 "Données publiques seulement, Loi 25 et LPRPDE comme plancher",
572 ].map((f) => (
573 <li key={f} className="flex gap-3 text-[13.5px] text-ink-2">
574 <span
575 aria-hidden="true"
576 className="mt-[7px] h-[5px] w-[5px] flex-none rotate-45 border border-ink bg-lime"
577 />
578 {f}
579 </li>
580 ))}
581 </ul>
582 <a
583 href="https://www.ka2.bot"
584 target="_blank"
585 rel="noopener noreferrer"
586 className="btn btn-primary mt-6 w-full sm:w-auto"
587 >
588 Visiter www.ka2.bot ↗
589 </a>
590 </article>
591 <div className="gk-card !bg-ink p-6 text-paper sm:p-7">
592 <p className="kicker !text-lime">Le rôle de Ka2 dans l&apos;écosystème</p>
593 <p className="gk-display mt-4 text-[clamp(24px,3.2vw,34px)] leading-[1.05] font-bold tracking-[-0.03em] uppercase">
594 Ka2 découvre
631 + Visiter {b.domain} ↗
632 + </a>
633 + </article>
634 + ))}
635 + </div>
636 + <div className="gk-card mt-6 !bg-ink p-6 text-paper sm:p-7">
637 + <p className="kicker !text-lime">
638 + Le rôle des bots dans l&apos;écosystème
639 + </p>
640 + <div className="mt-4 grid items-start gap-6 lg:grid-cols-2">
641 + <p className="gk-display text-[clamp(24px,3.2vw,34px)] leading-[1.05] font-bold tracking-[-0.03em] uppercase">
642 + Les bots découvrent
595 643 <br />
596 644 <span className="text-lime">→ ·Ka agrège</span>
597 645 <br />→ vous trouvez
598 646 </p>
599 <p className="mt-4 max-w-md text-[13.5px] text-[rgba(245,243,238,0.75)]">
600 Ka2 est l&apos;éclaireur du groupe : il cartographie le terrain
601 avant que les connecteurs ne s&apos;y branchent. Une nouvelle
602 boutique québécoise, un nouveau gestionnaire immobilier, un
603 concessionnaire qui ouvre — Ka2 les repère, et les plateformes
604 ·Ka les intègrent.
605 </p>
606 <ul className="mt-5 space-y-2 border-t border-[rgba(245,243,238,0.15)] pt-5 text-[13px] text-[rgba(245,243,238,0.75)]">
607 {[
608 "Respecte systématiquement robots.txt",
609 "Ne traite que des données publiques",
610 "Zéro boîte noire — le fonctionnement est documenté sur ka2.bot",
611 ].map((f) => (
612 <li key={f} className="flex gap-3">
613 <span
614 aria-hidden="true"
615 className="mt-[6px] h-[5px] w-[5px] flex-none rotate-45 bg-lime"
616 />
617 {f}
618 </li>
619 ))}
620 </ul>
647 + <div>
648 + <p className="max-w-md text-[13.5px] text-[rgba(245,243,238,0.75)]">
649 + Ka2 et Ka4 sont les éclaireurs du groupe : ils cartographient
650 + le terrain avant que les connecteurs ne s&apos;y branchent. Une
651 + nouvelle boutique québécoise, un nouveau gestionnaire
652 + immobilier, un concessionnaire qui ouvre — les bots les
653 + repèrent, et les plateformes ·Ka les intègrent.
654 + </p>
655 + <ul className="mt-5 space-y-2 border-t border-[rgba(245,243,238,0.15)] pt-5 text-[13px] text-[rgba(245,243,238,0.75)]">
656 + {[
657 + "Respectent systématiquement robots.txt",
658 + "Ne traitent que des données publiques",
659 + "Zéro boîte noire — leur fonctionnement est documenté sur ka2.bot et ka4.bot",
660 + ].map((f) => (
661 + <li key={f} className="flex gap-3">
662 + <span
663 + aria-hidden="true"
664 + className="mt-[6px] h-[5px] w-[5px] flex-none rotate-45 bg-lime"
665 + />
666 + {f}
667 + </li>
668 + ))}
669 + </ul>
670 + </div>
621 671 </div>
622 672 </div>
623 673 </Section>
624 674