SPB Git forge

spb/immo-ka

Public

Immo-Ka — agrégateur des propriétés à vendre au Québec (73 connecteurs, ~40 000 annonces, React+FastAPI)

112commits 1branches 0releases
125.4 MBsize
maindefault branch
13 days agolast push
Python 47.5% HTML 27.9% TypeScript 15.5% CSS 7.2% JavaScript 2%

page 3

  1. Tue, Aug 18, 2026 4

    1. Docs connecteurs : générateur rejouable + 46 fiches standardisées (41 nommées, 4 familles dynamiques, INDEX)
      …
      Croise data/sources.json + registres d agences + introspection du code +
      BD live (complétude GPS/photos/prix/CAC/SDB/année-rôle/taxes, sync_log).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 47 files +2,977
    2. vraiprix_local : réparation set-based des replis rôle dans enrich_role
      …
      Filet de sécurité idempotent : ré-applique year_built/lot_sqft depuis le JSON
      vraiprix (annee_construction_role / superficie_terrain_role_m2) si une mise à
      jour de source les a remis à NULL (anciens process sans COALESCE). Récupéré au
      premier passage : 246 années + 1 920 terrains.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +28 −1
    3. Vague 2 : jointure au rôle d'évaluation, fiches Sutton/RLP/LesPAC enrichies, days_on_market, dédup par adresse
      …
      - vraiprix_local : le JSON vraiprix porte désormais le rôle d'évaluation
        (valeur_role/terrain/bâtiment, année, superficies officielles) ; repli des
        colonnes year_built/lot_sqft (provenance details.*_source=role, jamais pour
        le terrain des copropriétés) ; enrich_role() = backfill par id_provinc
        (64 972 fiches, year_built 20 %→67 %, lot_sqft 17 %→62 %) ; limite
        d'appariement par cycle 2000→5000 + enrich_role 20 000/cycle.
      - db.sync_source : COALESCE sur year_built/area_sqft/lot_sqft (les
        enrichissements ne sont plus écrasés par null).
      - Sutton (v5) : année (Construction :), Aire habitable/Terrain superficie,
        taxes, évaluation municipale, frais de copropriété, revenus (plex).
      - Royal LePage (v2) : parse complet direct (sans Firecrawl) — description
        (Remarques), Bâti en, superficies (garde-fou aménagée≤6000 pi²), salles
        d'eau, taxes/évaluations, frais de condo, listed_at, galerie complète.
      - LesPAC (v2) : toutes les boîtes de caractéristiques (pas juste la 1re),
        salles de bain/d'eau, superficies + lot depuis Dimension du terrain,
        cityLabel, listed_at (publicReleaseTimestamp).
      - Kijiji : details.listed_at (activationDate). DuProprio : lat/lng du JSON-LD.
      - API : days_on_market calculé (first_seen) sur listings + fiche.
      - Dédup 3e passe : inter-sources par adresse normalisée + type + prix ±1 %
        (garde-fous : apt/unité identique requis, même source en double = ignoré,
        autorité primaire > _ag_ > petites annonces) — 1 748 doublons masqués.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 11 files +498 −31
    4. Connecteurs : clé Algolia auto-extraite (Barnes), taxes/éval RE/MAX, specs Via Capitale, Kijiji étendu
      …
      - barnes_quebec : identifiants Algolia extraits du HTML public (PHPVars) avec
        cache process 6 h + repli sur la dernière clé connue et ré-extraction sur
        échec — résilient aux rotations de clé (403 du 2026-08-15).
      - remax_quebec : le tableau de caractéristiques est rendu « Libellé | Valeur »
        (l'ancien ordre inverse ne captait que du bruit) — parseur corrigé, section
        « Détails financiers » captée (taxes municipales/scolaires + évaluation
        municipale terrain/bâtiment/année), libellés étendus, clé de cache v3→v4
        (re-parse progressif dans le budget par cycle).
      - via_capitale : enrichissement fiche détail complet (chambres, salles de
        bains, superficies, année, taxes, évaluations) via meta + tableau aplati ;
        requête directe d'abord, repli Firecrawl stealth sur challenge Cloudflare ;
        budget IMMOKA_VIACAP_DETAIL_LIMIT (défaut 200/cycle) ; clé v2→v3.
      - kijiji : _ATTR_LABELS étendus (terrain/acres, année, stationnement, meublé,
        visites), « Size (acres) » (texte libre) → lot_sqft, salles de bains « 1.5 »
        désormais captées ; clé v1→v2.
      - _detailutil.centris_details : ordre « Libellé | Valeur » prioritaire +
        garde-fous (libellés voisins/en-têtes de section jamais pris pour valeurs,
        format minimal exigé pour taxes/évaluation/année/superficies).
      - schema.finalize : promotion details → colonnes (Année de construction →
        year_built, Superficie habitable/du terrain → area_sqft/lot_sqft) avec
        parse_year strict (normalize.py). Backfill one-shot exécuté sur la base :
        year_built +95, area_sqft +792, lot_sqft +275.
      - db.get_stale_detail + repli « périmé plutôt que rien » (_detailutil.enrich,
        remax _enrich) : un bump de version de clé ne déshabille plus les fiches
        hors budget, et un échec transitoire n'écrase plus un payload valide.
      - Registres : via_ag_dumontroyal (0 inscription à l'API source.immo),
        remax_ag_pro_commercial (redirige vers remax-alliance.ca — doublon) et
        remax_ag_solutions (nancyforlini.com migré hors Centris) désactivés
        (disabled+note) ; loaders ignorent disabled ; sources.json à jour ;
        95 → 92 connecteurs.
      Simon-Pierre Boucher committed 1 mo ago · 14 files +405 −61
  2. Mon, Aug 17, 2026 10

    1. Simon-Pierre Boucher committed 1 mo ago · 2 files +74 −91
    2. Ajout du fichier statique ka-agent.js (widget KA Agent)
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +233
    3. Câblage du widget KA Agent (bulle de chat Groupe KA)
      …
      Ajout des balises window.KA_AGENT={site:"immo-ka"} et /ka-agent.js
      en fin de <body> de frontend/index.html — propagées au gabarit SSR
      de seo.py via dist/index.html (aucun doublon, seuls les meta du head
      sont strippés).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +2
    4. 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
    5. 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
    6. Page /stats : tableau de bord analytique + rapport PDF Groupe-KA
      …
      - immoka/stats.py : /api/stats/dashboard (contrat ka-stats, cache 5 min) —
        KPI (actives, nouvelles, retirées, prix moyen/médian, prix/m², villes,
        connecteurs, tension retraits/nouvelles), séries quotidiennes reconstruites
        (actives/nouvelles/retraits), répartitions (types, fourchettes de prix,
        chambres), géo par région (fusion accents/casse), heatmap, top villes,
        délai de présence par ville, records. Deltas seulement si la période
        précédente a été observée en entier — rien d'inventé.
      - immoka/kapdf.py (copie du kit ka-ui) + /api/stats/report : PDF estampillé
        Groupe-KA (complet / synthèse), wordmark Immo·Ka, accent #e23744.
      - frontend/src/pages/Stats.tsx : page réécrite sur le kit ka/stats/kacharts —
        PdfButton + fraîcheur, KPI auto-fit, sélecteur de période (refetch),
        courbes, anneau, barres, géo, heatmap, tableaux triables, records ;
        bloc Vrai-Prix conservé. Zéro débordement à 360/768/1440.
      - fpdf2 ajouté aux dépendances.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 8 files +2,285 −132
    7. Titre « Un service Groupe KA », icônes et image OG servies à la racine
      …
      - Titre SSR de l accueil : « Immo-Ka — N propriétés à vendre au Québec
        · Un service Groupe KA » (partie « toutes les agences » raccourcie).
      - ka-assets/ -> frontend/public/ (og.png, favicon.svg, apple-touch-icon.png) ;
        favicon data-URI remplacé par /favicon.svg + apple-touch-icon.
      - og:image absolue 1200x630 par défaut + twitter:card/twitter:image sur
        toutes les pages SSR (les fiches gardent leur photo) ; balises statiques
        d index.html retirées du gabarit pour éviter les doublons.
      - Vérifié : aucun débordement horizontal à 360/768/1024/1440 px.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 5 files +20 −4
    8. Harmonisation Groupe KA : design system ka-ui, badge + footer communs, page /contact, SSO KA ID au header
      …
      - ka-ui vendoré dans frontend/src/ka/ (tokens.css, ecosystem.json, KaFooter, GroupeKaBadge) ;
        tokens.css importé AVANT styles.css dans main.tsx
      - styles.css : socle dédupliqué (palette papier/encre, grain, selection, focus
        viennent de ka/tokens.css) ; seule surcharge locale = accent CERISE Immo-Ka
        (--accent #e23744 + alias --lime/--lime-soft) ; classes métier conservées ;
        styles Profil (carte de membre KA-ID), Contact et pages légales ajoutés
      - Header : badge « Un service Groupe KA » (desktop + menu mobile), bouton
        « Se connecter avec KA » + lien « Créer un compte » -> groupe-ka.com/connexion ;
        zone compte -> /profil quand connecté
      - Footer local remplacé par KaFooter (siteId immo-ka, pages légales locales)
      - Nouvelles routes SPA : /contact (ecosystem.json : 3 courriels + rôles,
        avertissement agrégateur, hub, écosystème), /profil, /conditions, /confidentialite
      - api.ts : fetchMe/logout/User/Socials + favoris hub (fetchFavorites,
        toggleFavorite, favItemFromListing) — account.tsx et Profil.tsx enfin branchés
      - seo.py : /contact ajouté aux pages statiques SSR
      - index.html : title « Immo-Ka — Un service Groupe KA », theme-color encre KA
      - tsconfig : exclusion du code mort non référencé (src/kamaps, pages/Category.tsx —
        dépendait de @groupe-ka/ka-maps absent de node_modules)
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 12 files +810 −86
    9. Simon-Pierre Boucher committed 1 mo ago · 22 files +1,861 −872
    10. fix(glmc): pagination ?pg=N (176 fiches vs 60) + exclusion section Vendus
      …
      Le plugin mw-centris pagine par ?pg=N, pas ?_paged (qui renvoyait
      toujours les 60 premieres). Coupe la section Vendus avant parsing.
      
      Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +9 −6
  3. Sun, Aug 16, 2026 1

    1. feat: 9 nouveaux connecteurs immobiliers QC
      …
      eXp Realty Quebec (~1000, SSR ?pages=N), Chambre immo Outaouais
      (avecuncourtier ~4000), The Agency Montreal (source.immo), Charisma
      (~840), GLMC/Bas-St-Laurent, BHHS Quebec, Image/Saguenay, Charlevoix
      (imcha), Immeubles Contact/Alma. Tous en source_id *_ag_* (dedup Centris).
      Registres sources.json + source_immo_agencies.json mis a jour.
      
      Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 10 files +1,510 −521
  4. Thu, Aug 13, 2026 4

    1. feat: SEO complet (rendu serveur immoka/seo.py) + README détaillé avec captures
      …
      - Rendu HTML côté serveur sur chaque route via le catch-all : title/meta/canonical/og
        uniques, JSON-LD (RealEstateListing+Offer+BreadcrumbList, WebSite+SearchAction),
        contenu et liens internes dans #root que React remplace au montage
      - Pages programmatiques /a-vendre/{ville}[/{type}] et /type/{type} : stats
        (médiane/moyenne), liste paginée 48/page, maillage interne, seuil 3 annonces
      - Fiches /propriete/{uid}/{slug} : 301 depuis l'uid nu, 410 Gone si retirée,
        404 réel si inconnue (fini les soft-404)
      - sitemap.xml (index + fiches-N/villes/villes-types/types/pages, lastmod, cache 1 h),
        robots.txt, /api/seo/resolve
      - Frontend : routes SPA miroirs (pages/Category.tsx), slugs partagés Python/TS,
        document.title dynamique, liens de cartes avec slug
      - README refait : badges à jour (57 900+ propriétés, 95 connecteurs, 22 bannières),
        9 captures d'écran fraîches (accueil, grille, carte, fiche, quartier, page ville,
        stats, agences, mobile), sections kit complet / architecture / SEO / API / structure
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 19 files +1,193 −61
    2. Simon-Pierre Boucher committed 1 mo ago · 1 file +18 −1
    3. docs: ka-maps-immo-ka.md — intégration Immo-Ka Maps
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +29
    4. Immo-Ka Maps — carte propulsée par Ka Maps (framework Groupe Ka, moteur Mapbox 3D)
      …
      Frontend : MapView réécrit sur @groupe-ka/ka-maps — style Mapbox Standard
      3D par défaut + bouton 2D, pastilles encre/blanc (rouge #e23744 = sous
      l'estimation Vrai-Prix), grappes compte + prix moyen clampé,
      « Rechercher dans cette zone », aperçu React (fin du popup HTML),
      sync liste↔carte, caméra dans l'URL, badge Immo-Ka Maps · Groupe Ka,
      recherche debouncée. PropertyMap (fiche) porté sur le même fond Ka.
      map/immokaStyle.ts et map/pills.ts supprimés (remplacés par le framework).
      Backend : /api/listings.geojson accepte bbox/limit + tous les filtres de
      /api/listings et renvoie totalGeocoded/totalMatching ; index
      idx_listings_geo(lat,lng) ; PRAGMA optimize au cycle d'ingestion.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 35 files +2,609 −766
  5. Wed, Aug 12, 2026 13

    1. Simon-Pierre Boucher committed 1 mo ago · 10 files +260 −40
    2. Simon-Pierre Boucher committed 1 mo ago · 4 files +141 −4
    3. Simon-Pierre Boucher committed 1 mo ago · 1 file +61 −1
    4. feat: connecteurs Kijiji, LesPAC et Ubee (immobilier à vendre, Québec seulement)
      …
      - kijiji.py : c35 maisons + c643 condos + c641 terrains, l9001 (QC), __NEXT_DATA__/Apollo, prix en cents normalisés, GPS natif
      - lespac.py : b37-b42 achat-vente province entière (exclut location et vente d'entreprises), searchResponse embarqué, caractéristiques structurées
      - ubee.py : API anonyme SearchProperties (Seller, résidentiel+commercial), galerie Cloudinary complète, superficies m²→pi²
      
      Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 5 files +643 −333
    5. feat: carte propriété dédiée (zoom, marqueur pulsant, anneaux 5/15 min à pied) + stats survalorisation vs Vrai-Prix par bannière
      …
      - PropertyMap.tsx : la fiche montre enfin la carte centrée sur LA propriété (l'ancienne mini-carte passait un filtre q ignoré par l'API)
      - /api/stats : écart médian prix demandé vs estimation Vrai-Prix par bannière (médiane, P25-P75, % sous/juste/survalorisé)
      - Stats.tsx : jauges divergentes par bannière + répartition
      
      Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 6 files +244 −5
    6. Simon-Pierre Boucher committed 1 mo ago · 2 files +3 −1
    7. fix+feat: carte éditoriale contrastée + correctifs « aucun point »
      …
      - gzip sur l'API (GeoJSON 20 Mo → 2,3 Mo : les points s'affichent enfin sur connexion normale)
      - repli roundRect (Safari < 16) + addPills non bloquant : les points survivent à tout
      - style éditorial : relief au zoom province, eau bleue franche, forêts vertes, autoroutes rouges Immo-Ka, primaires jaunes, bâtiments terracotta, étiquettes fr renforcées
      
      Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 4 files +157 −88
    8. feat: carte 100% maison signée Groupe Ka — style vectoriel from scratch, pastilles de prix étirables, bonnes affaires Vrai-Prix
      …
      - map/immokaStyle.ts : fond de carte écrit à la main (schéma OpenMapTiles, tuiles libres) — papier chaud, eau froide, autoroutes blush, étiquettes fr
      - map/pills.ts : pastilles de prix générées au canvas (stretchable images, icon-text-fit), variante rouge « sous l'estimation Vrai-Prix »
      - MapView : clusters rouges, sélection, popup badge bonne affaire, légende, badge + attribution « Cartographie Groupe Ka »
      - web.py : vp (valeur Vrai-Prix) dans listings.geojson
      
      Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 5 files +279 −2
    9. Simon-Pierre Boucher committed 1 mo ago · 6 files +455 −20
    10. feat: +agences source.immo (Domicilia…), KW Prestige, Scrapfly (js_scenario), géocodage Adresses Québec, fix double-titre quartier
      …
      - 5 agences source.immo (Domicilia 1427, Immodev, Réalta, Gaillardetz…) via balayage clients source.immo
      - KW Prestige (277 fiches via sitemap Centris) → 81 connecteurs
      - base.py : méthode scrapfly() complète (js_scenario scroll, proxy_pool, rejeu API JSON via ASP)
      - geocode : Adresses Québec (MERN) prioritaire + visibles seulement (10× plus rapide)
      - fix fiche : bloc « Le quartier » (plus de double titre) déplacé après les infos propriété (ordre mobile)
      - Coldwell Banker / eXp : documentés a_faire (feed non-QC / gated), notes techniques
      
      Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 7 files +330 −20
    11. feat: thème rouge, sous-agences, quartier StatCan, estimation Vrai-Prix, géocodage
      …
      - Palette rouge (distincte de Lou-Ka), pagination 12/page, page Sources par sous-agence
      - 74 connecteurs (DuProprio, Via Capitale portail, Royal LePage par bureau, C21 sous-agences…)
      - Bloc quartier (recensement 2021, crime, chaleur, proximité — données StatCan/INSPQ)
      - Estimation Vrai-Prix par fiche (valeur + fourchette + confiance + lien analyse)
      - Géocodage Adresses Québec + Nominatim ; dédup pré-calculée (perf) ; SQLite WAL
      
      Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 27 files +1,774 −138
    12. Simon-Pierre Boucher committed 1 mo ago · 56 files +9,175