Python 61.6%
TypeScript 20.9%
CSS 11.4%
JavaScript 5.1%
HTML 1.1%
-
Wed, Aug 19, 2026 2
-
Stats v2 : /stats ultra complet (module commun Groupe KA v2) + 5 rapports PDF
…
- kit vendorisé mis au niveau v2 canonique (kacharts.tsx, kapdf.py, SPEC.md) - statsdash : 10 KPI avec sparklines + deltas honnêtes, 6 jauges de complétude, 4 séries quotidiennes (inventaire/nouveaux/retraits/prix), multi-courbes prix moyen top 4 marques, empilées nouveaux par source, 6 répartitions avec deltas (marques, carburant, vendeurs, boîte, carrosserie, année), distributions prix (5 000 $) et km (25 000 km), géo, heatmap calendrier + horaire 7×24, 5 tableaux (marques, modèles, villes, concessionnaires, sources & fraîcheur), 8-9 records — cache 5 min - /api/stats/report : 5 modes (complet, synthese, tendances, repartitions, donnees ; inconnu → complet), filename(platform, period, mode) - page /stats : jauges, VBar, multi-courbes, empilées, histogrammes, StatSummary, heatmap horaire, menu PdfButton 5 rapports Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Mobile : hamburger standard KA, verrou de scroll du menu compte, anti-zoom iOS, cibles tactiles
…
- App.tsx : menu compte — verrou du scroll d arriere-plan, fermeture Escape et tap exterieur au niveau document (le backdrop fixed est confine au header par son backdrop-filter), aria-haspopup=menu sur le bouton. - App.tsx : navigation mobile structuree — hamburger standard KA (modele food-ka) : bouton 44x44 aria-expanded, panneau .mobile-menu sous le header (0 -> 480 px), backdrop rendu en FRERE du header (backdrop-filter = containing block), verrou scroll, fermeture route/backdrop/Escape, items >= 44 px, padding-bottom safe-area ; remplace la bande scroll-x sous 760 px. - styles.css : CSS du hamburger (seuil 760 px, z-index --z-overlay/--z-modal, .header.menu-open remonte au-dessus du backdrop) ; menu compte bascule sur les variables --z-* ; extension tactile ::after du logo (102x32) ; regles anti-zoom iOS generalisees >= 16 px (selects #f-sort et cie, inputs). - ka/tokens.css : section SOCLE MOBILE OBLIGATOIRE (echelle --z-*, --vh100, verrou ka-scroll-lock, filet anti-zoom iOS). - public/ka-agent.js : agent KA corrige (safe-area, textarea 16 px, plein ecran auto <=640 px + verrou scroll). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Tue, Aug 18, 2026 4
-
Vague 3 : grands portails — AutoTrader.ca/AutoHebdo, Otogo.ca, CarGurus.ca
…
- autotrader : plateforme AutoScout24 (__NEXT_DATA__ des SRP /cars/reg_qc), occasion QC triée récent d abord, fenêtre AUTOKA_AUTOTRADER_MAX (déf. 2 000), direct + repli Scrapfly ASP sans render_js sur 403 (0 crédit en régime normal) - otogo : API JSON publique /api-search/ (découverte via bundles Nuxt), inventaire complet ~23 700 annonces, VIN ≈99 % + GPS exact du vendeur, partition par tranches de prix (profondeur API 1 000/requête), AUTOKA_OTOGO_MAX (déf. 0 = tout), 0 crédit externe - cargurus : searchResults.action JSON via Scrapfly ASP (DataDome), VIN 100 % + deal rating/dealScore/expectedPrice dans details, cap AUTOKA_CARGURUS_MAX (déf. 500) ≈ 11 crédits/sync - normalize : nearest_city(lat, lng) — ville la plus proche depuis villes_gps.json, nom accentué restauré via sources.json (repli Otogo) - sources.json : 142 sources (3 portails, autorité dédup type=portail) - docs connecteurs régénérés (30 fiches) + historique Vague 3 Premier sync : 26 164 annonces ajoutées, dédup VIN 6 655 groupes / 8 438 doublons masqués (otogo→concessions directes : 5 847) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
docs: documentation standardisée des connecteurs (générateur + 27 fiches module + 4 transverses)
…
scripts/gen_connector_docs.py croise data/sources.json, l en-tête mécanique des modules connecteurs et la BD live (volumétrie, complétude par champ, sync_log) pour régénérer docs/connecteurs/ (INDEX.md + fiches). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Vague 2 : dédup VIN inter-sources, Kijiji particuliers, rappels TC, coordonnées concessionnaires
…
- dedup.py : dédoublonnage par VIN exact (17 car. valides) recalculé après chaque cycle ; autorité concessionnaire direct > portail > marketplace (champ type de sources.json), canonique garde dup_sources, doublons masqués via dup_of (colonnes additives + index vin/dup_of) ; filtre dup_of IS NULL sur /api/vehicles, facets, stats et pages SEO - connectors/kijiji.py : annonces de PARTICULIERS kijiji.ca c174/l9001 (kijijiautos.ca n existe plus — domaine SERVFAIL) : __NEXT_DATA__/Apollo, attributs canoniques, GPS exact, VIN/Carfax quand présents, ~3 000 annonces - recalls.py : rappels Transports Canada (dump CSV open data mensuel, 109 186 lignes / 16 969 rappels), croisement make/model/year + GET /api/vehicles/{uid}/recalls - dealers.py : coordonnées des 138 sources (JSON-LD AutoDealer + replis, 1 page/site, cache en base) + GET /api/dealers - /api/stats : vin_duplicates_masked, recalls_total, dealers_total Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> -
Enrichissement connecteurs : Carfax, détails AED/LPDG, verticale moto, photos Magnetis, GPS concessionnaires
…
- Carfax : D2C extrait le lien vhr.carfax.ca du badge de la page (carprooflink JSON presque toujours vide) — clé cache v3 ; SM360 mappe carProofId GraphQL (souvent vide chez SM360, mais mappé quand publié) — clé v3 ; Occasion Charlevoix vérifié + repli vhr.carfax.ca. - automobileendirect : details.listed_at (jours sur le marché), historique d accident (structural_damage/total_damage), promotions, rabais_roulez_vert, third_chance ; fuelConsumption (déjà caché) enfin écrit -> fuel_city/ fuel_hwy_l_100km. - Moto PowerGo (13 sources) : parsing des specs HTML des pages détail (spec-vin/category/engine-size/submodel/color — le JSON-LD ne les a pas) ; clé cache v2 ; carburant (Essence/Électrique), rouage Propulsion, boîte Automatique (scooters), carrosserie=catégorie ; regular_price/rebate (basePrice vs salePrice) et vidéo du listing. - magnetis_dealers : nœud [Product, Car] relocalisé dans un @graph — galerie S3 + VIN + description de nouveau extraits ; clé cache v2. - leprixdugros : rebate numérique + regular_price reconstitué, certified/ econoplus, payments/weekly mappés avec garde-fous (sentinelle 9999999). - Géolocalisation : colonnes lat/lng (migration additive + index), data/villes_gps.json (216 villes QC), city_gps() dans normalize, remplissage au finalize() + backfill des existants (97 % des actifs). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Mon, Aug 17, 2026 7
-
Ajout du widget KA Agent (bulle de chat IA Groupe KA)
…
Sert /ka-agent.js depuis le statique du frontend et injecte les balises window.KA_AGENT={site:"auto-ka"} + <script src=/ka-agent.js defer> dans frontend/index.html — propagées automatiquement aux pages SSR via le gabarit dist/index.html chargé par autoka/seo.py (aucun doublon). 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>
-
kapdf : pas d en-tête/pied sur la couverture (correctif moteur commun)
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Page /stats refaite : tableau de bord analytique Groupe KA + rapport PDF
…
- autoka/statsdash.py : moteur du dashboard (contrat ka/stats/SPEC.md) — KPI avec deltas vs période précédente, séries quotidiennes reconstruites du cycle de vie réel des annonces (inventaire, nouveautés, prix moyen), répartitions (carburant, boîte, marques, années), géo par région, heatmap, tableaux (marques/modèles/concessionnaires), records ; cache serveur 5 min par période, aucun delta inventé avant le début réel des données. - API : GET /api/stats/dashboard?period=… et GET /api/stats/report (PDF Groupe-KA complet ou synthèse, filename normalisé groupe-ka_…). - autoka/kapdf.py : moteur PDF commun fpdf2 (couverture wordmark Auto·Ka accent #ff5a2a, sommaire, KPI, graphiques vectoriels, tableaux zébrés, records, page contact) + substitutions latin-1 (≤ ≥). - frontend : Stats.tsx réécrite sur le kit ka/stats/kacharts.tsx — PdfButton + fraîcheur, sélecteur de période (refetch), KPI, courbes interactives, anneau, barres, heatmap calendrier, DataTables triables, records ; mobile 360/768/1440 vérifié. - requirements.txt : fpdf2. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Titre accueil « Un service Groupe KA » + icônes et balises OG/Twitter par défaut
…
- seo.py : titre SSR de l accueil suffixé « · Un service Groupe KA » ; render_page injecte désormais toujours og:image + twitter:card/image (og.png 1200×630 par défaut, photo du véhicule sur les fiches) en dédoublonnant les balises statiques du gabarit - index.html : favicon.svg + apple-touch-icon + og:image/twitter:image absolus (https://www.auto-ka.com/og.png) - ka-assets/ déplacé vers frontend/public/ (servi à la racine du site) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Harmonisation Groupe KA : socle ka-ui, badge, KaFooter, page /contact
…
- Vendorisation du package ka-ui dans frontend/src/ka/ (tokens.css, ecosystem.json, KaFooter, GroupeKaBadge) ; tokens importés AVANT le CSS local dans main.tsx - styles.css allégé : le :root ne garde que l accent orange brûlé d Auto-Ka (--accent/--accent-soft/--accent-deep/--on-accent + alias --lime), socle dédupliqué, couleurs en dur pointées vers les tokens, cibles tactiles 44 px - Header : badge « Un service Groupe KA » à côté du logo (desktop) + barre mobile sous le ticker ; nav défilante sans débordement - Footer : remplacé par le KaFooter commun (siteId auto-ka) - Nouvelle page /contact (ecosystem.json : 3 courriels + rôles, avertissement agrégateur, lien hub, liste des sites) + rendu serveur SEO + sitemap - Profil déconnecté : lien « Créer un compte » vers groupe-ka.com/connexion - index.html : titre « Auto-Ka — Un service Groupe KA » Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Thu, Aug 13, 2026 2
-
README refait au complet — métriques live + 6 captures + sections SEO/KA ID
…
- Métriques de production à jour : 17 698 véhicules (17 082 autos, 591 motos, 25 scooters), 138 concessionnaires, 83 marques, 72 villes, ~16 photos/véh., prix 99,6 %, VIN 95,1 %, 18 475 URLs indexables - 6 captures fraîches (accueil, fiche véhicule, stats, motos, page programmatique Toyota, mobile) prises sur www.auto-ka.com - Nouvelles sections : référencement programmatique (tableau des gabarits d'URL, JSON-LD, 410/404, sitemaps), verticales motos/scooters, compte KA ID + favoris hub, mobile - Badges SEO/KA ID, architecture mermaid avec couche SSR + Googlebot, principe n°6 « honnêteté envers les moteurs » Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
SEO : rendu serveur complet + référencement programmatique
…
- autoka/seo.py : HTML complet servi dès la 1re requête (meta uniques, canonical, og:, hreflang fr-CA, JSON-LD Car/Offer/ItemList/BreadcrumbList, contenu dans #root que React remplace au montage) - Pages programmatiques : /usagees/{marque}[/{modele}], /region, /ville, /carrosserie (liste blanche), /motos/{marque}, /scooters/{marque} - Fiches : URL lisible /vehicule/{uid}/{slug} (301 depuis l'uid nu), 410 Gone si retiré/vendu, 404 réels partout (fin des soft-404) - sitemap.xml dynamique (index + pages + fiches par 10 000, lastmod) + robots.txt ; GZipMiddleware - Frontend : routes SPA miroirs (SeoListing + __SEO_CTX__), slugs partagés Python/TS, document.title dynamique, filtres verrouillés - Inclut aussi le travail SSO KA ID + favoris hub déjà en prod (auth.py, hubfav.py, hubprofile.py, account.tsx, FavButton, Profil) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Wed, Aug 12, 2026 6
-
Correctif mojibake descriptions moto : forcer UTF-8 sur les pages détail PowerGo
…
Les serveurs PowerGo n'envoient pas de charset ; requests retombait sur ISO-8859-1 (« Numéro » au lieu de « Numéro »). 119 fiches re-crawlées propres après purge du cache détail. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Verticales motos et scooters : onglets dédiés + 13 concessionnaires
…
- Champ kind (auto/moto/scooter) : schéma, migration SQLite, index, API (/api/vehicles?kind=, facets, stats filtrées autos) - Plateforme PowerGo découverte (JSON public vehicles-inventory-fr-items + JSON-LD détail) : 12 concessionnaires moto/powersports + Moto Ducharme (Magento) — 596 motos + 24 scooters - moto_dealers.py : PowerGoMotoConnector, D2CMotoConnector (prêt), détection scooter (segment/catégorie/titre), marques moto canoniques (KTM, Harley-Davidson, CFMOTO…) sans impact sur split_title autos - Frontend : onglets Autos / Motos / Scooters, héros par verticale, facettes par kind Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Fiche véhicule : no-cache sur index.html + durcissement mobile (VIN, titre, équipements)
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
README : métriques à jour (15 970 véhicules, 124 sources) + ignore WAL SQLite
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Enrichissement des fiches + Scrapfly + 25 concessionnaires + dashboard Stats/PDF + mobile
…
- Scrapfly intégré comme backend anti-blocage (base.py get_scrapfly) - Fiches enrichies : galeries complètes (D2C /js/json/<id>.json, SM360 GraphQL, AED photos.all, HGrégoire via Scrapfly), équipements 44 %, descriptions 72 %, moteur 66 % — photos 4 -> 11 en moyenne - +25 concessionnaires (125 connecteurs) : Côte-Nord, Bas-Saint-Laurent, île de Montréal, Charlevoix, Gaspésie — 15 970 véhicules, 124 sources - Page Stats : tuiles héros, histogrammes prix/km/années, tops marques/régions/modèles, donuts carrosseries/carburants (palette validée daltonisme), baisses de prix, infobulles + vues tableau - Rapport PDF téléchargeable (/api/stats/rapport.pdf, reportlab) - Fiche véhicule : panneau Équipements, bouton Carfax, ligne Moteur - Rendu téléphone : filtres compacts, tuiles 2 col., graphiques défilables, entêtes empilés Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Auto-Ka — agrégateur de voitures usagées du Québec
…
13 713 véhicules · 99 concessionnaires · 18 régions. Backend FastAPI + SQLite (diff engine, historique de prix), frontend React 18/Vite, 95+ connecteurs à la source groupés par plateforme (D2C Media, SM360, AMVOQ, EvalAuto, Convertus, ADWS, customs), Firecrawl pour les sites derrière Cloudflare. Déployé sur M4M64b via PM2 + ngrok → www.auto-ka.com. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-