SPB Git

spb/lou-ka

Public

Lou·Ka — tous les logements à louer du Québec, un seul endroit.

History of frontend/src/App.tsx Clear filter
page 1
  1. Fri, Sep 4, 2026 1

    1. feat(fiche): refonte premium mobile-first de la fiche logement (2026-09-04)
      …
      Frontend (frontend/src/fiche/, nouvelle arborescence) : héro prix → adresse →
      résumé → galerie → actions ; Lou-Ka Score (60 % KA Score emplacement + 40 %
      prix vs juste valeur, partiel si une composante manque) ; « En bref »
      déterministe (prix, accessibilité, air, inondation, coûts, TAL, chaleur,
      baisse de prix) ; navigation sticky par sections (scroll-spy) ; Prix et marché
      (juste valeur + histogramme) ; Le logement (grille icône/valeur) ; description
      tronquée + texte original ; inclusions dédoublonnées FR/EN ; grande carte 3D
      Ka Maps avec filtres de lieux (transport, épiceries, pharmacies, commerces,
      écoles, parcs, essence) ; À proximité / Transport en carrousels + bottom sheet ;
      Quartier en KPI compacts + accessibilité en lignes ; KA Scores compacts ;
      Registre des loyers orienté décision (jauge p10–p90, médianes par chambres,
      3 comparables + sheet filtrable) ; coût réel + Hydro ; risque d'inondation
      (statut clair, juridique en accordéon) ; qualité de l'air en tuiles ; essence
      (3 stats, 3 stations, sheet) ; Dossier de l'immeuble en accordéons (historique,
      passeport, gestionnaire, TAL, hiver) ; Sources et méthodologie + fin de fiche.
      Primitives : SectionCard, Accordion, BottomSheet (modale ≥ 900 px), StatTile,
      StatusBadge, Skeleton, états vides/erreur, toast. Données : useFicheData
      (groupe critique au montage, groupe différé à l'approche de la carte).
      Tokens --lk-* scopés (.lk-fiche) : fond #F7F7F5, cartes blanches bord 1 px,
      ombres légères, rayons 10/14/18/22, orange réservé CTA/prix/score. Desktop
      ≥ 1024 : aside sticky (prix, CTA, score, constats, Demander à Ka). CTA sticky
      compact affiché seulement après le héro ; bouton « ✦ Demander à Ka » discret
      branché sur le widget KA Agent existant (contexte de la fiche transmis).
      Header compact sur la fiche (56 px, ticker masqué, favoris + partage,
      connexion en icône sur mobile). Aucun `order` CSS ; scrollIntoView banni de la
      barre de sections (faisait ouvrir la page à 434 px). Anciennes classes
      .fiche/.f-* intactes pour la fiche court terme. 16 anciens composants de fiche
      supprimés (remplacés). check-order.mjs mis à jour + shots.mjs / interactions.mjs.
      
      Backend (additif, rétrocompatible) : poi.py conserve lat/lng des POI (carte) ;
      gaz.py expose lat/lng des stations ; /api/gaz et /api/rdl acceptent `limit`
      (sheets « Voir les N »). vite.config : proxy /api paramétrable (LOUKA_API).
      
      Validé : tsc + vite build, check-order OK (scrollY 0, ordre croissant, sans
      overflow 375→1440), captures Playwright 6 largeurs, sheets/carte/Ka/404,
      fiche sans KA Score. node_modules frontend réinstallés (typescript/esbuild
      tronqués par ka2 le 2026-08-31 pour ENOSPC).
      Simon-Pierre Boucher · 1 file +35 −6
  2. Tue, Aug 25, 2026 1

    1. 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>
      Simon-Pierre Boucher · 1 file +3
  3. Mon, Aug 24, 2026 2

    1. 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>
      Simon-Pierre Boucher · 1 file +7
    2. feat(doc): page documentation /doc (guide + captures) + lien footer + PDF téléchargeable
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +1
  4. Sat, Aug 22, 2026 2

    1. Simon-Pierre Boucher · 1 file +9
    2. Simon-Pierre Boucher · 1 file +2 −2
  5. Wed, Aug 19, 2026 1

    1. Mobile : backdrop du menu compte via createPortal, verrou scroll de la feuille filtres, champs ≥16 px, logo tactile, socle mobile tokens.css, ka-agent corrigé
      …
      - frontend/src/App.tsx : .account-backdrop rendu à la racine via createPortal
        (le backdrop-filter du header re-parentait le position:fixed → voile de
        66 px) + fermeture du menu compte à Escape.
      - frontend/src/pages/Home.tsx : feuille de filtres mobile (sheetOpen) — gel du
        scroll d arrière-plan (pattern du hamburger) + fermeture à Escape.
      - frontend/src/styles.css : backdrop compte plein écran sous le header (z-40,
        le menu ancré dans le header reste au-dessus) ; champs de filtres ≥16 px sur
        mobile (f-search, f-native, f-ctl select, ms-sort) ; zone tactile ≥44 px du
        logo .brand (::after inset -8px, rendu inchangé).
      - frontend/src/ka/tokens.css : socle mobile obligatoire (z-index communs,
        --vh100, .ka-scroll-lock, .ka-bottombar, filet anti-zoom iOS 16 px).
      - frontend/public/ka-agent.js : safe-areas, textarea 16 px, plein écran
        ≤640 px + verrou, pas de focus clavier forcé.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +15 −1
  6. Tue, Aug 18, 2026 2

    1. 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>
      Simon-Pierre Boucher · 1 file +2
    2. 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>
      Simon-Pierre Boucher · 1 file +2
  7. Mon, Aug 17, 2026 1

    1. Retour au design system commun Groupe KA « éditorial sharp » (accent orange conservé)
      …
      Lou-Ka abandonne l'identité marine/bleu du 2026-08-15 et revient au socle
      partagé ka-ui (papier #f5f3ee, encre #141814, Space Grotesk/Inter/JetBrains
      Mono, bordures encre 1,5 px + ombres décalées), en gardant son accent orange
      (#ff6a00), son logo « porte entrouverte » et sa baseline.
      
      - ka-ui vendoré : frontend/src/ka/ (tokens.css, ecosystem.json, KaFooter,
        GroupeKaBadge) ; tokens.css importé AVANT styles.css dans main.tsx
      - styles.css : :root réécrit (accent orange + alias --lime, anciens jetons
        marine/bleu remappés sur les jetons communs), géométrie sharp 10/6 px,
        états sélectionnés encre+accent, couche d'harmonisation finale ; le thème
        Ka Maps passe à l'accent orange sur le chrome de la carte
      - Header : badge « Un service Groupe KA » (desktop + menu mobile ≥44 px)
      - Footer : KaFooter commun (siteId lou-ka, pages légales locales) précédé
        d'une rangée de navigation locale + « Gérer mes témoins »
      - Nouvelle page /contact (courriels + rôles d'ecosystem.json, avertissement
        agrégateur, liste des sites, lien hub) ; route ajoutée au fallback SPA
      - SEO : title « Lou-Ka — Un service Groupe KA » (index.html) ; titre SSR de
        l'accueil harmonisé + lien Groupe KA dans le corps SEO (seo.py)
      - « Créer mon compte » pointe vers https://www.groupe-ka.com/connexion
      - Polices Space Grotesk + JetBrains Mono ajoutées (Google Fonts)
      - ka-maps redéployé sur le nœud (~/apps/ka-maps) pour le build
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +30 −32
  8. Sat, Aug 15, 2026 1

  9. Thu, Aug 13, 2026 6

    1. Profil enrichi — photo téléversée, bio, ville, coordonnées, réseaux sociaux
      …
      - louka/profile.py : PUT /api/me/profile (nom affiché, bio 280, ville,
        téléphone, site web, réseaux instagram/facebook/x/linkedin/tiktok/youtube),
        POST /api/me/avatar (Pillow : EXIF, recadrage carré centré, 512 px, JPEG,
        purge des anciennes photos), DELETE /api/me/avatar (retour avatar Google)
      - /uploads/ monté (data/uploads/), colonnes users (display_name, avatar_url,
        bio, city, phone, website, socials JSON)
      - /api/me : nom et avatar « effectifs » (display_name > Google, upload >
        Google) + tous les champs ; profil public /u/{ka_id} : bio, ville, rôle,
        site, réseaux (jamais courriel/téléphone)
      - /profil : éditeur complet (photo avec téléversement, nom affiché, bio avec
        compteur, ville, téléphone, site, 6 réseaux avec icônes maison)
      - /u/{ka_id} : bio, chips ville/rôle/site, boutons réseaux sociaux
      - python-multipart ajouté (formulaires multipart FastAPI)
      Simon-Pierre Boucher · 1 file +20 −8
    2. Comptes v2 — KA-ID, profil « carte de membre », rôles, favoris, pages gestionnaires
      …
      - KA-ID : identifiant membre unique « ka- » + 10 chiffres, attribué à la
        création du compte (index unique, backfill au premier /api/me)
      - /profil : carte de membre Groupe KA (encre + lime, KA-ID en vedette, avatar,
        ancienneté, bande décorative), infos du compte, copie du KA-ID
      - Profil PUBLIC opt-in : /u/{ka_id} (nom, avatar, ancienneté — jamais le
        courriel ; 404 indistinguable si non public), toggle + lien copiable
      - Rôles à l'intégration (/bienvenue après le premier login Google) :
        · locataire — favoris (cœur sur les cartes, page /favoris, toggle optimiste)
        · gestionnaire — réclame la page de SA source (1/compte, 1 compte/source)
          et la personnalise (/gestion : accroche, description, contact, logo) ;
          page publique /g/{source} avec inventaire relié + pagination
      - louka/accounts.py (rôles, favoris, source_profiles), tables favorites +
        source_profiles + colonnes users (ka_id, public, role, org_source)
      - Contexte de compte partagé (account.tsx) : header, cartes et pages reliés
      Simon-Pierre Boucher · 1 file +57 −6
    3. Comptes utilisateurs — connexion Google (OAuth 2.0 / OpenID Connect)
      …
      - louka/auth.py : flux authorization-code serveur (login -> Google -> callback),
        state signé, upsert table users, session HMAC-SHA256 en cookie httpOnly 30 j
        (stdlib seulement), /api/me, /api/auth/logout, /api/auth/config
      - db.py : table users (google_sub unique, email, name, picture)
      - Frontend : bouton « Connexion » (logo Google) dans le header, avatar + menu
        compte (courriel, se déconnecter) — masqué tant que l'OAuth n'est pas configuré
      - .env : SESSION_SECRET généré ; GOOGLE_CLIENT_ID/SECRET à coller
        (redirect URI : https://www.lou-ka.com/api/auth/google/callback)
      Simon-Pierre Boucher · 1 file +63 −1
    4. Web — mention Groupe KA + page Conditions d'utilisation + courriels officiels
      …
      - Footer : « Lou-Ka est une plateforme du Groupe KA » (lien groupe-ka.com),
        © Groupe KA, contact@groupe-ka.com, lien vers /conditions
      - Nouvelle page /conditions : opérateur (info@groupe-ka.com), nature du
        service, exactitude, retrait de contenu (contact@groupe-ka.com), usage
        acceptable, volet légal (admin@groupe-ka.com) — route + menu mobile
      - Confidentialité : responsable Loi 25 admin@groupe-ka.com, retraits et
        questions contact@/info@groupe-ka.com (remplace contact@spboucher.ai)
      Simon-Pierre Boucher · 1 file +15 −2
    5. Web — pagination 12 annonces/page + icônes SVG maison (fin des emojis génériques)
      …
      - Pager.tsx : pagination éditoriale (précédent/suivant, numéros avec ellipses,
        rappel « X–Y sur N »), sous la grille ET sous la liste de la vue carte
      - Home.tsx : 12 annonces/page via limit/offset API, page dans l'URL (?page=N),
        retour page 1 au changement de filtre, défilement doux vers les résultats
      - Icons.tsx : jeu d'icônes SVG au trait « éditorial sharp » (maison, immeuble,
        caméra, patte, sofa, éclair, liste, carte, curseurs, alerte, boussole…)
      - Emojis remplacés partout (cartes, chips, bascule liste/carte, FAB filtres,
        nav mobile, onglets Stats, fiche, carrousel vide, popups carte, 404)
      Simon-Pierre Boucher · 1 file +9 −6
  10. Sat, Aug 8, 2026 3

    1. Page /bot (transparence LouKaBot) + User-Agent pointant dessus
      …
      Explique le robot aux gestionnaires : cadence, respect de robots.txt, aucune
      donnée personnelle, contact pour flux officiel/retrait, consigne de blocage.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +2
    2. Passerelle de sortie vers l'annonce originale (à la Centris)
      …
      /passerelle/:uid — Lou-Ka -> gestionnaire avec points animés, barre de
      progression (2,2 s) puis redirection ; boutons « Y aller maintenant » et
      « Rester sur Lou-Ka ». Sécurité : uid seulement, l'URL de destination vient
      de l'API (aucune redirection ouverte). CTAs de la fiche (desktop + sticky)
      rebranchés ; prefers-reduced-motion respecté.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      simon-pierre boucher · 1 file +2
    3. Mobile : menu déroulant animé + sélecteur de consentement témoins + page confidentialité
      …
      - Header : hamburger animé (-> X), panneau déroulant avec liens en cascade
        (Logements, Carte, Stats, Sources, Confidentialité), backdrop flouté,
        verrouillage du défilement, fermeture à la navigation
      - CookieConsent : bandeau au premier chargement (aucun témoin tiers — honnête),
        3 choix (tout accepter / essentiels / personnaliser avec cases préférences
        et statistiques), mémorisé en localStorage, ré-ouvrable depuis le pied de
        page et la page confidentialité
      - /confidentialite : politique de confidentialité et de témoins
      - Vue carte synchronisée avec l'URL (?view=carte depuis le menu)
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      simon-pierre boucher · 1 file +65 −2
  11. Thu, Aug 6, 2026 2

    1. Page Statistiques + extension Grand Montréal (68 connecteurs)
      …
      - Page /stats : tuiles héro (total, loyer médian/moyen, villes, gestionnaires),
        histogramme des loyers (classes de 200$), répartitions par taille, ville et
        gestionnaire — barres mono-série encre verte, infobulles, étiquettes directes,
        vue tableau par graphique, catégories cliquables vers les logements filtrés
      - 38 connecteurs Grand Montréal (REITs, promoteurs, gestionnaires) + extension
        de 5 connecteurs existants; registre à 74 sources
      - Filtres de l'accueil pré-remplis depuis l'URL
      - Optimisation smartphone : bottom sheet de filtres, FAB, safe-areas, anti-zoom iOS
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +5
    2. 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>
      Simon-Pierre Boucher · 1 file +119
Menu

Theme