Trouve-KA — moteur de recherche web indépendant, Québec-first. Crawler distribué, index OpenSearch, ranking bilingue, galerie d'images. En prod : www.trouve-ka.com
Python 51.9%
TypeScript 32.7%
JavaScript 4.8%
CSS 4.1%
Shell 2.9%
HTML 1.8%
SQL 1.5%
-
Fri, Sep 4, 2026 1
-
Fri, Aug 28, 2026 1
-
Wed, Aug 26, 2026 2
-
feat(ka-id v2.1): reclassement personnalisé léger de la fenêtre de résultats (localisation transversale du profil KA ID, blend 0.25, fail-open) + champ personalized
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
feat(ka-id v2): journal des recherches vers le feature store KA ID (session tk_ka_session vérifiée côté API, événement search signé HMAC poussé au hub, best-effort stdlib) — nourrit les affinités transversales du membre
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Tue, Aug 25, 2026 6
-
Nav v2 correctif : panneau inset-0 avec barre de fermeture ✕ interne
…
Le ✕ était le burger du header sticky ; si le header n'est pas épinglé (bas de page), il est hors écran. Le panneau passe en fixed inset-0 avec sa propre barre h-14 + bouton ✕ (toujours visible, une seule commande de fermeture — le panneau couvre le burger). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Nav mobile v2 : le dropdown sous header devient un panneau plein écran fixed
…
Standard KA 2026-08-25 : le panneau absolute top-full (dropdown) passe en fixed inset-x-0 top-14 bottom-0 (sous le header sticky h-14) — menu visible peu importe la position de scroll. Liens géants numérotés gk-display, safe-area, verrou de scroll ka-scroll-lock conservé. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Mon, Aug 24, 2026 5
-
docs: README v3 — chiffres live vérifiés, pastilles dynamiques, sections complètes
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Sun, Aug 23, 2026 7
-
web : favoris unifiés « Mon univers Ka » (KA ID) — hub groupe-ka.com
…
· lib/hubfav.ts : client serveur du hub (HMAC-SHA256 KA_SSO_SECRET, GET cache 30 s invalidé au toggle, POST synchrone timeout 6 s) — transposition TypeScript de food-ka/foodka/hubfav.py, AUCUN stockage local. · /api/favorites (GET) + /api/favorites/toggle (POST) : session tk_ka_session requise (401 sinon), 502 si hub injoignable ; item_id stable dérivé de l URL du résultat (pg-<sha256[:40]>). · UI : cœur ♥ sur chaque carte de résultat (fav-button + fav-store partagé, toggle optimiste), page /favoris (CTA « Se connecter avec KA ID » hors session), liens nav + footer. fr-CA, design éditorial sharp du site. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
pivot Groupe KA : le moteur n'indexe plus que les 14 sites KA
…
- allowlist KA_DOMAINS + is_ka_domain (exclusions.py), garde-fous frontier (db.py) et crawler (worker.py) : aucun fetch/enqueue hors périmètre - politesse réduite 0,25 s sur nos propres domaines, score Québec plancher 1.0 - nouvel index tk-ka-pages + nouvelle base trouveka_ka (ancien corpus web ouvert intact : rollback via KA_ONLY=false + .env.bak-avant-pivot-ka) - ingestion par sitemaps : scripts/ka-sitemaps/ingest.py (streaming, priorité pages/villes > fiches), process PM2 tk-sitemaps (cron 4 h 45) - /api/search : nouveau paramètre site= (filtre par domaine KA) - catégories verticales KA (logement, emplois, restaurants…) dans l'indexeur
-
-
Sat, Aug 22, 2026 3
-
SEO : canonical + JSON-LD (WebSite/SearchAction/Organization), robots.txt, sitemap.xml, title enrichi, lang fr-CA, noindex des résultats
…
- layout : metadataBase + alternates.canonical ./, title « moteur de recherche du web québécois » (template %s | Trouve-Ka), html lang=fr-CA, JSON-LD WebSite (SearchAction /search?q={search_term_string}) + Organization - app/robots.ts : Allow /, Disallow /api/ /admin /search (espace de résultats infini), lien sitemap - app/sitemap.ts : accueil + pages publiques statiques (trouveka-bot, status, stats, soumettre, contact) - /search : robots noindex,follow sur les pages de résultats Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Wed, Aug 19, 2026 4
-
tokens.css : overflow-x clip aussi sur html (quirk WebKit iOS — le clip sur body seul laisse défiler le viewport)
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
docs(stats) : Stats v2 livré dans 8bdbe5f (commit partagé avec KA Agent v2)
…
Le commit 8bdbe5f contient AUSSI le module Stats commun v2 (embarqué par un git add -A concurrent) : - Kit ka-ui/stats v2 vendorisé (kacharts.tsx, kapdf.py, SPEC.md) : sparklines, jauges, multi-courbes, empilées, histogrammes, heatmap horaire 7x24, StatSummary, PdfButton menu 5 rapports. - apps/api/stats.py : dashboard enrichi sur données réelles Postgres (cache >= 5 min, requêtes bornées sur colonnes indexées) — 10 KPI (+deltas +sparklines), 4 jauges, 5 séries, multi-série crawl, empilées par classe HTTP, 6 répartitions (outcomes/HTTP/TLD/domaines/frontier/langues), 3 distributions (taille, durée, profondeur frontier), hourly 7x24, heatmap 26 semaines, 6 tableaux, 10 records. - /api/stats/report : 5 modes (complet, synthese, tendances, repartitions, donnees), mode inconnu -> complet, filename(platform, period, mode). - Page /stats : toutes les sections v2 dans l ordre du SPEC. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Mobile : navigation hamburger + socle mobile ka-ui (safe-area, dvh, z-index)
…
- P0 : composant components/mobile-nav.tsx (client) — bouton 44x44 aria-expanded visible <768 px, panneau deroulant absolute top-full sous le header sticky (pas de fixed sous le backdrop-blur), verrou de scroll ka-scroll-lock, fermeture tap exterieur / Escape / navigation (usePathname), items >=44 px, safe-area en bas, z-[900] (echelle --z-modal) - P1 : viewportFit "cover" dans l export viewport (safe-area-inset-* actives) - P1 : body min-h-screen -> min-h-dvh (barre navigateur mobile repliable) - P2 : tailwind.config.ts — ./ka/**/*.{ts,tsx} ajoute au content - P2 : cible tactile du wordmark etendue (after:-inset-2 sur le lien accueil) - ka/tokens.css et public/ka-agent.js synchronises sur les canons ka-ui (section SOCLE MOBILE OBLIGATOIRE : --z-*, --vh100, .ka-bottombar, .ka-menu, .ka-overlay, ka-scroll-lock, anti-zoom iOS 16 px, .gk-badge etendu ; agent : safe-area, textarea 16 px, plein ecran mobile + verrou scroll) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Tue, Aug 18, 2026 1
-
Seeds écosystème Groupe Ka (13 domaines) + script enqueue-sitemap
…
- seeds.txt : section Écosystème Groupe Ka (13 domaines www) - enqueue-sitemap.py : enfile les URLs d un sitemap (urlset/index) dans le frontier, tri haut-niveau d abord, borné au domaine du sitemap, cap 5000/domaine respecté via enqueue_urls_bulk Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Mon, Aug 17, 2026 6
-
Ajout du widget KA Agent (bulle de chat IA Groupe KA)
…
Sert /ka-agent.js depuis apps/web/public et injecte les balises window.KA_AGENT={site:"trouve-ka"} + <script src=/ka-agent.js defer> en fin de <body> du layout racine Next (toutes les pages SSR). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> -
Footer/contact : Job-Ka rejoint l écosystème (ecosystem.json 13 sites)
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Page /stats : tableau de bord analytique du moteur + rapport PDF Groupe-KA
…
- API : GET /api/stats/dashboard (contrat ka-ui/stats SPEC, cache mémoire >= 5 min par période) et GET /api/stats/report (PDF fpdf2, gabarit Groupe-KA, modes complet/synthese, graphiques vectoriels). - Module apps/api/stats.py : KPI (pages indexées, domaines, indexées sur la période, rythme/h, erreurs, frontier, recherches, taux de résultats), séries cumul/indexées/erreurs/recherches par jour (heure si <= 36 h), répartitions (résultats de crawl, top domaines, frontier), heatmap 26 semaines, tables (top domaines, top requêtes, erreurs par type, dernières erreurs), records réels — aucune stat inventée, deltas omis sans période de référence. Purge 90 j des journaux de recherche (1x/j). - Migration 005 + index créés CONCURRENTLY en prod : documents(first_indexed_at), crawl_attempts erreurs (partiel), search_queries(created_at) — agrégats bornés par index, pas de scan complet à chaque appel. - Web : page /stats (client, kit ka-ui/stats kacharts) avec PdfButton, Fraicheur, PeriodSelector, LineChart/BarChart/Donut/Heatmap/DataTable/ Records ; liens Stats dans le header et le footer ; responsive 360/768/ 1440 vérifié (Playwright, zéro débordement). - Dépendance fpdf2 ajoutée (pyproject + venv). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Ajout des icônes et de l'image de partage (favicon.svg, apple-touch-icon, og.png)
…
- Nouveaux fichiers dans apps/web/public : og.png (1200×630), favicon.svg, apple-touch-icon.png - Métadonnées Next (layout.tsx) : icons, openGraph (og:image) et twitter (summary_large_image) - Suppression de l'ancien app/icon.svg Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Design Groupe KA (éditorial sharp, accent azur) + SSO KA ID
…
TÂCHE DESIGN — harmonisation sur le design system commun ka-ui : - apps/web/ka/ : tokens.css (socle canonique), ecosystem.json, KaFooter (footer commun encre + flux du bot en enfant), GroupeKaBadge — vendorés depuis le repo ka-ui (ex-frontend/src/ka déplacé au bon endroit). - globals.css rethémé : papier #f5f3ee, encre #141814, accent AZUR (#1c7ed6 / #e7f2fd / #14508f, texte blanc sur accent), bordures encre 1,5 px + ombres décalées ; mode sombre retiré (thème éditorial unique). - layout.tsx : tokens.css chargé en premier, badge « Un service Groupe KA » cliquable vers le hub, bouton compte KA au header, KaFooter commun (11 sites sœurs, 3 courriels + rôles, liens légaux du hub, © année), title « Trouve-Ka — Un service Groupe KA », themeColor papier. - Nouvelle page /contact : courriels contact@/info@/admin@groupe-ka.com, avertissement agrégateur, création de compte KA → groupe-ka.com/connexion. TÂCHE SSO KA ID — connexion déléguée au hub groupe-ka.com : - lib/ka-auth.ts (node:crypto pur, modèle vrai-prix) : state signé local, vérification JWT HS256 ka_token (aud=trouve-ka, KA_SSO_SECRET), session cookie httpOnly tk_ka_session 30 jours. - Routes /api/auth/ka/login, /api/auth/ka/callback, /api/auth/me, /api/auth/logout (servies par Next avant le rewrite vers FastAPI). - next.config.mjs : chargement du .env racine du monorepo (KA_SSO_SECRET, KA_HUB_URL) sans dépendance. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Sun, Aug 16, 2026 3
-
Robustesse long terme : auto-guérison, survie au reboot, backups croisés, rétention
…
scripts/ops : boot.sh (démarrage idempotent par rôle, LaunchDaemon RunAtLoad sur les 7 nodes), watchdog.sh (M2M32, 2 min : santé API/web/PG/Redis/tunnels/ public + réparation locale et distante via clé ssh à commande forcée), backup-pg.sh (pg_dump quotidien, rotation 7j+dimanches), backup-os.sh (snapshots OpenSearch fs, rotation 7j), pull-backups.sh (réplication croisée tirée entre M2M32 et M2M32b via clés tar-only), install-node.sh. Résilience code : worker retry infini sur la connexion initiale (PG/OS), boot.sh attend les tunnels avant le worker; scheduler : rétention quotidienne (crawl_attempts 30 j, search_queries 180 j, par lots + VACUUM). Sécurité : toutes les invocations ssh opérationnelles neutralisent ControlMaster/agent (sinon le multiplexage d'une session humaine contourne les clés restreintes). docs/RUNBOOK.md : pannes, restauration, déploiement. Prouvé en réel : API tuée → ressuscitée en 40 s; reboot de m4ma → retour complet sans intervention. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Upgrade majeur UI + options de recherche + réparation d'encodage
…
UI : thème clair style Lou·Ka (blanc/navy/orange, ombres douces), mode sombre navy avec toggle persistant, Fraunces en accents, suggestions instantanées navigables au clavier (/api/suggest), filtres fraîcheur + Éducation, panneau de filtres compact sur mobile, recherches liées, pagination numérotée, raccourci « / », badge recherche sémantique/IA, meter de couverture sémantique sur /status. Encodage : decode_html privilégie l'UTF-8 strict sur le charset HTTP menteur (10 000+ docs avaient « é » au lieu de « é »), fix_mojibake répare le double encodage (y compris contenu mixte, token par token), script de réparation du stock avec curseur search_after. API : /api/suggest (titres + requêtes populaires), related dans /api/search, embedding_coverage dans /api/status. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Crawler équitable, recherche hybride sémantique, architecture native multi-nodes
…
Crawl : claim 1 URL/domaine (DISTINCT ON), backoff adaptatif réparé (defer ne touche plus last_crawled_at), décroissance de priorité sur pages inchangées, enqueue_urls_bulk (1 transaction/page vs 1/lien), cap réel urls/domaine (migration 003), blocklist plateformes+CDN, timeout fetch 10s, boucle de claim résiliente aux pannes DB. Recherche : minimum_should_match 2<70%, index kNN (e5-small 384d, migration alias v2), service embeddings+reranker cross-encoder (services/embedding), fusion RRF avec gate de couverture, reranking du top-20 aussi en lexical, 55 groupes de synonymes QC appliqués à chaud, endpoint admin zero-results. Infra : OpenSearch sur M2M32b (heap 8G, 2 shards), Postgres max_connections 200 + timeouts anti-zombies + shared_buffers 2G, backfill embeddings anti-blocage avec superviseur, migration 004 autovacuum domains. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Thu, Aug 13, 2026 1
-
Trouve-KA — moteur de recherche Québec-first (crawler, index, ranking, API, web)
…
Moteur complet : crawler distribué poli (robots.txt, SSRF, pièges), classification Québec (page + domaine), indexation immédiate OpenSearch (cherchable en ~2 s), ranking BM25 bilingue + function_score Québec-first, galerie d'images, web Next.js au design Groupe KA, déployé sur m2m32 + satellites via www.trouve-ka.com. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-