Lou·Ka — tous les logements à louer du Québec, un seul endroit.
- 264commits
- 1branches
- 0releases
- 180.7 MBon disk
- maindefault branch
- 5 days agolast push
-
Tue, Aug 25, 2026 1
-
Recherche connecteurs province (2026-08-24) : 111 nouveaux sites vérifiés + 61 écarts doc→connecteurs
…
7 recherches parallèles (~330 requêtes Serper/Tavily, validation curl/Scrapfly). Top cibles : Mostra/Cogir, Résidences Cogir (RPA), Chartwell, Summit (LiftSystem), NexLiving (RentCafe), Trouve-Ton-Appart (229 fiches), Morguard, Org. Dupuis (Building Stack). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
-
Mon, Aug 24, 2026 20
-
Stats : panneaux « enrichissements de la fiche » (KA Scores, juste valeur, historique des prix, court terme, gestionnaires, annuaire déménageurs)
…
- louka/statsfiche.py : 7 panneaux calculés sur les données réelles des fiches (couverture des enrichissements + couches branchées, KA Scores par pilier et par ville, verdicts de juste valeur + écarts, baisses/hausses de loyer + événements de vie, court terme CITQ/notes/prix par région, réputation des gestionnaires — masqué tant que <10 fiches notées, annuaire déménageurs) - statsdash.py : fusion statsfiche.panels() + statsextra.panels() - rendu 100 % générique par le kit stats existant (aucun changement frontend) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Annuaire des déménageurs du Québec : page /demenageurs (565 entreprises, 17 régions)
…
- data/demenageurs.json : dataset canonique (balayage Google Places via Serper, 188 villes, dédoublonnage CID/téléphone) — partagé avec Immo-Ka - louka/demenageurs.py : API /api/demenageurs (filtres région + texte) - frontend : page Demenageurs.tsx (recherche, filtre par région, tel:/site web), liens nav + menu mobile + prefooter - seo.py : SSR /demenageurs (liste complète par région, JSON-LD MovingCompany ItemList) + entrée sitemap-pages - scripts/build_demenageurs.py : régénération du dataset Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
feat(fiche): dossier d'intelligence locative — passe sharp desktop/mobile + PDF complet
…
CSS : pastilles de statut affûtées, score hiver et note Google en tuiles à ombre dure, timeline encre, media queries 640px (tableau coût réel, dates empilées, barres d'avis compactes). PDF fiche : cinq nouvelles sections fidèles au web — coût réel ligne par ligne (statuts étiquetés), historique Lou-Ka + vies antérieures, passeport de l'immeuble (tuiles KPI, rotation, pression), gestionnaire (note Google, distribution des avis, plaintes, confiance d'association), score hiver. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
feat(fiche): styles du dossier d'intelligence locative — coût réel, historique, immeuble, gestionnaire, hiver
…
Complète les snapshots ka2 (backend 8efd8cb + composants 0ee1a2d) : pastilles de statut de donnée (observé/estimé/inconnu), tableau du coût réel, timeline Lou-Ka, distribution des avis Google, score hiver. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
feat(pdf): fiche PDF complète — analyse de prix, registre, TAL, environnement, KA Scores
…
Le PDF de fiche reflète désormais tout le contenu de la fiche web : analyse de prix Lou-Ka (juste valeur, verdict, histogramme), registre des loyers (KPI + tableau), historique TAL, inondation, qualité de l'air, électricité, commerces/transport, essence, KA Scores et quartier, avec pagination dynamique multi-pages. Les photos sont redimensionnées (max 1200 px, JPEG q82) : le PDF passe de 30 Mo à ~400 Ko sur une annonce enrichie. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
feat(design): passe « éditorial sharp » sur la fiche — cartes, KPI, tableaux, pastilles
…
Blocs de la fiche transformés en cartes encre (bordure 1,5 px + ombre décalée douce), titres de section à marqueur accent + filet, tuiles KPI blanches à ombre dure, tableaux zébrés avec survol accent, barres de proximité/crime/air en dégradé, pastilles d'état unifiées (mono, point, liseré), décisions TAL en mini-cartes. Vérifié Playwright desktop 1440 + mobile 390 (overflow 0, check-order OK). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
feat(tal): historique du Tribunal administratif du logement par adresse
…
Décisions publiques du TAL (diffusées par SOQUIJ) croisées avec l'adresse de chaque annonce : recherche « no civique + rue » via Scrapfly (le site exige rendu JS + IP résidentielle ; pas de phrases entre guillemets), puis vérification de l'adresse exacte dans le texte intégral et classification (non-paiement, résiliation, expulsion, reprise/éviction, insalubrité…, demande du locateur vs du locataire, verdict). Cache par adresse dans data/tal.db, backfill borné dans la boucle watch + file prioritaire alimentée par les fiches consultées (/api/tal), bloc « Historique au TAL » sur la fiche (aucun nom de partie affiché — référence neutre + lien SOQUIJ). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
feat(doc): page documentation /doc (guide + captures) + lien footer + PDF téléchargeable
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
stats : filtre annonces actives adaptatif au schéma (_active_where) dans les panneaux population
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Stats : panneaux territoire (registre des loyers, population, essence)
…
- louka/statsextra.py : 3 panneaux calculés sur nos jeux ouverts (cache 30 min) · Registre des loyers : 57 k loyers déclarés — KPI, médiane par nb chambres, histogramme, top 15 villes · Population & territoire : recensement des aires de diffusion couvertes (population, revenu médian, % locataires, âge, défavorisation) via listings.dauid · Prix de l essence : ~2450 stations gazquebec.ca — médianes régulier/super/ diesel, barres et tableau par région - dashboard : clé panels ; Stats.tsx : rendu groupé et titré réutilisant le kit (KpiCard/Donut/BarChart/Histogram/DataTable) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> -
hydro : postal rooftop (géocodage avant Mapbox + proximity), cache négatif, fix civiques ordinaux
…
- _resolve_postal : géocodage AVANT de l adresse complète ancré par proximity lat/lng (CP rooftop précis, vérif du numéro civique) au lieu de l inverse du lat/lng approximatif — récupère des adresses qui échouaient (ex. 2038 Charlemagne : 0 -> 618 $/an) - cache négatif (NEG_TTL 30 j) : les adresses inconnues d HQ ne re-consomment plus de captcha à chaque cycle watch - _civic rejette les rues ordinales (15e Avenue, 1re Avenue, 2e Rang) tout en gardant la lettre d appartement (2457A) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Sun, Aug 23, 2026 18
-
hydro : cache par uid + dérivation du code postal via lat/lng (Mapbox)
…
- cache indexé aussi par uid (clé stable annonce) : affichage cache-only sur la fiche sans code postal ni appel Mapbox - code postal dérivé du lat/lng par géocodage inverse Mapbox quand l adresse n en porte pas (cas Immo-Ka) — au moment du calcul seulement - estimate(uid, lat, lng) ; endpoint et fiche passent uid+lat+lng ; cache-only renvoie en_attente (bouton) si un calcul est faisable - precompute sélectionne lat/lng/uid, saute ce qui est déjà en cache par uid Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
hydro : pré-calcul des 100 annonces récentes + auto pour les nouvelles
…
- hydro.precompute(limit, budget) : calcule l estimation des annonces les plus récentes non encore en cache, plafond de résolutions captcha par appel (coût borné) ; run.py hydro-precompute [N] [budget] - watch : precompute(100, budget=30) à chaque cycle -> nouvelles annonces estimées automatiquement ; le cache data/hydro.db persiste entre releases - estimate(solve=False) = lecture cache seule (aucun captcha) ; GET /api/hydro cache-only par défaut, solve=1 pour forcer - fiche : le bloc s affiche AUTOMATIQUEMENT quand l estimation est en cache, sinon bouton de calcul à la demande Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
hydro : flux live fonctionnel (2captcha) — structure API réelle
…
- lieu-consommation : clé listeLieuxConsommation + cleUnique au niveau racine, code postal reformaté avec espace (exigé), idConso = item.id - estimation : {cleUnique, idConso} -> montantAnnuel + consommationAnnuelle - expose kwh_annuel ; testé live : 20 rue Lockwell = 283 $/an / 1100 kWh (12 s), 2e appel servi du cache Activé via HQ_CAPTCHA_KEY (2captcha) dans .env. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> -
Fiche : estimation du coût d electricite Hydro-Quebec (a la demande)
…
- louka/hydro.py : parcours PUBLIC rétro-conçu de l outil « Estimer les coûts d électricité à une résidence » — 2 étapes (lieu-consommation -> estimation) sur services-cl.solutions.hydroquebec.com, jeton reCAPTCHA v2 via solveur enfichable (2captcha/CapSolver, clé HQ_CAPTCHA_KEY), sortie par proxy résidentiel CA (Oxylabs/Bright Data), cache 6 mois data/hydro.db ; sans clé captcha -> {disponible:false} et bloc masqué (jamais d estimation inventée) - GET /api/hydro?adresse= ; bloc fiche à la demande (bouton, 1 captcha/appel) affichant le coût mensuel et annuel estimés Activation : définir HQ_CAPTCHA_KEY (+ HQ_CAPTCHA_PROVIDER) dans .env. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> -
Cartes : lignes de métro/REM aux couleurs officielles + transit hors ligne
…
- MetroLignes.tsx : couche Ka Maps (useKaMap) qui trace metro-lignes.geojson (lignes verte/orange/jaune/bleue + REM, extraites d OSM avec leurs couleurs officielles, liseré blanc de lisibilité) sur la carte de recherche, la vue carte et la carte 3D de la fiche - commerces : transit servi par data/transit.db (extrait OSM pré-calculé, 37 237 arrêts de bus + 75 stations de métro + 57 REM + 106 gares au Québec — les miroirs Overpass refusent l IP du cluster) ; ajoute Station REM et Gare de train au bloc Commerces et transport Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Fiche : bloc Commerces et transport (Mapbox Search Box + cache POI/OSM)
…
- louka/commerces.py : point de vente le plus proche de 14 grandes bannières (Costco, Walmart, Metro, IGA, Maxi, Super C, Provigo, Canadian Tire, Dollarama, SAQ, Pharmaprix, Jean Coutu, Home Depot, RONA) via l API Mapbox Search Box (jeton public kamaps, validation du nom retourné, anti « Station Métro »), cache par cellule ~1 km TTL 30 j ; station de métro et arrêt de bus les plus proches repris du cache POI du projet (repli Overpass) ; GET /api/commerces - bloc fiche : pastilles SVG monogrammes aux couleurs des bannières, nom du point de vente et distance — métro/bus en tête Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Fiche : qualité de l air (RSQAQ/PST) + essence à proximité (gazquebec.ca)
…
- louka/air.py : agrégats annuels par station du RSQAQ (MELCCFP) — horaires 2024-2025 (PM2.5, NO2, O3, SO2, CO) + séquentielles PST/PM10 (<LD -> LD/2), data/air.db minuscule, station la plus proche ≤ 60 km ; bloc fiche avec badge global et barres vs repères OMS 2021 / norme RAA (PST 60 µg/m³) - louka/gaz.py : copie locale des ~2 450 stations de gazquebec.ca (prix Régulier/Super/Diesel, TTL 4 h, auto-refresh au lookup) ; bloc fiche avec KPI (stations, médiane du secteur, meilleur prix) et tableau des stations les plus proches, la moins chère mise en évidence - run.py air-refresh / gaz-refresh, GET /api/air et /api/gaz Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Quartier : criminalité SPVM détaillée par catégorie (12 mois, tendance)
…
_crime_mtl ventile désormais les actes par catégorie (vol dans/sur véhicule, introduction, vol de véhicule, méfait, vol qualifié, infractions mortelles) ; le bloc quartier affiche des barres par catégorie avec la variation vs les 12 mois précédents (flèches chiffrées, jamais la couleur seule). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Risque d inondation (BDZI) + Registre des loyers v2 (visuel)
…
- louka/inondation.py : base locale data/inondation.db construite du GeoPackage BDZI officiel (25 k polygones éclatés + R*Tree, couverture Carto_ZI_S), lookup point-dans-polygone shapely (0-40 ms), statuts en_zone / a_proximite (≤100 m) / hors_zone / non_cartographie ; run.py inondation-build, GET /api/inondation — bloc fiche avec badge de sévérité (grand courant 0-20 ans = élevé, faible courant 20-100 ans = modéré) et rappel que la cartographie officielle fait foi (CMM non couverte par la BDZI) - Registre des loyers v2 : tuiles KPI (volume, médiane secteur, médiane même nombre de chambres), bande de position p10-p90/boîte p25-p75/médiane vs le loyer demandé, barres des médianes par chambres (celle de l annonce surlignée + étiquette), date de la valeur = année du loyer (mois seulement si le bail débute la même année), quartiles côté API Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Registre des loyers : extraction pancanadienne (57 433 déclarations géocodées) + bloc fiche
…
- louka/rdl.py : balayage par boîtes de l API publique de registre-des-loyers.ca (subdivision récursive sur erreur ou volume suspect), base séparée data/rdl.db, requête de proximité (bbox + haversine) avec médianes globale/récente/par chambres - run.py rdl + GET /api/rdl?lat&lng&radius - fiche : bloc « Registre des loyers » sous l analyse de prix — médiane du secteur, écart du loyer demandé vs les déclarations du même nombre de chambres, 8 déclarations les plus proches avec la date de la valeur (année du loyer, mois si le bail débute la même année), crédit Vivre en ville Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
[ka2] fix connecteur devimco : nouveau format d'iframe Planpoint groupe (/g/<x>/<ns>)
…
Le widget groupe Planpoint est passé de /g/<ns> à /g/<x>/<ns> (le namespace de l'API groups/find est le DERNIER segment, parfois avec majuscules dans le premier). L'ancien regex envoyait le 1er segment -> 404 sur Alexander, Maestria et Hexagone depuis le 2026-08-19 (479 -> 231 annonces). On essaie maintenant les deux segments (en minuscules), et on accepte les namespaces projet avec espace encodé (%20) -> Éolia (20 unités) capté pour la 1re fois. Volume mesuré : 231 -> 481 trouvées (sync réelle : +22 ajouts, ~85 màj). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
court terme : registre des 38 sources sur la page Sources (statuts + flag connector) et SEO complet — SSR /court-terme et fiches (JSON-LD VacationRental), sitemaps sitemap-ct-N.xml, meta /sources
…
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
ka-agent : balise analytics KA (collect vers administration-ka.com)
…
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
tri_logis : réécriture pour le nouveau site trilogis.ca (Next.js/Supabase) + fenêtre syncs_since_h sur /api/stats
…
- tri_logis : l ancien site statique tri-logis.ca a migré vers trilogis.ca (Next.js App Router + Supabase) — 23 synchros à found=0. Le connecteur lit désormais le payload RSC rendu serveur de /a-louer (tableau "units" JSON complet : prix, statut, date de dispo, notation n½, secteur, GPS, inclusions) et la galerie signée de chaque fiche /a-louer/<slug> (bucket privé property-media, tokens ~7 j re-signés à chaque sync). Périmètre : résidentiel longue durée seulement (commercial exclu). Sync de test : found=51, added=51. - web.py /api/stats : paramètre optionnel syncs_since_h (fenêtre en heures pour recent_syncs, LIMIT 4000, repli sur les 20 dernières si <20 dans la fenêtre) — le moniteur central api-ka voit enfin toute la fenêtre de 2 h au lieu de 20 entrées (~11 min), fin des fausses alertes stale. Sans paramètre : comportement inchangé. - Diagnostics sans changement de code : courtemanche, place_florimay et atlas_immo retournent 0 annonce parce que les sites n affichent réellement aucune disponibilité (vérifié en live) — connecteurs sains. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
court terme : 2e vague — 5 connecteurs (Expedia, Hipcamp, Glamping Hub, Parcs Canada, Sinistar, Corporate Stays) + 3 sources fermées documentées
…
- expedia : SSR + rendu Scrapfly ASP (pile Vrbo), 13 destinations QC × 2 tris - hipcamp : GraphQL public (LandsSearch bbox QC + détail camper), ~350 terrains - glampinghub : endpoint AJAX ouvert, 208 fiches QC, prix CAD seulement - parcscanada : API GoingToCamp (reservation.pc.gc.ca), oTENTik/Ôasis/MicrOcube des 12 terrains québécois, prix via feeDetails - sinistar : index Algolia public prod_housings (state:QC + quadtree bbox), ~5 600 hébergements de relogement, pas de prix public (assumé) - corporatestays : API REST WordPress properties, 47 meublés MTL/QC - tripadvisor (vertical locations fermé nov. 2024), sonder (liquidée nov. 2025, devenue affilié Booking), blueground (aucun marché QC) : disabled documentés Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
-
Sat, Aug 22, 2026 1
-
airbnb : polygone frontière Québec (élagage cellules + filtre cartes) et budget mélangé
…
Le bbox provincial englobe l'est de l'Ontario, le nord des É.-U. et le NB : 4 857 annonces hors province (Ottawa & cie étiquetées « Outaouais ») ont été récoltées puis purgées. QC_POLY filtre désormais les cartes et élague les cellules entièrement hors Québec ; l'ordre des cellules est mélangé à chaque run pour que les cellules restantes tournent, budget par défaut 900 → 1200. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-