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 16
-
Desktop : grille uniforme + header sans debordement
…
- Grille editoriale : suppression du grand format 7n+1 (annonces de tailles inegales jugees etranges) — 3 colonnes uniformes, le style editorial (fiches sans boite, image dominante, stagger) est conserve - Header : nav sans retour de ligne (Court terme tenait sur 2 lignes), burger des 960px, badge Groupe KA masque sous 1140px (debordement de 6px du bouton Connexion autour de 1100px) — verifie par mesure Playwright de 1440 a 900px : plus aucun element coupe a droite
-
Court terme : DA editoriale v2 (meme langage que l accueil)
…
- Hero typo geant Trouvez votre prochaine escapade. avec surlignage orange irregulier ; benefits-cards et stat-chips remplacees par la ligne LIVE (hebergements indexes en count-up, regions, derniere synchro reelle des connecteurs ct qui tictaque, prix moyen/nuit) - Recherche au coeur : grand champ Ou voulez-vous vous evader ? souligne, criteres Region/Type/Prix par nuit en filets, Tous les criteres avec badge - Barre de resultats sticky N hebergements · Liste|Carte · Filtres (mobile), FAB supprime ; resume des criteres actifs sous la recherche sur mobile - Grille magazine grid-edito (grand format 16/9 toutes les 7 fiches) et transitions de vue ; reutilise integralement la couche CSS v2 de l accueil - Hooks useCountUp/useAgo factorises dans src/live.ts (partages Home/CT)
-
Refonte editoriale v2 de l accueil — direction artistique premium
…
Moins de boites, plus de typographie : le contenu structure la page. - Hero : composition typographique geante (clamp 44-88px), surlignage orange irregulier en trait SVG sous chez-vous., plus de gros boutons rectangulaires - Donnees vivantes : ligne mono LIVE avec compteur anime (count-up 0,9s), derniere synchro reelle qui tictaque a la seconde (max last_sync des connecteurs), sources et loyer moyen — separes par filets, zero chip - Recherche au coeur : grand champ Ou voulez-vous habiter ? souligne 2px (focus accent), criteres inline Ville/Quartier/Loyer separes par filets verticaux, bouton texte Tous les criteres avec badge — la boite filterbar disparait de l accueil - Barre de resultats sticky : N logements · Liste|Carte (onglets textes a soulignement anime scaleX) · Filtres (mobile) — remplace le FAB flottant - Fiches editoriales : plus de carte-boite — l image domine (radius 10, zoom 1,025 au survol), prix 22px niveau 1, adresse niveau 2, quartier/ville en mono uppercase niveau 3, source en micro-mono niveau 4 - Grille a rythme magazine : 3 colonnes, 1 grand format panoramique 16/9 toutes les 7 fiches, apparition en decale par colonne, align-items start - Pagination nue : chiffres sans boites, page courante soulignee accent - Nav mobile : tabbar flottante detachee des bords (radius 18, blur, ombre portee), etat actif = trait accent sous l icone ; widget KA Agent remonte - Primitives locales v2 : rayons 0/6/10/18, durees 150/240/350ms, hairlines - Feuille mobile : resume des criteres actifs sous la recherche (remplace le FAB), poignee, application sticky - Classes partagees avec CourtTerme (.hero, .filterbar, .stat-chip…) intactes : la refonte vit dans de nouvelles classes + une couche finale
-
Accueil : pastilles actives — neutraliser l uppercase herite de la page Sources
…
La regle .pill de la page Sources (10.5px, uppercase) venait apres celle de l accueil et fuyait sur les pastilles de filtres actifs ; text-transform et letter-spacing sont desormais explicites sur .pills .pill.
-
Accueil : refonte majeure du rendu — CTA hero, filtres et boutons peaufines
…
- Hero : halo d accent + trame de points decorative, rangee CTA (Explorer / Voir la carte) avec ombres decalees accent, stat-chips interactives (tabular-nums, survol), avantages en mini-cartes bordees encre - Filterbar : cadre 2px + rayon 16, recherche 52px focus accent (ombre 3x3), selects survolables, bouton Plus de filtres avec icone, badge compteur et chevron anime, panneau avance en pointille avec easing - Segments : etat actif encre + souligne accent interieur ; pastilles actives avec animation d apparition et survol danger (intention de retrait) - Chips 42px avec icones alignees ; bascule Liste/Carte etat actif encre - Mobile : poignee de sheet, bouton Voir les resultats sticky en bas de la feuille, FAB avec badge compteur
-
Court terme : upgrade majeur — 21 nouveaux connecteurs, 12 enrichis, fiches améliorées
…
- 21 nouveaux connecteurs (chaleto, hébergement-charlevoix, chaletsalpins, memoria, pourvoiries FPQ, campingquebec, hebergia, rezerve, accestremblant, chaletsdanslenord, alouerauxiles, rvmt, boraboreal, homminichalets…) - enrichissement des existants : airbnb (desc/capacité/commodités via PDP), booking/vrbo/expedia (Apollo SSR, bug slug vrbo corrigé), sepaq (desc+géo), tremblantliving (prix API Streamline), qldc/kijiji/parcscanada/bonjourquebec/ gitespassant ; sinistar : prix vérifiés inaccessibles (documenté) - fiches CT : /api/ct/listings/{uid}/context (analyse prix/nuit par segment, histogramme, centile) + badge marché + hébergements similaires à proximité - registre sources_ct.json : 52 sources (7 mortes retirées, 21 ajoutées) Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> -
Court terme : retrait des 7 connecteurs squelettes jamais productifs (sources mortes ou hors Québec)
…
Suppression des stubs disabled=True et de leurs entrées dans sources_ct.json, verdicts revérifiés en live le 2026-08-25 : - chaletsquebec : domaine sans DNS (SERVFAIL) - locationschalets : 301 → km42.ca (1 exploitant, 2 chalets, 0 prix) - hebergementquebec : 302 → citq.qc.ca (aucun répertoire scrapable) - chaletsdirect : chalets de ski européens, zéro inventaire QC - blueground : aucun marché québécois (sitemap = tor seul, page Montréal 404) - tripadvisor : produit locations fermé nov. 2024 (VacationRentals-g155033 → 301 Hotels, confirmé Scrapfly) - sonder : liquidation nov. 2025, sonder.com = affilié Booking (403 même via Scrapfly ASP) Aucune rangée de ces sources dans les bases ; registre auto-découvrant intact (22 connecteurs actifs). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
Nav v2 correctif : le ✕ de fermeture vit DANS le panneau (fixe, toujours visible)
…
Le ✕ était le burger du header ; si le header n'est pas épinglé (bas de page), il défilait hors écran alors que le panneau fixed restait affiché — impossible de fermer sans Escape. Ajout d'un .mm-close position:fixed en haut à droite du panneau et burger masqué à l'ouverture (une seule commande de fermeture). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Nav mobile v2 : le dropdown 480px devient un panneau plein écran fixed
…
Standard KA 2026-08-25 : .mobile-menu passe de position:absolute top:100% (max-height 480px) à position:fixed inset:0 — menu visible peu importe la position de scroll. Rang du header (marque + burger→✕) maintenu au-dessus du panneau, verrou de scroll CSS pur via html:has(.mobile-menu.open). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Overpass : miroirs de repli maps.mail.ru et openstreetmap.fr (poi, env, commerces)
…
Panne simultanée de kumi.systems (502) et overpass-api.de (connexion refusée) le 2026-08-25 : POI et tuiles environnement bloqués. Ajout de deux miroirs vérifiés couvrant le Québec ; overpass.osm.ch écarté (extrait suisse uniquement). environment.py hérite de la liste de poi.py. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
managers: tolérer `type` en liste dans les fiches SerpApi (multi-catégories)
…
Le champ `type` des local_results Google Maps arrive maintenant parfois en liste, ce qui cassait la résolution (`TypeError` dans _score_candidate et le tri des candidats). Normalisé en chaîne dès la réception des candidats. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
Campagne connecteurs province 2026-08-24 : 149 nouveaux connecteurs (+3 685 annonces)
…
Création massive issue de la recherche province (reports/expansion/ recherche-province-2026-08-24.md), en 17 lots parallèles : - 149 connecteurs actifs (Building Stack, RentCafe/Yardi, Rentsync/ LiftSystem, Planpoint, Livya, silo.immo, Webflow, Wix SSR, WordPress admin-ajax/wp-json/SSR, PDF+pdfplumber, OCR tesseract, Google Sheets CSV) - helpers partagés _planpoint.py et _livya.py - 9 sources documentées non connectables (doublons Cogir, vitrines sans inventaire, OMHQ annuaire, Skyline 0 propriété QC) - registre data/sources.json : 281 → 439 sources - fix groupe_mathieu : découverte via /condos-locatifs/ (le méga-menu Jet n'est servi que par certaines variantes de cache Elementor) - pdfplumber ajouté aux dépendances ; doc régénérée (367 fiches) Syncs initiaux : 3 685 annonces ajoutées. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
-
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 4
-
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>
-