SPB Git

spb/job-ka

Public
page 1
  1. Tue, Aug 25, 2026 3

    1. Vague E — 3 nouvelles familles ATS (JazzHR, Teamtailor, Zoho Recruit) + 60 connecteurs, ~547 offres QC
      …
      - Nouvelles classes de plateforme : jazzhr.py (liste /apply/ + JSON-LD),
        teamtailor.py (sitemap + JSON-LD), zoho_recruit.py (flux RSS public) —
        filtre QC au détail avec report si budget épuisé (doctrine taleo_tbe/adp).
      - serper_scout.py : 5 nouveaux motifs (jazzhr, teamtailor, zohorecruit,
        talentnest, njoyn avec CLID/CL/hôte) + CLID dans le dédoublonnage.
      - 60 connecteurs : 31 JazzHR (Optel 13, Playground 21, Ultium CAM,
        Altitude Aérospatiale, FortNine, XTL 21, Valnet 22…), 17 Zoho Recruit
        (Mallette Saguenay 26, DRB 22, dentago 20, Carnaval de Québec, FÉRIQUE,
        Altitude Sports, Excavations Lafontaine…), 9 Teamtailor (Norda Stelo 50,
        Workin Group 34, Humanise 13, CAM Mécanique, Synertek…), 3 Njoyn
        (IR-CUSM 37, RTL 17, Groupe Master 17).
      - njoyn.py : correctif _keep — certains habillages mettent la date dans la
        colonne pays (Groupe Master 0 -> 17) ; n'exclure que les pays reconnus.
      - sources.json : 1 108 sources, 23 familles ATS ; docs/connecteurs
        régénérées (1 133 fiches) ; rapport docs/prospection-vagueE.md
        (écartés motivés + reliquats vague F : TalentNest, ENPQ/APCHQ, CUSM).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1,200 files +13,772 −4,752
    2. Vague D implémentée — 75 nouveaux connecteurs (968 -> 1044 employeurs), ~768 offres QC
      …
      - 55 connecteurs générés depuis feeds-vagueD.json (gen_connectors), tous
        synchronisés sans échec (333 offres). Sandvik re-pointé sur le babillard
        public sandvik-jobs.
      - 20 connecteurs manuels sur familles existantes (435 offres) : ADP ×12
        (Nordik, Uniboard, Richelieu, UV Assurance, Strathmore, H2O, Cook It,
        Canadian Royalties, Niobec, Nemaska, Abritek, Triple Boris), Alstom
        SuccessFactors (227 offres, La Pocatière/MTL), Kiewit-Ganotec (50),
        Groupe Bellemare Njoyn (27), Ville de Mirabel, Sel Windsor, Global Excel,
        Graymont TBE, IAMGOLD Taleo.
      - Correctifs de familles : adp.py FORCE_CITY (mono-sites QC sans
        requisitionLocation) ; taleo_tbe.py secours og:title variante
        « - Canada - QC - Ville » (Graymont 0 -> 4) ; successfactors.py slug
        « -queb » final + garde-fou is_quebec_location contre les faux « QC »
        (quality control, 3 offres US interceptées ; Kiewit 3 -> 50).
      - 9 pistes écartées avec raison (babillards US/vides, iCIMS SPA) —
        détail dans docs/prospection-vagueD.md.
      - sources.json : 1 048 sources ; docs/connecteurs régénérées (1 070 fiches).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1,151 files +37,534 −21,599
    3. Prospection vague D — 55 nouveaux flux ATS confirmés + 34 pistes autres ATS
      …
      Scout Serper (1 920 requêtes, 96 termes inédits : 61 villes/régions + 35 métiers)
      et découverte sectorielle (910 employeurs QC visités par detect_ats) :
      - data/feeds-vagueD.json : 55 flux confirmés ≥1 offre QC (workday 27,
        smartrecruiters 14, dayforce 6, bamboohr 3, greenhouse 2, ashby/lever/workable 1)
        — dont Loblaw/Provigo, Best Buy Canada, AMF, Chanel, Carrier, Equisoft,
        Groupe Meloche, Téléfilm, Le Massif, Scandinave Spa
      - data/detected-other-ats.jsonl : +34 pistes sur familles existantes
        (adp 17, ukg 5, successfactors 4, taleo 3, njoyn 3, icims 2) — filon minier
        Abitibi/Nord (IAMGOLD, Hecla, Wesdome, Nemaska, Niobec…), Alstom La Pocatière,
        Richelieu, Logistec, villes de Mirabel/Terrebonne
      - rapport complet : docs/prospection-vagueD.md (méthode, tables, suites)
      Prochaine étape sur validation : gen_connectors.py data/feeds-vagueD.json
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 3 files +870
  2. Mon, Aug 24, 2026 5

    1. Simon-Pierre Boucher · 1 file +11
    2. Simon-Pierre Boucher · 1 file +103 −30
    3. Simon-Pierre Boucher · 3 files +90 −264
  3. Sun, Aug 23, 2026 9

    1. Vague C — +620 connecteurs employeurs directs (350 -> 968)
      …
      Campagne de découverte massive en 3 angles : éclaireur Serper élargi
      (60 termes x 10 ATS x 3 pages), reprise des 266 flux confirmés le 22-08
      jamais intégrés, et sondage par nom de 182 grands employeurs QC sur 10 ATS.
      Fusion/nettoyage (scripts/merge_confirmed.py : dédoublonnage multi-vagues,
      filtre des faux positifs Québec hors province, nettoyage des noms issus des
      titres Google, exclusion des babillards de démo) puis secteurs attribués par
      lots (scripts/classify_sectors.py).
      
      - Workday +148, SmartRecruiters +118, Dayforce +96, Greenhouse +93,
        Breezy +50, Workable +40, Lever +32, Ashby +25, Recruitee +12, BambooHR +3
      - SuccessFactors +4 vérifiés main : TELUS, Énergir, VIA Rail, Canada Vie
      - prises notables : Thales, Fiera Capital, Fednav, Wolseley, Cominar, Ludia,
        Granit Design, Vortex Structures Aquatiques, Warner Bros. Discovery
      - 973 sources au registre ; docs/connecteurs régénérées (995 fiches) ;
        docs/CONFORMITE.md : section Vague C + écartés (Air Canada -> Phenom, TÉLUQ,
        Valero, faux QC)
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1,621 files +94,809 −2,405
    2. Favoris unifies « Mon univers Ka » (hub KA ID) : coeur sur cartes et fiche, page /favoris
      …
      - jobka/hubfav.py : client du magasin central de favoris du hub Groupe KA
        (HMAC signe, toggle synchrone, lecture cachee 30 s, zero stockage local)
      - jobka/web.py : GET /api/favorites + POST /api/favorites/toggle (session
        KA ID requise, 401 sinon) ; route SPA /favoris
      - jobka/auth.py : parametre next (chemin local, transporte dans le state
        signe) pour revenir a la page courante apres la connexion KA ID
      - frontend : favorites.tsx (FavProvider + FavButton), coeur sur JobCard et
        la fiche /emploi/:uid, page /favoris + liens nav et prefooter, CSS fav-btn
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 9 files +427 −15
    3. Simon-Pierre Boucher · 1 file +1 −1
    4. stats v3 : rapports PDF personnalisés (catalogue, rendu au choix, ReportBuilder)
      …
      - kapdf.py v3 partagé (catalog, mode personnalise, heatmap calendrier)
      - web.py : GET /api/stats/catalog + POST /api/stats/report/custom
      - kacharts.tsx : composant ReportBuilder intégré à PdfButton (modal,
        ordre, rendus, modèles localStorage) — SPEC.md §3bis
      Simon-Pierre Boucher · 4 files +715 −11
    5. SEO : villes groupées par slug (variantes de casse fusionnées, libellé majoritaire)
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +51 −43
    6. SEO : pages programmatiques /villes + /ville/{slug} rendues en HTML (pattern lou-ka)
      …
      - jobka/seo.py : slugify, cache slug→ville, SSR /villes et /ville/{slug}
        (contenu dans #root, ItemList + BreadcrumbList), API /api/seo/villes et
        /api/seo/ville/{slug}, sitemap-villes.xml, liens internes accueil/fiche
        vers les nouvelles pages
      - frontend : pages React VillesPage/VillePage, routes, lien pied de page
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 4 files +324 −7
    7. scripts: éclaireur Serper + support Dayforce dans probe_ats (campagne connecteurs du 2026-08-22)
      …
      Outils laissés non commités par la session précédente : serper_scout.py
      (requêtes site:<ATS> × termes québécois → slugs candidats JSONL) et
      probe_ats.py étendu à 10 ATS (ajout dayforce).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 2 files +301 −3
    8. connecteurs: retrait de projevia (Laval… en France)
      …
      Le tenant Recruitee « projevia » est une entreprise française (Laval,
      Pays de la Loire, country_code FR — offres « Chauffeur SPL ») ajoutée par
      erreur : le filtre Québec la vidait à juste titre (0 offre publiée, source
      marquée brisée par la supervision). Données associées purgées.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file −16
    9. taleo_tbe: secours og:title (retrait du JSON-LD par la plateforme) + fenêtre syncs_since_h
      …
      - Taleo TBE a retiré le JSON-LD JobPosting de requisition.jsp : les offres
        sans cache de détail étaient toutes différées par le filtre Québec →
        kruger publiait 0 offre depuis des jours (72 items RSS). Secours : lieu
        extrait du og:title (« … – Ville, RÉGION, PAYS »). Kruger retrouve 54
        offres QC ; sepaq/hec/exo tenaient encore grâce à leurs caches.
      - base.detail() : ne met plus en cache les payloads vides ({} cadenassé par
        clé stable = connecteur gelé) ; 89 caches vides purgés de la base.
      - /api/stats : paramètre optionnel syncs_since_h pour la supervision api-ka
        (fenêtre complète du sync_log au lieu des 20 dernières entrées).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 3 files +49 −7
  4. Sat, Aug 22, 2026 7

    1. apparence : classes métier alignées sur la signature « éditorial sharp » Groupe KA
      …
      - job-card/sheet/tile/table : bordures encre 1,5 px + ombres décalées
        (--shadow-off-*), hover translate signature, tuiles avec liseré accent.
      - badges → chips du groupe (mono 10,5 px, uppercase, pilule bordée) ;
        salaire (vert bordé) et « offre directe » (accent) conservent leur sens.
      - filtres du héros : champs sharp (bordure encre, focus 3px 3px 0 accent,
        case « Salaire affiché » cochée = fond accent-soft).
      - héros : kicker signature « Pages carrières · Zéro intermédiaire » +
        surligné d'accent incliné (.hl) sur « à la source ».
      - pagination et titres de section en font-display 700 ; identité propre à
        l'emploi conservée (header encre, accent cyan, transparence salariale).
      - Vérifié Playwright : accueil desktop/mobile + fiche (localhost:8096),
        build Vite OK, pm2 job-ka-web redémarré, www.job-ka.com 200.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 3 files +81 −51
    2. Vague B — 110 nouvelles sources (26 Dayforce nouvelle famille + 84 sur familles existantes)
      …
      - Nouvelle famille Dayforce HCM (jobs.dayforcehcm.com, API JSON du frontal Next.js,
        csrf anonyme + recherche paginée, détail PayClass/PayType avec cache et budget) :
        26 employeurs dont Groupe Maurice, Groupe CH, La Vie en Rose, Eidos-Montréal,
        Air Canada Rouge, Port de Québec, Soprema, BPA…
      - Ajouts sur familles existantes : Workday +17 (Simons, Cineplex, TJX, FedEx, Abbott…),
        Greenhouse +17 (Coveo, KRAFTON, Lyft, AutoTrader…), SmartRecruiters +13,
        Workable +11, Breezy +8, Recruitee +7, Lever +6, Ashby +5.
      - sources.json : 244 → 354 sources ; docs/connecteurs régénérées (376 fiches).
      - docs/CONFORMITE.md : bases d'accès vérifiées 2026-08-22, 20+ sources écartées
        avec raisons (agences, agrégateurs, babillards vides, faux positifs français).
      - Sync validé : 110/110 sources OK, 2 102 offres ajoutées (total BD 25 280).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 505 files +23,122 −5,957
    3. SEO : SSR léger (accueil, fiches JobPosting, pages statiques), robots.txt et sitemaps
      …
      - jobka/seo.py : pattern Lou-Ka — head unique (title, description, canonical,
        hreflang fr-ca, og:locale fr_CA, twitter) + contenu HTML dans #root que
        React remplace au montage
      - accueil : title avec le nombre d'offres, JSON-LD WebSite/Organization,
        h1 + listes de liens (villes, dernières offres)
      - fiche emploi : JSON-LD JobPosting (baseSalary CAD, jobLocation QC/CA,
        employmentType, validThrough, TELECOMMUTE) + BreadcrumbList ; 404 inconnue,
        410 retirée, noindex quarantaine, canonical vers l'offre maîtresse (doublons)
      - robots.txt (Disallow /api/) + sitemap index + sitemap-pages +
        sitemap-emplois-N chunkés (10 000 URL, lastmod)
      - web.py : include_router(seo) avant le rattrape-tout SPA
      - index.html : lang fr-CA
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 3 files +506 −1
    4. connecteurs: chaine de fetch anti-bot resiliente (Oxylabs->Scrapfly->Bright Data)
      …
      Auto-escalade de BaseConnector.get() sur blocage (403/429/503/challenge CF)
      ou coupure reseau, via connectors/_resilient.py. Cles lues de l env avec repli
      sur ~/.claude/.env (accepte SCRAPFLY_KEY et SCRAPFLY_API_KEY). Reponse
      compatible requests.Response; coupe-circuit par hote. Aucun connecteur modifie.
      
      Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
      Simon-Pierre Boucher · 2 files +386
  5. Wed, Aug 19, 2026 15

    1. Famille Workland réécrite sur l'API JSON publique du frontal Atlas (jobs-prod published-external + default-profiles) : descriptions complètes fr/en, lieux géocodés, dates, mode de travail — 2 requêtes par cycle pour TOUT le réseau. Nouveau connecteur réseau atlas_workland (~80 employeurs QC : CSS scolaires, cégeps, CIUSSS Ouest-de-l'Île, Santé Québec Côte-Nord, ICM, STQ, UQTR, INRS… ; 1 238 offres QC). Connecteur cssdm retiré (couvert par le réseau), fixture remplacée par atlas_workland (sous-ensemble rejouable). Corrige la limite « workland description 0 % ».
      …
      Dans le même train : famille Njoyn paginée (rejeu du formulaire public Inp_ItemsPerPage/pn — Santé Montréal passe de 50 offres lues à 762 —, habillage tableau 5 colonnes titre/catégorie/ville/pays, filtre Québec optionnel, budget détail par classe, POST via Scrapfly pour les babillards Radware) ; famille UltiPro : hôte paramétrable (recruiting.ultipro.ca) ; lassonde réparé (l'ADP WFN ne sert plus que les postes américains — connecteur réécrit sur le site maison lassonde.com/fr/emplois, 31 offres QC).
      Simon-Pierre Boucher · 9 files +2,072 −73
    2. Simon-Pierre Boucher · 239 files +2,823 −2,146
    3. Simon-Pierre Boucher · 1 file +4 −1
    4. Stats v2 : dashboard ultra complet + 5 rapports PDF (module commun ka-ui v2)
      …
      - jobka/kapdf.py + frontend/src/ka/stats/{kacharts.tsx,SPEC.md} : canoniques v2
      - statsdash.py : 10 KPI (sparklines actives/nouvelles/retraits), 4 jauges de
        complétude (salaire, mode, géoloc, catégorie), série des retraits,
        multi-courbes top secteurs (date de publication affichée), barres empilées
        ajouts par source (sync_log), 3 distributions (salaires annuels, taux
        horaires, âge des offres), heatmap horaire 7x24 des observations, tableaux
        secteurs + sources & connecteurs, 11 records ; deltas seulement si la
        période précédente est couverte (rien d'inventé)
      - /api/stats/report : 5 modes (complet/synthese/tendances/repartitions/
        donnees), mode inconnu -> complet, filename(..., mode)
      - Stats.tsx : sections v2 dans l'ordre du SPEC (jauges, StatSummary,
        MultiLineChart, StackedBarChart, Histogram, HourHeatmap, PdfButton 5 modes)
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 6 files +1,399 −237
    5. Correctifs front-end mobile : menu hamburger, carte calee sur la vraie hauteur du header, viewport-fit=cover, socle mobile ka-ui
      …
      - App.tsx : menu mobile hamburger sous 700px (bouton 44x44 aria-expanded, panneau deroulant sous le header, backdrop fixe HORS du header, verrou de scroll body + cleanup, fermeture route/Escape/backdrop) ; ResizeObserver sur header.site qui pose --header-h sur <html>
      - styles.css : .map-wrap = calc(100vh/100dvh - var(--header-h,58px)) (fini le saut de barre navigateur et le 58px faux sur header 2 lignes) ; styles .menu-btn/.mobile-menu/.mm-backdrop avec var(--z-modal)/var(--z-overlay) ; header.site a var(--z-header) ; champs filtres a 16px sous 700px (anti-zoom iOS) ; extension tactile ::after -8px sur a.logo
      - index.html : meta viewport avec viewport-fit=cover (safe-area iOS)
      - src/ka/tokens.css : section SOCLE MOBILE OBLIGATOIRE (z-index unifies, --vh100 dvh, verrous de scroll, filet anti-zoom 16px, extension tactile gk-badge)
      - public/ka-agent.js : agent corrige (safe-area, textarea 16px, plein ecran <=640px + verrou scroll)
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 5 files +259 −19
  6. Tue, Aug 18, 2026 1

    1. docs/connecteurs : snapshot post-cycle complet (220 sources, 42 min)
      …
      Régénération des fiches sur l état stable après le premier cycle horaire
      complet à 220 sources (12:46-13:28) : 8 862 offres actives.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 239 files +1,542 −1,537
Menu

Theme