SPB Git forge

spb/auto-ka

Public
61commits 1branches 0releases
14.4 MBsize
maindefault branch
12 days agolast push
Python 61.6% TypeScript 20.9% CSS 11.4% JavaScript 5.1% HTML 1.1%

page 2

  1. Wed, Aug 19, 2026 2

    1. 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>
      Simon-Pierre Boucher committed 1 mo ago · 7 files +1,759 −337
    2. 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>
      Simon-Pierre Boucher committed 1 mo ago · 4 files +289 −28
  2. Tue, Aug 18, 2026 4

    1. 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>
      Simon-Pierre Boucher committed 1 mo ago · 22 files +956 −122
    2. 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>
      Simon-Pierre Boucher committed 1 mo ago · 33 files +2,374
    3. 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>
      Simon-Pierre Boucher committed 1 mo ago · 9 files +864 −18
    4. 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>
      Simon-Pierre Boucher committed 1 mo ago · 11 files +1,166 −40
  3. Mon, Aug 17, 2026 7

    1. Simon-Pierre Boucher committed 1 mo ago · 2 files +84 −203
    2. 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>
      Simon-Pierre Boucher committed 1 mo ago · 2 files +235
    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. kapdf : pas d en-tête/pied sur la couverture (correctif moteur commun)
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +2 −2
    5. 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>
      Simon-Pierre Boucher committed 1 mo ago · 8 files +2,204 −148
    6. 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>
      Simon-Pierre Boucher committed 1 mo ago · 5 files +24 −4
    7. 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>
      Simon-Pierre Boucher committed 1 mo ago · 11 files +587 −111
  4. Thu, Aug 13, 2026 2

    1. 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>
      Simon-Pierre Boucher committed 1 mo ago · 7 files +137 −35
    2. 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>
      Simon-Pierre Boucher committed 1 mo ago · 15 files +2,424 −27
  5. Wed, Aug 12, 2026 6

    1. 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>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +13 −1
    2. 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>
      Simon-Pierre Boucher committed 1 mo ago · 10 files +869 −57
    3. Fiche véhicule : no-cache sur index.html + durcissement mobile (VIN, titre, équipements)
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 2 files +9 −1
    4. README : métriques à jour (15 970 véhicules, 124 sources) + ignore WAL SQLite
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 4 files +11 −9
    5. 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>
      Simon-Pierre Boucher committed 1 mo ago · 23 files +2,337 −87
    6. 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>
      Simon-Pierre Boucher committed 1 mo ago · 54 files +10,877