- 459commits
- 1branches
- 0releases
- 77.8 MBon disk
- maindefault branch
- 4 days agolast push
-
Mon, Sep 7, 2026 1
-
feat(fiche): refonte premium mobile-first de la fiche d'offre (2026-09-07)
…
Même socle que les fiches Lou-Ka v3 / Immo-Ka v3 (frontend/src/fiche/, préfixe jk-, tokens --jk-*, fond papier, cartes blanches bord 1 px, cyan réservé aux CTA/salaire ; header encre conservé en version compacte) : héro (logo + employeur · lieu, salaire en exergue + équivalent annuel, capsules marché / nouveau / offre directe, titre, actions favoris / partage / Postuler) ; « En bref » déterministe (salaire vs médiane de la catégorie, source directe ou portail, exigences, mode/type/niveau, fraîcheur et date limite, volume de l'employeur, avantages) ; navigation sticky ; « Salaire et marché » (KPI, jauge P25–P75 du point médian, historique du salaire affiché, méthodologie — jamais d'estimation) ; « Le poste » (grille icône/valeur, rangées, avantages, description tronquée, champs bruts en accordéon) ; « Où travailler » (carte OSM) ; Dossier de l'offre ; Sources et méthodologie. CTA sticky après le héro, aside desktop sticky, « Demander à Ka » via le widget KA Agent. Header compact sur /emploi/ (favoris + partage via fiche/current.ts, badge masqué). Rangées d'offres de la liste : surface blanche, bord 1 px, ombre légère au survol. Icons.tsx (pictos partagés) ajouté. Aucun order CSS ; pas de scrollIntoView à l'ouverture. Scripts QA : preview.mjs, check-order.mjs, shots.mjs, interactions.mjs (Playwright via lien vers vrai-prix/node_modules). Validé sur M3U96a : tsc + vite build, check-order OK, interactions OK, captures 6 largeurs ; dist basculé, aucun changement API.
-
-
Tue, Aug 25, 2026 2
-
Refonte visuelle majeure du front-end : design editorial premium
…
- Hero : halo cyan, pastille « marche en direct », recherche centrale (barre blanche a ombre decalee cyan) + chiffres live (offres, employeurs, % salaire affiche) - Filtres : rail de selecteurs discrets sur desktop (pilules, etat actif encre/cyan), panneau bas coulissant sur mobile, puces de filtres actifs retirables + « Tout effacer » - Offres : fini les cartes bordees — rangees editoriales a filets fins, titre Space Grotesk, salaire en exergue cyan a droite avec equivalent annuel, metadonnees calmes en mono, barre d'accent au survol ; favoris alignes sur la meme structure - Fiche : mise en page ouverte (plus de grosse boite), metriques en blocs a filet superieur, CTA « Postuler » en accent - Tableau employeurs allege (filets fins), pagination sobre en mono, menu mobile avec entree en cascade, prefers-reduced-motion respecte - Bulle KA Agent masquee quand un panneau plein ecran est ouvert Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Phase 3 — enrichissement des 1050+ connecteurs (exigences, séniorité) + refonte du display des offres avec métriques claires
…
Backend (enrichissement central via finalize() -> tous les connecteurs) : - normalize.py : extract_requirements() (années d'expérience, scolarité, langues exigées, FR/EN, bornes de plausibilité), parse_seniority() (stage/junior/intermédiaire/senior/direction : titre, libellés ATS, années d'expérience), en-têtes d'avantages élargis - schema.py : champ seniority + branchement des extracteurs (setdefault, jamais d'écrasement des valeurs ATS) - db.py : colonne seniority (migration auto) dans insert/update - web.py : filtre + facette séniorité, salary_context (médiane/quartiles de la catégorie + écart % de l'offre, cache 10 min), employer_jobs, median_salary_year dans /api/stats - scripts/backfill_enrich.py : backfill exécuté — 23 680 offres scannées, 16 606 exigences ajoutées (26 % -> 77 %), 10 966 séniorités (0 -> 46 %) - tests/test_enrich.py : 27 nouveaux tests (101 au total, tous verts) Frontend (display + métriques claires) : - JobCard : badge Nouveau (≤3 j), salaire avec équivalent annuel, badges séniorité/exigences/bilingue, pied fraîcheur · avantages · plateforme - Fiche : panneau « En un coup d'œil » (salaire vs marché avec barre interquartile P25-P75, expérience, scolarité, langues, fraîcheur, date limite), volume d'offres de l'employeur, historique du salaire affiché - Accueil : filtre séniorité ; api.ts : types + helpers (compactMoney, yearlyEquiv, daysSince) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Sun, Aug 23, 2026 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>
-
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>
-
-
Sat, Aug 22, 2026 2
-
page Publier : formulaire de dépôt au style sharp du groupe (étiquettes mono uppercase, champs bordure encre + focus accent décalé, grille 2 colonnes → 1 sous 700 px, couleur d'erreur --danger)
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
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>
-
-
Wed, Aug 19, 2026 2
-
API + frontend phase 2 : quarantaine qualité exclue des points d'accès publics (param quarantined=1 pour supervision), facettes régions administratives et langues, filtres region/language (liste + carte), stats.quarantined ; fiche offre enrichie (logo employeur, langue, région, avantages, bouton candidature directe apply_url, titre d'affichage normalisé) + filtres région/langue sur l'accueil ; scripts backfill_phase2 (réparations + peuplement) et mesure_baseline (avant/après audit)
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
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>
-
-
Tue, Aug 18, 2026 1
-
Badge « Offre directe » + stats directes/portails + canal de dépôt direct employeurs
…
- is_direct (source hors AGGREGATORS) exposé sur /api/jobs, /api/jobs/{uid} et jobs.geojson ; badge sobre sur les cartes d offres (frontend rebuild) - /api/stats : direct_jobs, direct_employers, direct_sources, portal_jobs, duplicates_hidden ; KPI « Offres directes employeur » au tableau de bord - POST /api/employeurs/offres : dépôt direct validé (pydantic + pot de miel), normalisé par JobPosting.finalize(), stocké source=depot-direct INACTIF en attente de modération ; page /employeurs (formulaire + explications) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Mon, Aug 17, 2026 2
-
Intégration complète à l'écosystème Groupe KA
…
- Design : ka-ui vendoré (tokens.css importé avant le CSS local), accent officiel cyan #0c8599 (fin du lime hérité), socle dédupliqué, badge « Un service Groupe KA » au header (desktop + mobile, zéro débordement à 360/768/1440), prefooter local + KaFooter commun, page /contact (ecosystem.json), title « Job-Ka — Un service Groupe KA », assets og.png/favicon.svg/apple-touch-icon + meta OG/Twitter absolues. - SSO KA ID : jobka/auth.py (client job-ka, cookie jobka_session, table users), bouton « Se connecter avec KA » au header, testé bout-en-bout jusqu'au hub (307 → /connexion, client reconnu). - Stats : /api/stats/dashboard (contrat SPEC, cache 5 min, salaires bornés 25–400 k$, série date_posted réelle) + /api/stats/report (PDF fpdf2 via jobka/kapdf.py, complet + synthèse), page /stats refaite sur ka/stats/kacharts.tsx ; /api/stats historique conservé pour le hub. - KA Agent : widget ka-agent.js câblé (site job-ka). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Fondation Job·Ka : socle backend, 5 connecteurs pilotes, frontend, tests
…
- Schéma JobPosting + normalisation (salaires $/h↔$/an, dates ISO, villes canoniques, catégories) — 25 tests unitaires - Pipeline hérité de Lou·Ka : diff par content_hash, délai de grâce, anti-dérive, expiration sur date limite, dédup union-find, géocodage Nominatim + Adresses Québec avec cache - Plateformes ATS : Workday (facette Québec auto-découverte), Lever, Greenhouse, SmartRecruiters — connecteurs pilotes CAE, Desjardins, Poka, Mistplay, Ubisoft (442 offres QC) - API FastAPI (/api/jobs, geojson, facets, sources, stats, /health) + frontend React/Vite (liste, fiche, carte MapLibre, stats) - Fixtures HTTP enregistrées/rejouées hors ligne + hook pre-commit d'en-tête d'auteur (section 17) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-