SPB Git forge

spb/immo-ka

Public

Immo-Ka — agrégateur des propriétés à vendre au Québec (73 connecteurs, ~40 000 annonces, React+FastAPI)

112commits 1branches 0releases
125.4 MBsize
maindefault branch
13 days agolast push
Python 47.5% HTML 27.9% TypeScript 15.5% CSS 7.2% JavaScript 2%
ZIP tar.gz
NameLast commitUpdated
data [ka2] registre imt_ag_tremblant: note corrigée (api-ka ne lit pas le... 28 days ago
docs [ka2] registre imt_ag_tremblant: note corrigée (api-ka ne lit pas le... 28 days ago
frontend feat(fiche): refonte premium mobile-first de la fiche propriété... 19 days ago
immoka [ka2] fix connecteur realtor_ag_ca: coupures réseau transitoires vers... 13 days ago
scripts Annuaire des inspecteurs en bâtiment du Québec : page /inspecteurs... 1 mo ago
tests feat(hypothèque): moteur de taux hypothécaires canadien natif — 12... 1 mo ago
.env.example feat(hypothèque): moteur de taux hypothécaires canadien natif — 12... 1 mo ago
.gitignore feat(hypothèque): moteur de taux hypothécaires canadien natif — 12... 1 mo ago
geocode.py État du nœud committé — intégration carte (frontend/src/map/, MapView,... 1 mo ago
immoka.db [ka2] snapshot pré-mission rp_ag_codygroup 29 days ago
README.md docs: README ultra détaillé + visite guidée en 10 captures 28 days ago
requirements.txt feat(pdf): fiche PDF complète — prix + verdict Vrai-Prix, photos,... 1 mo ago
run.py Géocodage rigoureux : validation par références de ville (grappes +... 1 mo ago
vraiprix_local.py État du nœud committé — intégration carte (frontend/src/map/, MapView,... 1 mo ago
README.md source

Immo·Ka — Toutes les propriétés à vendre

Immo·Ka

Toutes les propriétés à vendre du Québec — maisons, condos, plex et terrains — réunies au même endroit, toujours à jour.

Site Documentation Guide PDF Nœud Port PM2 Python FastAPI React 18 SQLite Ka Maps Groupe KA

Immo-Ka est un agrégateur immobilier indépendant pour la province de Québec. Chercher une propriété, c'est normalement jongler entre les sites de RE/MAX, Royal LePage, Sutton, Via Capitale, Century 21, DuProprio et des dizaines d'autres bannières — chacun avec sa navigation, ses filtres et son format. Immo-Ka retourne le problème : un connecteur dédié par source (123 connecteurs enregistrés — flux centraux de bannières, sous-agences en plan B, plateformes sans courtier) visite chaque site, normalise chaque annonce vers un schéma unique (PropertyListing), déduplique par numéro Centris et détecte les changements en continu, avec lien direct vers l'annonce originale.

Les sites d'agences n'offrent pas de webhooks : Immo-Ka en reproduit l'équivalent par synchronisation périodique + hash de contenu — ajouts, changements de prix et retraits (propriété vendue) détectés automatiquement, avec délai de grâce contre les ratés ponctuels. Couverture (métriques de l'agrégat) : 70 500+ propriétés actives (70 535 au 2026-08-28), 66 sources, 22 bannières, 159 sous-agences, 3 331 villes. C'est le pendant « à vendre » de Lou-Ka (location), branché sur le moteur d'estimation Vrai-Prix et sur le compte unique KA ID du Groupe KA.

# Visite guidée

Captures du 2026-08-28 — desktop 1440×900 · mobile 390×844.

Accueil
Accueil — héro typographique, recherche instantanée, compteurs live de l'agrégat
Vue carte
Vue carte Ka Maps — grappes de prix Mapbox GL 3D, marqueurs colorés selon l'écart au Vrai-Prix, « rechercher en déplaçant la carte »
Fiche propriété
Fiche propriété (5334 rue Waverly, Le Plateau-Mont-Royal) — galerie, prix + badge Vrai-Prix, caractéristiques Centris, route SEO /propriete/:uid/:slug
Taux hypothécaires
Taux hypothécaires — comparateur de taux par prêteur + calculateur et intelligence de financement
Observatoire stats
Observatoire /stats — 70 500+ annonces actives, volumes par type et bannière, écart prix demandé vs estimation Vrai-Prix, rapport PDF
Agences
Agences — registre bannière → sous-agence, comptes d'annonces dédupliqués
Déménageurs
Annuaire des déménageurs — 565 fiches, partagé avec Lou·Ka
Inspecteurs
Annuaire des inspecteurs en bâtiment — 542 fiches
Contact
Contact — formulaire + coordonnées du Groupe KA
Accueil mobile
Accueil mobile (390×844) — tabbar flottante, même langage que Lou-Ka v2

🗄️ Les captures de la refonte v2 (2026-08-25, webp) sont conservées dans docs/screenshots/desktop/ et docs/screenshots/mobile/ ; les captures d'époque dans docs/archive/.

# Nouveautés front-end (2026-08-25)

  • Refonte éditoriale v2 — accueil et fiche propriété en DA premium « sans boîtes » ; grille desktop uniforme, header sans débordement.
  • Tabbar mobile flottante — même langage que Lou-Ka v2 ; ordre DOM = ordre visuel sur la fiche.
  • Dédup courtier — priorité au courtier + box « Aussi publiée sur… » sur la fiche.
  • Géocodage rigoureux — validation par références de ville (grappes + Nominatim).
  • Annuaires — inspecteurs en bâtiment (542) et déménageurs (565, partagé avec Lou·Ka).
  • Widget ka-agent v4 — cartes d'annonces cliquables et choix en boutons.

# Fonctionnalités

  • Recherche & filtres — texte libre (adresse, ville, n° MLS), ville + secteur, type, agence, prix, chambres, salles de bain, superficie ; tri par prix ou récence ; état encodé dans l'URL (partageable).
  • Carte Ka Maps — framework carto maison du Groupe KA (moteur Mapbox GL 3D) : grappes de prix, marqueurs colorés selon l'écart au Vrai-Prix, « rechercher en déplaçant la carte », bascule 2D/3D.
  • Fiche complète — galerie + lightbox, caractéristiques Centris, pièces & dimensions par étage, inclusions, description, mini-carte d'emplacement.
  • Estimation Vrai-Prix — valeur marchande estimée (modèle hédonique + comparables) : jauge P10–P90, verdict sur-évalué / aligné / sous l'estimation.
  • Rôle d'évaluation foncière — valeur au rôle terrain/bâtiment, année de construction et superficies officielles, jointes localement depuis la base Vrai-Prix.
  • Historique de prix — baisses et hausses du prix demandé horodatées (table price_log) + jours sur le marché.
  • Taux hypothécaires & financement — page /taux-hypothecaires : taux courants par prêteur, calculateur de paiements et « intelligence » de financement (/api/mortgage/*) appliqués au prix de la fiche.
  • Quartier — aire de diffusion du recensement : revenu médian, loyer moyen, % locataires, proximité épiceries/parcs/soins (StatCan), îlot de chaleur (INSPQ).
  • Couches territoriales — registre des loyers, zones inondables (BDZI), qualité de l'air, prix de l'essence, commerces et transport en commun, estimation Hydro-Québec précalculée lors de la sync.
  • Stats — tableau de bord /stats : volumes par type et bannière, écart prix demandé vs estimation Vrai-Prix, panneaux territoire + rapport PDF Groupe-KA.
  • Agences — registre par bannière → sous-agence, comptes d'annonces dédupliqués.
  • Annuaires pratiques — inspecteurs en bâtiment (/inspecteurs) et déménageurs (/demenageurs, base partagée avec Lou·Ka).
  • KA ID & favoris — SSO du hub groupe-ka.com (JWT HS256), favoris partagés sur toutes les plateformes Ka ; widget de chat KA Agent intégré.
  • SEO programmatique — HTML complet rendu côté serveur, une page indexable par ville / type / ville+type, route canonique /propriete/:uid/:slug, sitemaps et données structurées.

# API principale

Toutes les données servies au frontend passent par une API JSON publique (FastAPI) :

Endpoint Rôle
GET /api/listings recherche paginée : texte libre, ville, type, agence, prix, chambres/sdb, superficie, tri
GET /api/listings/{uid} fiche complète d'une annonce (photos, pièces, enrichissements, estimation)
GET /api/listings.geojson flux GeoJSON pour la carte Ka Maps (grappes + marqueurs)
GET /api/facets facettes dynamiques (villes, types, agences, fourchettes de prix)
GET /api/sources · GET /api/agencies état des connecteurs et registre bannières → sous-agences
GET /api/mortgage/providers · POST /api/mortgage/calculate · /api/mortgage/intelligence taux hypothécaires par prêteur, calculateur et analyse de financement
GET /api/hydro · /api/commerces · /api/air · /api/gaz · /api/inondation couches territoriales d'une fiche
GET /api/stats · /api/stats/dashboard métriques agrégées et tableau de bord
GET /api/stats/report · /api/stats/catalog · POST /api/stats/report/custom rapports PDF Groupe-KA (standard et personnalisés)
GET /api/auth/me · /api/favorites · POST /api/favorites/toggle session KA ID et favoris partagés
POST /api/sync déclenchement d'une synchronisation
GET /robots.txt · /sitemap.xml · /sitemaps/{name} · /api/seo/resolve infrastructure SEO

# Connecteurs & sources

123 connecteurs enregistrés (paquet immoka/connectors/), un par source, orchestrés par la boucle d'ingestion :

Famille de sources Exemples Technique d'extraction
Flux centraux de bannières RE/MAX Québec, Royal LePage, Sutton, Via Capitale, Century 21, Proprio Direct API JSON internes (Meilisearch, Algolia, source.immo, wp-json)
Sous-agences (plan B) 159 bureaux — KW Distinction/Prestige/Urbain, eXp Québec, Barnes, Engel & Völkers, BHHS… API du site du bureau, JSON-LD, sitemaps
Sans courtier / petites annonces DuProprio, Kijiji, LesPAC, Facebook Marketplace API publiques + extraction dédiée
Sites vitrines & SPA anti-bot agences boutique (Charisma, Imcha, Immeubles Stuart…), GuideHabitation JSON-LD génériques, sitemaps, Firecrawl en secours
Extension Ontario (en pause) connecteur générique RealtyPress + monstres CREA DDF (revelrealty, codygroup…) CREA DDF / RealtyPress — suspendue (docs/ONTARIO-PAUSE.md), rien d'effacé
  • Normalisation : chaque annonce est projetée vers le schéma unique PropertyListing (immoka/schema.py).
  • Dédup : par numéro Centris (dup_hidden) — une propriété affichée par 3 sites = 1 fiche, sources créditées ; en front, priorité au courtier + box « Aussi publiée sur… ».
  • Détection de changements : upsert par hash de contenu ; retraits avec délai de grâce contre les ratés ponctuels d'un site.
  • Qualité : couche quality.py + imgaudit.py — annonces publiées vs quarantaine (fiches incomplètes ou douteuses retenues), audit des images (placeholders, doublons, formats), golden record par propriété.
  • Cadence : resynchronisation complète aux 4 heures (run.py watch 240, processus immo-ka-sync), enrichissements (géocodage, POI, quartier, Vrai-Prix, Hydro-Québec) appliqués au fil de la sync.

# Architecture

Composant Rôle
immoka/connectors/ 123 connecteurs enregistrés (API JSON internes — Meilisearch, Algolia, source.immo, wp-json —, JSON-LD, sitemaps, Firecrawl pour les sites SPA/anti-bot)
immoka/ingest.py + normalize.py + schema.py boucle de sync : normalisation vers PropertyListing, upsert par hash de contenu, dédup Centris (dup_hidden), délai de grâce sur les retraits
immoka/web.py + seo.py FastAPI : API JSON, rendu SEO serveur, service du build frontend
Enrichissement geocode.py, poi.py, quartier.py, vraiprix.py/vraiprix_local.py, hydro.py, inondation.py, air.py, gaz.py, commerces.py, quality.py/imgaudit.py (couche qualité + quarantaine)
Base de données SQLite en mode WAL : data/immoka.db (annonces) + bases annexes (quartier.db, vraiprix.db, hydro.db, air.db, gaz.db, commerces.db, inondation.db, transit.db, rdl.db)
Frontend React 18 + Vite + TypeScript, react-router, design system ka-ui, cartes @groupe-ka/ka-maps (Mapbox GL 3.28)

Processus PM2 (production) :

Processus Commande Rôle
immo-ka-web .venv/bin/python run.py serve 8096 API + frontend + SSR SEO
immo-ka-sync .venv/bin/python run.py watch 240 resynchronisation des sources aux 4 h
immo-ka-ngrok ngrok http --url=www.immo-ka.com 8096 tunnel vers le domaine public

# Structure du repo

Répertoire Contenu
immoka/ paquet Python : connecteurs, ingestion, API/SSR, enrichissements, stats
frontend/ SPA React 18 + Vite + TypeScript (pages, composants, ka-maps, ka-ui)
data/ bases SQLite (immoka.db + bases annexes) et registres d'agences JSON
docs/ captures d'écran (visite guidée + archives), docs des connecteurs, rapports de validation
scripts/ outillage (génération des docs connecteurs, rafraîchissement Via Capitale, validation du rendu)
run.py / requirements.txt point d'entrée CLI (sync, watch, serve, list, geocode, poi, quartier, …) et dépendances backend

# Documentation

  • Guide d'utilisation en ligne : www.immo-ka.com/doc/ — visite pas à pas du site (accueil, recherche filtrée, fiche détail, carte), avec captures annotées.
  • Guide PDF téléchargeable : immo-ka-documentation.pdf — la même documentation, mise en page aux couleurs du site.
  • Les captures du guide sont versionnées dans frontend/public/doc/img/ (servies telles quelles par le site).

# Développement (remote-first)

La source de vérité est le repo git sur le nœud M4M64a (~/apps/immo-ka) — immo-ka n'a aucune copie laptop. Toute modification se fait sur le nœud via SSH : édition, build, redémarrage, puis commit/push depuis le nœud (agent forwarding actif).

  • Remote origin = spbgit, le git perso (git.spboucher.ai) : alias SSH gitsrv configuré sur le nœud → gitsrv:srv/git/immo-ka.git (bare repo hébergé sur M3U96a).
bash
ssh M4M64a
cd ~/apps/immo-ka

# Backend
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt

# Frontend
cd frontend && npm install && npm run build && cd ..

# Ingestion et service
.venv/bin/python run.py list          # lister les connecteurs
.venv/bin/python run.py sync          # synchroniser (ou : sync <source> …)
.venv/bin/python run.py serve 8096    # API + frontend

# Après un changement en prod
pm2 restart immo-ka-web               # (ou immo-ka-sync selon le changement)

git add <fichiers> && git commit && git push origin main

# Déploiement

En production sur le nœud M4M64a du cluster MacLustr (~/apps/immo-ka), servi sur le port 8096 et exposé via un tunnel ngrok sur www.immo-ka.com. Trois processus PM2 : immo-ka-web (serveur), immo-ka-sync (boucle de sync aux 4 h), immo-ka-ngrok (tunnel). La base data/ de prod est resynchronisée en continu — ne jamais l'écraser.

# Écosystème Groupe KA

Plateforme Univers
groupe-ka.com portail & KA ID
lou-ka.com logements à louer
immo-ka.com propriétés à vendre
vrai-prix.com estimation immobilière
auto-ka.com véhicules
fabri-ka.com produits québécois
food-ka.com épicerie/alimentation
resto-ka.com restaurants
sorti-ka.com sorties et événements
job-ka.com emplois
crea-ka.com créateurs
trouve-ka.com petites annonces
api-ka.com API de données

# Contact

Simon-Pierre Boucher — fondateur, Groupe KA 📧 contact@spboucher.ai


© Groupe KA — Simon-Pierre Boucher · contact@spboucher.ai Ce repo vit sur spbgit (git.spboucher.ai).