SPB Git forge

spb/trouve-ka

Public ★ Pinned

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

40commits 1branches 0releases
9.2 MBsize
maindefault branch
23 days agolast push
Python 51.9% TypeScript 32.7% JavaScript 4.8% CSS 4.1% Shell 2.9% HTML 1.8% SQL 1.5%

page 1

  1. Fri, Sep 4, 2026 1

  2. Fri, Aug 28, 2026 1

    1. Simon-Pierre Boucher committed 1 mo ago · 11 files +69 −27
  3. Wed, Aug 26, 2026 2

    1. Simon-Pierre Boucher committed 1 mo ago · 1 file +74 −1
  4. Tue, Aug 25, 2026 6

    1. 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>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +28 −5
    2. 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>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +25 −13
  5. Mon, Aug 24, 2026 5

    1. Simon-Pierre Boucher committed 1 mo ago · 1 file +10
    2. docs: README v3 — chiffres live vérifiés, pastilles dynamiques, sections complètes
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +185 −67
    3. Simon-Pierre Boucher committed 1 mo ago · 1 file +87 −16
    4. Simon-Pierre Boucher committed 1 mo ago · 3 files +86 −144
  6. Sun, Aug 23, 2026 7

    1. 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>
      Simon-Pierre Boucher committed 1 mo ago · 9 files +669
    2. Simon-Pierre Boucher committed 1 mo ago · 4 files +676 −11
    3. Simon-Pierre Boucher committed 1 mo ago · 1 file +16 −12
    4. 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
      Simon-Pierre Boucher committed 1 mo ago · 10 files +307 −91
  7. Sat, Aug 22, 2026 3

    1. Simon-Pierre Boucher committed 1 mo ago · 1 file +1 −1
    2. 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>
      Simon-Pierre Boucher committed 1 mo ago · 4 files +115 −6
  8. Wed, Aug 19, 2026 4

    1. Simon-Pierre Boucher committed 1 mo ago · 1 file +4 −1
    2. 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>
      Simon-Pierre Boucher committed 1 mo ago · 0 files
    3. 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>
      Simon-Pierre Boucher committed 1 mo ago · 5 files +251 −9
  9. Tue, Aug 18, 2026 1

    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>
      Simon-Pierre Boucher committed 1 mo ago · 2 files +143
  10. Mon, Aug 17, 2026 6

    1. Simon-Pierre Boucher committed 1 mo ago · 2 files +113 −134
    2. 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>
      Simon-Pierre Boucher committed 1 mo ago · 2 files +239
    3. Footer/contact : Job-Ka rejoint l écosystème (ecosystem.json 13 sites)
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +175 −24
    4. 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>
      Simon-Pierre Boucher committed 1 mo ago · 11 files +2,388 −1
    5. 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>
      Simon-Pierre Boucher committed 1 mo ago · 5 files +29 −12
    6. 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>
      Simon-Pierre Boucher committed 1 mo ago · 15 files +1,013 −271
  11. Sun, Aug 16, 2026 3

    1. 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>
      Simon-Pierre Boucher committed 1 mo ago · 9 files +553 −2
    2. 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>
      Simon-Pierre Boucher committed 1 mo ago · 24 files +1,137 −172
    3. 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>
      Simon-Pierre Boucher committed 1 mo ago · 164 files +1,053 −18,894
  12. Thu, Aug 13, 2026 1

    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>
      Simon-Pierre Boucher committed 1 mo ago · 260 files +31,779