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
-
Fri, Sep 4, 2026 1
-
Mon, Aug 24, 2026 2
-
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>
-
Sun, Aug 23, 2026 4
-
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>
-
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>
-
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>
-
-
Sat, Aug 22, 2026 1
-
court terme : nouvelle section « Location court terme » isolée (backend louka/shortterm + API /api/ct + page /court-terme) — 1er connecteur Airbnb
…
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
-
Tue, Aug 18, 2026 2
-
KA Scores — suite géographique maison (Walk/Transit/Bike/Calme/Services)
…
· environment.py : inventaire OSM par tuile (Overpass) — routes majeures, rails, aéroports, zones industrielles, bars, pistes cyclables (géométrie densifiée) et TOUS les POI par catégorie ; cache env_tiles ~3 mois. · kascores.py : 5 scores 0-100 par immeuble + global pondéré, barème versionné (2026.08-v1), détails honnêtes par score, « Données insuffisantes »/« Non desservi » plutôt que des 0 trompeurs ; Transit = proximité des arrêts × percentile PMD StatCan ; calcul incrémental (7 900 immeubles en ~8 s), distribution de calibration en sortie. · API : ks_* joints à /api/listings et /api/search (tri « ka », filtre kascore_min), détail complet sur la fiche, /api/kascores/stats. · Frontend : pastille KA sur les cartes d annonces, section KA Scores de la fiche (5 jauges + détail dépliable + date/version), page /ka-scores (méthodologie publique + pondérations personnelles en curseurs), tri « Meilleur KA Score » dans la vue carte, filtre « KA Score minimal ». · Boucle watch : env (4 tuiles max) + kascores incrémental à chaque sync. · Tests : test_kascores.py (barème, honnêteté, rendement décroissant, cohérence spatiale sur le parc réel). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Qualité des données + solidité mobile + framework de juste valeur (fair value)
…
Mission 1 — enrichissement des connecteurs et qualité : - quality.py : score de complétude 0-100 + seuil de publication (quarantaine des annonces sans prix plausible / localisation / contenu exploitable) - imgcheck.py : audit des images (liens morts 404/410, minuscules, placeholders multi-adresses, doublons) -> galeries nettoyées images_ok, cache image_checks, politesse 3 requêtes/hôte, écriture hors transaction réseau - 26 connecteurs enrichis (galeries complètes, descriptions, prix, adresses) : kangalou, royal_lepage, medway, remax_quebec, groupe_maurice, mellem, sutton, lespac, heafey, kijiji, fb_marketplace, zumper, equinoxe_batimo, logis_experts, quartier_sila, msi, summum, quartier_plus, urban_services, cosoltec, garic, lakle, matinale, huma, jutras, groupe_theoret, ferrovia - normalize : clean_city/clean_sector (rues et entités HTML retirées des menus), kijiji : adresses françaises « 89, rue X » correctement découpées - geocode : virgule après le n° civique corrigée (lot AQ), base en WAL - dedup : une annonce en quarantaine ne masque jamais un doublon publié Mission 2 — mobile : - /api/img : miniatures WebP servies à la taille de l écran (cache disque) - SmartImg : miniature -> original -> visuel de secours Lou-Ka (jamais d icône cassée) - lightbox tactile : balayage scroll-snap + pincement + double-tape - bannière témoins : ne recouvre plus le bouton Filtres (--consent-h) - cibles tactiles >= 44 px (pointer: coarse) ; KA Agent plein écran à l ouverture - stats : complétude moyenne, quarantaine par source Mission 3 — juste valeur locative (fairvalue.py, fv-logement-1.0) : - 3 niveaux : segments médians (repli en échelle) + coefficients de caractéristiques appris et centrés + comparables kNN géographiques (médiane pondérée) ; couloir de sécurité, fourchette, indice de confiance - prudence : pas de verdict si confiance faible, prix « à partir de », prix non mensuel, écart hors plausible ; chambres/coloc = segment dédié - pastilles sous/dans/au-dessus du marché (cartes + fiche), bloc Analyse de prix avec histogramme, filtre « Sous le marché » + tri, page /juste-valeur - API : champs fv_* + deal/sort, /api/fairvalue/{uid} ; stats + PDF ; historisation fv_segments ; tests synthétiques ; docs/FAIRVALUE*.md Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Thu, Aug 13, 2026 1
-
geocode : mode EN LOT Adresses Québec (porté d'Immo-Ka) — peuple Lou-Ka Maps
…
run.py geocode = lots de 200 adresses normalisées (geocodeAddresses), 1 entrée par immeuble, cache partagé, validation bbox par ville ; l'ancien mode 1-par-1 (Nominatim) reste sous « geocode1 ». Résultat : 11 033 → 14 206 annonces géolocalisées (77 % des actives). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Sat, Aug 8, 2026 4
-
Stats de quartier (à la Centris) — runtime + fiche « Le quartier »
…
- louka/quartier.py : jointure lat/lng -> aire de diffusion 2021 (point-dans- polygone local, préfiltre bbox), assemblage fiche (démographie recensement, scores de proximité StatCan, défavorisation INSPQ, îlot de chaleur, criminalité SPVM <500 m sur l'île / indice IGC ailleurs), enrichissement listings.dauid dans la boucle watch - data/quartier.db : base statique construite par scripts/ (fusion via scripts/merge_quartier.py), défensif si absente - fiche : section « Le quartier » (tuiles démographiques, barres de proximité 0-100, badges chaleur/criminalité, attributions licences ouvertes) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Commodités de proximité par immeuble (Overpass/OSM) sur chaque fiche
…
- louka/poi.py : une requête Overpass par immeuble (13 catégories : épicerie, dépanneur, pharmacie, école, garderie, parc, bus, métro, gym, café, clinique, hôpital, bibliothèque), plus proche par catégorie avec distance, cache permanent par coordonnées arrondies (~11 m), politesse 1 req/s, rafraîchissement aux 3 mois - run.py poi [n] + intégration à la boucle watch (80 nouveaux immeubles/cycle) - /api/listings/{uid} : champ poi[] joint depuis le cache - fiche : section « À proximité » (icône, nom réel, distance formatée), mention données OpenStreetMap Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> -
Mission 4 — géocodage Nominatim + carte interactive MapLibre GL
…
Géocodage (louka/geocode.py) : - Nominatim 1 req/s, User-Agent identifié, cache SQLite par immeuble (adresse normalisée sans n° d'unité) — une adresse n'est géocodée qu'une fois - nettoyages QC : préfixe d'unité « 101-2905 », « Montréal - Laval », cardinales abrégées ; repli civique+rue en 2e tentative - validation bounding-box (Québec/Lévis resserrée, garde-fou provincial), flag geocode_failed, ré-essai des échecs après 30 jours - intégré à la boucle watch (nouvelles adresses géocodées à chaque sync) - finalize() rejette aussi les coordonnées invalides fournies par les sources (annonce de Limoilou qui pointait au Kazakhstan) Carte (frontend) : - /api/listings.geojson : GeoJSON filtré (mêmes filtres que /api/listings) - MapView MapLibre GL : chargement paresseux (254 ko gzip hors du bundle principal), clustering natif, marqueurs-prix, popup fiche (photo, prix, type, dispo, gestionnaire, lien), synchro avec les filtres, fitBounds - bascule Liste/Carte : côte à côte sur desktop, plein écran sur mobile - tuiles vectorielles OpenFreeMap (positron), style Lou-Ka (encre + lime) - worker MapLibre v6 copié par plugin Vite (imports relatifs préservés) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Mission 1a — couche commune : schéma enrichi, normalisation centrale, robustesse, tests
…
- schema.Listing : availability_date (ISO/now), area_sqft, pets, furnished, details (JSON structuré) + finalize() appliqué à toutes les sources - normalize.py : dates FR/EN → ISO, superficies pi²/m², prix robuste, types d'unité (chambres→½, 6½+, MDV…), commodités → tags canoniques, stationnement/animaux/fumeur/contact extraits du texte - db.py : migration auto, délai de grâce (2 syncs) avant désactivation, détection de dérive (volume + taux de prix null) avec retraits suspendus, cache des pages détail, cache de géocodage (préparé pour la carte) - fixtures.py + run.py record : enregistrement/rejeu des réponses HTTP, tests de régression pytest par connecteur (snapshot + validité schéma) - web.py : nouveaux filtres pets/furnished/available_by/area_min Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Thu, Aug 6, 2026 1
-
Lou-Ka — agrégateur de logements à louer (Québec, Lévis, Grand Montréal)
…
Plateforme complète : 68 connecteurs de gestionnaires immobiliers, schéma standardisé avec détection de changements (hash), API FastAPI, frontend React/Vite PWA (design éditorial sharp, thème clair), déployée sur www.lou-ka.com avec resynchronisation horaire. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-