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 89.7% CSS 5.8% HTML 4.4%

feat: page /bots — déclaration de transparence des robots d'indexation

8 principes communs, fiches ka·2 / ka·4 / ka·6 (cartographie créateurs
et influenceurs, droit de retrait renforcé), ce que les robots ne font
pas, section exploitants de sites. Liens footer (+Ka6) et depuis /loi-25.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Simon-Pierre Boucher committed 1 h ago (Aug 13, 2026) parent 7959e3b

Showing 3 changed files with +422 and −0

added src/app/bots/page.tsx +410 −0
@@ -0,0 +1,410 @@
1 +// Auteur : Simon-Pierre Boucher — contact@spboucher.ai
2 +import type { Metadata } from "next";
3 +
4 +export const metadata: Metadata = {
5 + title: "Déclaration de transparence — Robots d'indexation — Groupe KA",
6 + description:
7 + "Fonctionnement des robots d'indexation du Groupe KA (ka·2, ka·4, ka·6) : données publiques uniquement, respect de robots.txt, charge minimale, retrait sur demande — zéro boîte noire.",
8 +};
9 +
10 +const MAILTO = "gk-mono font-bold underline underline-offset-4 hover:text-ink";
11 +
12 +const PRINCIPES: { title: string; body: React.ReactNode }[] = [
13 + {
14 + title: "Données publiques uniquement.",
15 + body: (
16 + <>
17 + Nos robots n&apos;accèdent qu&apos;à des pages publiquement
18 + accessibles sur le web. Ils ne franchissent aucune authentification,
19 + ne créent aucun compte, ne contournent aucun mur de connexion, aucun
20 + paywall ni aucune mesure technique de protection.
21 + </>
22 + ),
23 + },
24 + {
25 + title: "Respect de robots.txt.",
26 + body: (
27 + <>
28 + Chaque robot lit et respecte le fichier robots.txt des sites visités.
29 + Une directive d&apos;exclusion est honorée immédiatement.
30 + </>
31 + ),
32 + },
33 + {
34 + title: "Identification claire.",
35 + body: (
36 + <>
37 + Nos robots s&apos;identifient au moyen d&apos;un user-agent explicite
38 + qui les désigne — jamais une identité de navigateur humain. Chaque
39 + robot documente son fonctionnement sur son propre site (ka2.bot,
40 + ka4.bot, ka6.bot).
41 + </>
42 + ),
43 + },
44 + {
45 + title: "Charge minimale sur les serveurs.",
46 + body: (
47 + <>
48 + Un délai est appliqué entre chaque requête, et chaque session est
49 + plafonnée en nombre de pages et en durée, afin de ne jamais nuire à la
50 + performance des sites visités.
51 + </>
52 + ),
53 + },
54 + {
55 + title: "Indexation, pas reproduction massive.",
56 + body: (
57 + <>
58 + Nos robots recueillent le minimum nécessaire à l&apos;affichage
59 + d&apos;un extrait et d&apos;un lien vers la source. Ils ne visent pas
60 + la reconstitution intégrale des bases de données des sites visités.
61 + </>
62 + ),
63 + },
64 + {
65 + title: "Journalisation.",
66 + body: (
67 + <>
68 + L&apos;activité de chaque robot est journalisée (pages visitées,
69 + horodatage, respect des directives), ce qui nous permet de démontrer
70 + nos pratiques et de répondre à toute question d&apos;un exploitant de
71 + site.
72 + </>
73 + ),
74 + },
75 + {
76 + title: "Retrait sur demande.",
77 + body: (
78 + <>
79 + Tout exploitant de site ou titulaire de droits peut demander
80 + l&apos;exclusion de son site ou le retrait d&apos;un contenu en
81 + écrivant à{" "}
82 + <a className={MAILTO} href="mailto:admin@groupe-ka.com">
83 + admin@groupe-ka.com
84 + </a>
85 + . Les demandes sont traitées dans un délai de 48 à 72 heures
86 + ouvrables.
87 + </>
88 + ),
89 + },
90 + {
91 + title: "Conformité.",
92 + body: (
93 + <>
94 + Nos pratiques sont conçues pour respecter la Loi 25 (Québec) et la
95 + LPRPDE (Canada) en matière de renseignements personnels.
96 + </>
97 + ),
98 + },
99 +];
100 +
101 +type BotFiche = {
102 + mark: string;
103 + domain: string;
104 + url: string;
105 + role: string;
106 + rows: [string, React.ReactNode][];
107 +};
108 +
109 +const BOTS_FICHES: BotFiche[] = [
110 + {
111 + mark: "ka·2",
112 + domain: "www.ka2.bot",
113 + url: "https://www.ka2.bot",
114 + role: "Cartographie générale du web québécois",
115 + rows: [
116 + [
117 + "Plateformes alimentées",
118 + "l'écosystème de découverte du groupe — les sources repérées par ka·2 sont ensuite proposées aux plateformes ·Ka, qui décident de s'y brancher.",
119 + ],
120 + [
121 + "Nature du contenu indexé",
122 + "entités publiques du web québécois, classées en quatre types : entreprises, organisations, personnes et sites web.",
123 + ],
124 + [
125 + "Technologie",
126 + "bot de cartographie propulsé par un modèle d'intelligence artificielle (Claude Haiku 4.5, Anthropic) combiné aux services de crawl Firecrawl et Scrapfly.",
127 + ],
128 + [
129 + "Paramètres d'exploitation",
130 + "budget quotidien de pages plafonné, durée de session limitée, délai configuré entre chaque requête et nombre maximal de pages par cycle. Le respect de robots.txt est activé.",
131 + ],
132 + [
133 + "Renseignements personnels",
134 + "le contenu public peut occasionnellement en contenir (p. ex. le nom d'un dirigeant sur le site de son entreprise); ils sont limités au minimum nécessaire à l'identification de l'entité, jamais enrichis ni croisés.",
135 + ],
136 + ],
137 + },
138 + {
139 + mark: "ka·4",
140 + domain: "www.ka4.bot",
141 + url: "https://www.ka4.bot",
142 + role: "Cartographie élargie, avec activité en direct",
143 + rows: [
144 + [
145 + "Plateformes alimentées",
146 + "même rôle d'éclaireur que ka·2 — il double la flotte de découverte sur un second front.",
147 + ],
148 + [
149 + "Nature du contenu indexé",
150 + "entités publiques du web québécois, classées en cinq types : entreprises, organisations, personnes, sites web et données générales.",
151 + ],
152 + [
153 + "Technologie",
154 + "même moteur que ka·2 (Claude Haiku 4.5 + Firecrawl/Scrapfly), avec bascule automatique entre backends de lecture et un tableau de bord public où l'activité du bot s'observe en direct.",
155 + ],
156 + [
157 + "Paramètres d'exploitation",
158 + "budget quotidien de pages plafonné, durée de session limitée, délai configuré entre chaque requête et nombre maximal de pages par cycle. Le respect de robots.txt est activé.",
159 + ],
160 + [
161 + "Renseignements personnels",
162 + "mêmes règles de minimisation que ka·2 — pour des données d'entreprises, de produits et de sites, normalement aucun.",
163 + ],
164 + ],
165 + },
166 + {
167 + mark: "ka·6",
168 + domain: "www.ka6.bot",
169 + url: "https://www.ka6.bot",
170 + role: "Cartographie des créateurs et influenceurs du Québec",
171 + rows: [
172 + ["Plateforme alimentée", "ka6 (www.ka6.bot)."],
173 + [
174 + "Nature du contenu indexé",
175 + "entités publiques du web québécois — créateurs, agences, marques, entreprises, organisations et sites web — dans le domaine de la création de contenu et de l'influence.",
176 + ],
177 + [
178 + "Technologie",
179 + "bot de cartographie propulsé par un modèle d'intelligence artificielle (Claude Haiku 4.5, Anthropic) combiné aux services de crawl Firecrawl et Scrapfly.",
180 + ],
181 + [
182 + "Paramètres d'exploitation",
183 + "budget quotidien de pages plafonné, durée de session limitée, délai configuré entre chaque requête et nombre maximal de pages par cycle. Le respect de robots.txt est activé.",
184 + ],
185 + [
186 + "Renseignements personnels",
187 + "ka·6 traite des renseignements concernant des personnes exerçant une activité publique de création ou d'influence (nom public ou nom d'artiste, plateformes utilisées, nature de l'activité publique). L'indexation se limite aux informations que ces personnes ont elles-mêmes rendues publiques dans le cadre de leur activité professionnelle. Aucune donnée privée (coordonnées personnelles, adresse résidentielle, informations sur la vie privée) n'est recherchée ni compilée.",
188 + ],
189 + [
190 + "Droit de retrait renforcé",
191 + <>
192 + toute personne figurant dans les données de ka·6 peut demander la
193 + consultation, la rectification ou le retrait complet de son profil
194 + en écrivant à{" "}
195 + <a className={MAILTO} href="mailto:admin@groupe-ka.com">
196 + admin@groupe-ka.com
197 + </a>
198 + , sans avoir à justifier sa demande. Le retrait est traité en
199 + priorité.
200 + </>,
201 + ],
202 + ],
203 + },
204 +];
205 +
206 +function Card({
207 + num,
208 + title,
209 + children,
210 + index,
211 +}: {
212 + num: string;
213 + title: string;
214 + children: React.ReactNode;
215 + index: number;
216 +}) {
217 + return (
218 + <article
219 + className="gk-card rise p-5 sm:p-7"
220 + style={{ animationDelay: `${0.12 + index * 0.05}s` }}
221 + >
222 + <span className="gk-mono text-[12px] font-bold text-green">{num}</span>
223 + <h2 className="gk-display mt-2 text-[17px] font-bold uppercase">
224 + {title}
225 + </h2>
226 + <div className="mt-3 space-y-3 text-[14px] leading-relaxed text-ink-2">
227 + {children}
228 + </div>
229 + </article>
230 + );
231 +}
232 +
233 +function Bullet({ children }: { children: React.ReactNode }) {
234 + return (
235 + <li className="flex gap-3">
236 + <span
237 + aria-hidden="true"
238 + className="mt-[8px] h-[5px] w-[5px] flex-none rotate-45 border border-ink bg-lime"
239 + />
240 + <span>{children}</span>
241 + </li>
242 + );
243 +}
244 +
245 +export default function Bots() {
246 + return (
247 + <main className="mx-auto max-w-4xl px-4 pb-16 sm:px-6">
248 + <section className="pt-12 sm:pt-14">
249 + <p className="kicker rise">Zéro boîte noire · nos robots</p>
250 + <h1 className="gk-display rise mt-4 text-[clamp(30px,5vw,52px)] leading-[1] font-bold tracking-[-0.035em] uppercase [animation-delay:0.08s]">
251 + Déclaration de <span className="hl">transparence</span> — robots
252 + d&apos;indexation
253 + </h1>
254 + <p className="rise mt-5 max-w-2xl text-[15px] text-ink-2 [animation-delay:0.16s]">
255 + Le Groupe KA exploite des robots d&apos;indexation automatisée
256 + (« bots ») qui alimentent ses plateformes d&apos;agrégation. La
257 + présente déclaration décrit, en toute transparence, le
258 + fonctionnement de ces robots, les principes qu&apos;ils respectent
259 + et les moyens offerts aux exploitants de sites web pour contrôler ou
260 + refuser l&apos;indexation.
261 + </p>
262 + <p className="gk-mono rise mt-4 text-[11px] text-ink-3 [animation-delay:0.2s]">
263 + Dernière mise à jour : 13 août 2026
264 + </p>
265 + </section>
266 +
267 + <div className="mt-10 space-y-5">
268 + <Card num="01" title="Principes communs à tous nos robots" index={0}>
269 + <p>
270 + Tous les robots du Groupe KA appliquent, sans exception, les
271 + règles suivantes :
272 + </p>
273 + <ol className="space-y-3">
274 + {PRINCIPES.map((p, i) => (
275 + <li key={p.title} className="flex gap-3">
276 + <span className="gk-mono font-bold text-green">
277 + {String(i + 1).padStart(2, "0")}
278 + </span>
279 + <span>
280 + <strong className="text-ink">{p.title}</strong> {p.body}
281 + </span>
282 + </li>
283 + ))}
284 + </ol>
285 + </Card>
286 +
287 + {BOTS_FICHES.map((b, i) => (
288 + <Card
289 + key={b.mark}
290 + num={String(i + 2).padStart(2, "0")}
291 + title={`${b.mark} — ${b.role}`}
292 + index={i + 1}
293 + >
294 + <p className="gk-mono text-[12px]">
295 + <a
296 + href={b.url}
297 + target="_blank"
298 + rel="noopener noreferrer"
299 + className="font-bold underline underline-offset-4 hover:text-ink"
300 + >
301 + {b.domain}
302 + </a>
303 + </p>
304 + <ul className="space-y-2">
305 + {b.rows.map(([label, value]) => (
306 + <Bullet key={label}>
307 + <strong className="text-ink">{label} :</strong> {value}
308 + </Bullet>
309 + ))}
310 + </ul>
311 + </Card>
312 + ))}
313 +
314 + <Card num="05" title="Ce que nos robots ne font pas" index={4}>
315 + <ul className="space-y-2">
316 + <Bullet>
317 + Ils ne contournent aucun robots.txt, CAPTCHA, blocage
318 + d&apos;adresse IP ni aucune autre mesure de protection : un
319 + blocage est interprété comme un refus et respecté.
320 + </Bullet>
321 + <Bullet>
322 + Ils ne collectent pas de contenu derrière authentification.
323 + </Bullet>
324 + <Bullet>
325 + Ils ne recueillent pas de renseignements personnels au-delà de
326 + ce qui figure publiquement dans le contenu indexé, et n&apos;en
327 + font aucune vente ni communication à des tiers.
328 + </Bullet>
329 + <Bullet>
330 + Ils ne republient pas intégralement le contenu des sites
331 + visités : nos plateformes affichent des extraits accompagnés
332 + d&apos;un lien vers la source originale.
333 + </Bullet>
334 + </ul>
335 + </Card>
336 +
337 + <Card num="06" title="Pour les exploitants de sites web" index={5}>
338 + <p>
339 + Si vous exploitez un site visité par l&apos;un de nos robots et
340 + souhaitez :
341 + </p>
342 + <ul className="space-y-2">
343 + <Bullet>
344 + <strong className="text-ink">
345 + Ajuster la fréquence de visite
346 + </strong>{" "}
347 + : écrivez-nous, nous adapterons les délais;
348 + </Bullet>
349 + <Bullet>
350 + <strong className="text-ink">Exclure votre site</strong> :
351 + ajoutez notre user-agent à votre robots.txt, ou écrivez-nous
352 + pour une exclusion immédiate;
353 + </Bullet>
354 + <Bullet>
355 + <strong className="text-ink">
356 + Établir un partenariat de données
357 + </strong>{" "}
358 + (flux officiel plutôt que crawl) : nous sommes ouverts à toute
359 + entente, écrivez à{" "}
360 + <a className={MAILTO} href="mailto:contact@groupe-ka.com">
361 + contact@groupe-ka.com
362 + </a>
363 + .
364 + </Bullet>
365 + </ul>
366 + </Card>
367 +
368 + <Card num="07" title="Contact" index={6}>
369 + <p>
370 + Responsable des robots d&apos;indexation :{" "}
371 + <strong className="text-ink">Simon-Pierre Boucher</strong>
372 + <br />
373 + Courriel :{" "}
374 + <a className={MAILTO} href="mailto:contact@groupe-ka.com">
375 + contact@groupe-ka.com
376 + </a>{" "}
377 + · Demandes de retrait :{" "}
378 + <a className={MAILTO} href="mailto:admin@groupe-ka.com">
379 + admin@groupe-ka.com
380 + </a>
381 + </p>
382 + </Card>
383 + </div>
384 +
385 + <p className="gk-mono mt-8 text-[11px] text-ink-3">
386 + Cette déclaration complète notre{" "}
387 + <a
388 + href="/loi-25"
389 + className="underline underline-offset-4 hover:text-ink"
390 + >
391 + politique de protection des renseignements personnels (Loi 25)
392 + </a>
393 + . Voir aussi :{" "}
394 + <a
395 + href="/confidentialite"
396 + className="underline underline-offset-4 hover:text-ink"
397 + >
398 + Politique de confidentialité
399 + </a>{" "}
400 + ·{" "}
401 + <a
402 + href="/conditions"
403 + className="underline underline-offset-4 hover:text-ink"
404 + >
405 + Conditions d&apos;utilisation
406 + </a>
407 + </p>
408 + </main>
409 + );
410 +}
modified src/app/layout.tsx +5 −0
@@ -212,6 +212,7 @@ export default function RootLayout({
212 212 ["Food·Ka", "https://www.food-ka.com"],
213 213 ["Ka2", "https://www.ka2.bot"],
214 214 ["Ka4", "https://www.ka4.bot"],
215 + ["Ka6", "https://www.ka6.bot"],
215 216 ].map(([label, href]) => (
216 217 <li key={label}>
217 218 <a
@@ -266,6 +267,10 @@ export default function RootLayout({
266 267 <a href="/loi-25" className="underline-offset-4 hover:text-lime hover:underline">
267 268 Protection des renseignements personnels (Loi 25)
268 269 </a>{" "}
270 + ·{" "}
271 + <a href="/bots" className="underline-offset-4 hover:text-lime hover:underline">
272 + Transparence des robots d&apos;indexation
273 + </a>{" "}
269 274 · groupe-ka.com
270 275 </p>
271 276 </div>
modified src/app/loi-25/page.tsx +7 −0
@@ -502,6 +502,13 @@ export default function Loi25() {
502 502 admin@groupe-ka.com
503 503 </a>{" "}
504 504 · Voir aussi :{" "}
505 + <a
506 + href="/bots"
507 + className="underline underline-offset-4 hover:text-ink"
508 + >
509 + Transparence des robots d&apos;indexation
510 + </a>{" "}
511 + ·{" "}
505 512 <a
506 513 href="/confidentialite"
507 514 className="underline underline-offset-4 hover:text-ink"
508 515