Immo-Ka — agrégateur des propriétés à vendre au Québec (73 connecteurs, ~40 000 annonces, React+FastAPI)
Python 47.5%
HTML 27.9%
TypeScript 15.5%
CSS 7.2%
JavaScript 2%
-
Mon, Aug 24, 2026 15
-
feat(fiche): bouton « Télécharger la fiche (PDF) » dans le héro — CTA secondaire + icône download
…
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
feat(pdf): fiche PDF complète — prix + verdict Vrai-Prix, photos, description, inclusions, caractéristiques, pièces, jauge Vrai-Prix + rôle foncier, historique de prix, inondation, air, hydro, commerces/transport, essence, quartier, références + QR
…
Nouveau immoka/pdffiche.py (reportlab canvas, style « éditorial sharp », pagination dynamique saut_page()/place(), sections conditionnelles _safe, photos compressées Pillow 1000px q78) + endpoint GET /api/listings/{uid}/pdf. reportlab + qrcode épinglés dans requirements.txt. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> -
feat(design): passe « éditorial sharp » sur la fiche — cartes, KPI, tableaux, pastilles
…
Transposition de la passe v3 de lou-ka (872a202) aux sélecteurs immo-ka : blocs en cartes encre à ombre décalée (galerie et héros exclus), titres à carré accent + filet, tuiles KPI blanches à ombre dure, tableaux zébrés à en-têtes mono, barres en dégradé accent, pastilles mono à point d'état, mini-cartes à liseré pour les zones d'inondation, pastilles d'inclusions alignées. Validé Playwright desktop 1440 + iPhone 14 : zéro débordement, ordre DOM = ordre visuel (check-order OK), aucun `order`. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
Revert "[ka2] fix connecteur imt_ag_tremblant: id du registre aligné sur le source_id BD (imt_tremblant → imt_ag_tremblant) pour que la supervision classe la source retirée en endormi et non stale ; fiches docs régénérées"
…
This reverts commit e28883c3921fe54b2ca4a0190c718d36b46bf633.
-
Revert "docs: README v3 — chiffres live vérifiés, pastilles dynamiques, sections complètes"
…
This reverts commit 4dd0d6cdd0b5e62fb57e35c9aa28020b38d9adff.
-
feat(doc): page documentation /doc (guide + captures) + lien footer + PDF téléchargeable
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
hydro : précalcul des estimations Hydro-Québec dans la boucle de sync + commande CLI hydro-precompute
…
data/rdl.db (base générée) ajouté au .gitignore. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Stats : panneaux territoire (registre des loyers, population, essence)
…
Portage lou-ka : immoka/statsextra.py (3 panneaux, cache 30 min ; filtre actives adaptatif — immo-ka n a pas dup_of) ; rdl.db copié sur le nœud ; dashboard clé panels ; Stats.tsx rendu groupé réutilisant le kit. Registre des loyers + recensement des secteurs (population 7,1 M, revenu, % locataires) + prix essence par région. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
hydro : postal rooftop (géocodage avant + proximity), cache négatif, fix civiques ordinaux
…
Idem lou-ka : _resolve_postal privilégie le géocodage AVANT (CP rooftop précis) au lieu de l inverse du lat/lng approximatif ; cache négatif NEG_TTL 30 j pour ne pas regaspiller de captcha sur les adresses inconnues d HQ ; _civic rejette les rues ordinales en gardant la lettre d appartement. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Sun, Aug 23, 2026 12
-
hydro : cache par uid + dérivation du code postal via lat/lng (Mapbox)
…
Idem lou-ka : les adresses Immo-Ka sans code postal obtiennent leur CP par géocodage inverse Mapbox du lat/lng ; cache par uid pour affichage cache-only ; precompute + auto sur nouvelles annonces. Testé : 4 adresses MTL estimées. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
hydro : flux live fonctionnel (2captcha) — structure API réelle
…
Portage lou-ka : listeLieuxConsommation + cleUnique racine, code postal avec espace, montantAnnuel/consommationAnnuelle ; testé live 1573 rue Pierre-Corneille = 577 $/an / 4720 kWh. Activé via HQ_CAPTCHA_KEY (2captcha). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Fiche : estimation du cout d electricite Hydro-Quebec (a la demande)
…
Portage lou-ka : parcours public rétro-conçu (lieu-consommation -> estimation), reCAPTCHA v2 via solveur enfichable (HQ_CAPTCHA_KEY), proxy résidentiel CA, cache 6 mois ; bloc fiche à la demande, masqué si non configuré. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Fiche et cartes : commerces/transport + lignes de métro-REM colorées
…
Portage lou-ka : bloc Commerces et transport (14 bannières via Mapbox Search Box, pastilles SVG monogrammes ; métro/REM/bus/gare via data/transit.db, extrait OSM pré-calculé) + couche MetroLignes (tracés du métro de Montréal et du REM aux couleurs officielles) sur les cartes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Fiche : qualité de l air (RSQAQ/PST) + essence à proximité (gazquebec.ca)
…
Portage des modules lou-ka : agrégats annuels RSQAQ (PM2.5/NO2/O3/SO2 + PST/PM10 séquentielles) avec station la plus proche et repères OMS/RAA ; stations-service gazquebec.ca (TTL 4 h) avec médiane du secteur et meilleur prix. GET /api/air, /api/gaz, run.py air-refresh / gaz-refresh. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Risque d inondation (BDZI) + criminalité SPVM détaillée par catégorie
…
- immoka/inondation.py : lookup point-dans-polygone sur la base BDZI locale (25 k polygones + R*Tree, copiée de lou-ka), run.py inondation-build, GET /api/inondation, bloc fiche avec badge de sévérité (grand courant 0-20 ans / faible courant 20-100 ans) et couverture cartographique - quartier : _crime_mtl ventile les actes SPVM par catégorie ; barres par catégorie avec variation 12 mois vs 12 précédents dans le bloc quartier Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
[ka2] fix connecteur kw_distinction : cert TLS expiré + recherche en 500 → verify=False + repli pages courtiers
…
Double panne côté kwdistinction.com le 2026-08-23 : (1) cert Let's Encrypt expiré à 12:02 UTC → SSLError sur toute requête directe (l'escalade payante finissait sur un 200 vide de Bright Data, d'où found=0 « propre ») ; (2) la recherche globale /Pages/Listings/Default.aspx répond 500 après 30 s (redirect /Pages/500/) alors que fiches détail et pages courtier fonctionnent. Correctifs : session en verify=False (commenté/daté), et si la recherche paginée donne 0 carte, repli sur l'annuaire des courtiers (25 pages courtier, même markup listing_bloc, pagination PageID par courtier) ; fin de pagination détectée sur les ids vus dans le parcours courant pour ne pas être stoppée par les co-inscriptions d'un confrère. Volume mesuré : 0 → 197 (médiane 200), 146 avec prix (~144 historique), 100 % photos/adresses.
-
widget KA Agent : balise analytics première partie (admin-ka /collect)
…
Bloc KA_ANALYTICS ajouté en fin de ka-agent.js par le déploiement du tableau de bord admin-ka : identifiant visiteur anonyme (localStorage KA_VID) + battement par minute vers administration-ka.com/collect (site, vid, chemin). Commité a posteriori — état déployé en prod. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
stats: paramètre syncs_since_h pour la fenêtre de synchronisations
…
GET /api/stats?syncs_since_h=<heures> retourne toutes les entrées de sync_log de la fenêtre (ts >= now - h*3600, ORDER BY ts DESC, LIMIT 4000) au lieu des 20 dernières seulement. Si moins de 20 entrées correspondent, repli sur les 20 dernières toutes époques confondues ; sans le paramètre, comportement historique inchangé. Corrige les fausses alertes « stale » du moniteur central api-ka : avec 109 sources et ~140 syncs/6 h, la fenêtre de 20 entrées polée aux 2 h ne montrait qu\une fraction des sources (realtor_ag_ca notamment, pourtant en succès à chaque cycle, ~2 145 fiches). Diagnostic connexe (aucun code à changer) : niddamour synchronise correctement — l\inventaire source.immo de l\agence ne contient que des locations (14 AVAILABLE à louer, 6 SOLD), zéro propriété à vendre, donc found=0 est légitime. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
connecteurs : fb_marketplace (acteur Apify ka-fb-immo), PMML, Stuart, Duque Simms + registre
…
- fb_marketplace : acteur maison gorgeous_thistle/ka-fb-immo (scraping public déconnecté, proxy Oxylabs CA), re-vérification tournante des actives, throttle 3 h par replay BD — 762 fiches, 597 publiées au premier run - pmml : API JSON interne /api/proprietes/avendre (485 en vente, 388 publiées, GPS + courtier) — plus grande agence commerciale/multi indépendante du QC - stuart : plateforme Ma Clé, JSON-LD mc:* très riche — 54/54 publiées - duquesimms : sitemap + JSON-LD proprius/e-mmobilier, GPS — 18/18 publiées - tremblantrealestate.ca écrit puis RETIRÉ : 159/159 fiches déjà couvertes première main par domicilia (documenté au registre pour ne pas refaire) - sources.json : +8 entrées (3 actives, MTRE inactif documenté, 4 prospects a_faire : vistoo, deakin, versants, annuaire RCIIQ) ; docs régénérées Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
-
Sat, Aug 22, 2026 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>
-
Wed, Aug 19, 2026 8
-
refactor(fiche): ordre des sections = ordre du DOM sur tous les breakpoints
…
Standard Groupe Ka « Ordre des sections — pages détail » (même correctif que Lou-Ka a6e30ef) : plus de réordonnancement via order:/display:contents — un bloc ajouté sans order retombait à order:0 et passait devant la galerie sur mobile. - Listing.tsx : hero (prix/specs/Vrai-Prix/courtier/CTA) déplacé sous la galerie dans la colonne principale ; inclusions + carte forment la colonne droite (sticky) sur desktop - styles.css : suppression des order:/display:contents, colonnes empilées en flux naturel sur mobile - scripts/check-order.mjs : validation Playwright de l ordre visuel Validé iPhone 14 + desktop 1440px sur 2 fiches. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
tokens.css : overflow-x clip aussi sur html (quirk WebKit iOS) ; immo-ka : zone tactile ka-signup portée à 45 px effectifs
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Stats v2 : /stats ultra complet + 5 rapports PDF (module commun Groupe KA v2)
…
Contenu livré dans 9646167 (commit concurrent 'KA Agent v2' qui a englobé ces fichiers via git add -A) — ce commit documente le périmètre Stats : - immoka/kapdf.py + frontend/src/ka/stats/{kacharts.tsx,kapdf.py,SPEC.md} : remplacés par les canoniques ka-ui v2 (KPI+sparklines, jauges, multi- courbes, empilées, histogrammes, heatmap 7x24, PdfButton 5 rapports) - immoka/stats.py : dashboard enrichi — sparklines KPI, 5 jauges (geoloc, photos, Vrai-Prix, hors quarantaine, complétude), série prix médian des nouvelles (aire), 2 multi-séries (par type, par grande ville), empilé nouvelles inscriptions par bannière, 3 distributions (prix, superficie, année), heatmap horaire de détection, breakdown fourchettes avec deltas, tables quarantaine par motif + bannières/familles, 11 records - immoka/web.py : /api/stats/report 5 modes (complet|synthese|tendances| repartitions|donnees, inconnu->complet), filename(..., mode) - frontend/src/pages/Stats.tsx : toutes les sections v2 dans l'ordre SPEC Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> -
Mobile : verrou de scroll du bottom-sheet filtres, cibles tactiles ≥44 px, socle mobile ka-ui
…
- Home.tsx : verrou du scroll d arriere-plan quand la feuille de filtres est ouverte (body overflow hidden + cleanup) et fermeture par Escape. - styles.css : extensions tactiles ::after pour a.ka-signup (99x17) et a.brand (92x27) ; z-index du sheet et de son backdrop bascules sur les variables du design system (--z-modal / --z-overlay). - ka/tokens.css : nouvelle section SOCLE MOBILE OBLIGATOIRE (echelle --z-*, --vh100 dvh, .ka-bottombar, verrou ka-scroll-lock, filet anti-zoom iOS 16 px, extension tactile du badge). - public/ka-agent.js : agent KA corrige (safe-area, textarea 16 px, plein ecran auto <=640 px + verrou scroll). - Suppression du fichier orphelin frontend/styles.css (46 Ko, non importe). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Tue, Aug 18, 2026 1
-
Vague 3 : Realtor.ca (MLS pan-bannières via Scrapfly ASP), Sotheby's complet (AJAX interne, 60→869), 7 agences source.immo (dont chambre CIEMCQ ~3 900), Guide Habitation (projets neufs)
…
- realtor_ca.py : rejoue PropertySearch_Post via Scrapfly ASP sans render_js (DataDome contourné) ; 14 shards bbox QC, tri récentes d abord, budget IMMOKA_REALTOR_MAX (défaut 2 000/sync ≈ 10-14 appels) ; external_id = MLS + _ag_ → dédup Centris masque les recoupements (2 145 fiches, 343 uniques). - sothebys_quebec.py : endpoint /include/ajax_results.php débloqué (p_territories[]=4, p_status neutre, remap serveur documenté) ; 869 fiches à vendre au lieu de ~60 ; repli pages région conservé. - agences source.immo : si_ag_ciemcq (Mon-Toit, Estrie-Mauricie-CdQ, 3 920 fiches / 1 169 uniques), avenue, provad, peladeau, ferri, si_ag_jga, si_ag_katiasamson. - guidehabitation.py : répertoire des projets neufs (microdonnées schema.org, 9 régions, 95 projets à vendre, locatifs écartés). - sources.json + source_immo_agencies.json + docs régénérées (50 fiches). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-