Vrai-Prix — l'évaluation du vrai prix des propriétés résidentielles au Québec.
-
Tue, Oct 20, 2026 1
-
feat(ventes): registre des ventes récentes (flux Journal de Québec / Journal de Montréal, api.qub.ca)
…
- page /ventes : tuiles (30 j, 90 j, médiane, dernière capture), médianes par type, filtres GET municipalité / type / prix / période (sans JS requis), tableau date · adresse (→ /estimation) · municipalité (→ /municipalite) · type · prix · rôle · écart vs rôle, pagination ; JSON-LD Dataset + fil d'Ariane - API /api/ventes (mêmes filtres, Cache-Control 5 min) - page municipalité : section « Dernières ventes à … » (12 dernières, n et médiane 12 mois, lien vers le registre filtré) - navigation : entrée « Ventes » (header + menu mobile), pied de page, bouton « Toutes les ventes récentes » sous le flux de l'accueil, onglet Marché actif, sitemap - lib/ventes.ts + index idx_tx_city_date (city NOCASE, date DESC, amount DESC) - connecteur ingest-jdm.mjs : jeton externe QUB_TOKEN / --token (court-circuite le login Scrapfly) ; scripts/qub-token-safari.sh (laptop, Safari piloté par AppleScript + cliclick, ~/.config/vrai-prix/qub.env) et ingest-via-safari.sh Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
-
-
Tue, Sep 8, 2026 4
-
fix(analyse IA): analyses orphelines — une analyse interrompue par un redémarrage du serveur (pm2 restart, déploiement) est marquée échouée après 20 min (store.failOrphans, appelé au démarrage d'une analyse et à chaque lecture) au lieu de rester « en cours » indéfiniment
…
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
-
fix(analyse IA): sorties « placeholder » du modèle — tool_choice auto (puis any en relance) au lieu d'un outil forcé qui faisait répondre Sonnet 5 par {"property_analysis":{"placeholder":true}} ; ≥ 3 sections de premier niveau absentes = échec dur → relance avec consigne explicite (3 tentatives max), jamais une analyse « complétée » vide ; test missingTopLevelSections
…
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
-
fix(analyse IA): photos Facebook Marketplace en HTTP 400 — User-Agent ASCII (un octet accentué faisait rejeter la requête par *.fbcdn.net), Accept navigateur, repli 4xx avec en-têtes Chrome + Referer par hôte, message d'erreur avec l'hôte ; nav desktop : libellés courts + nowrap (8 entrées)
…
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
-
Méthode du coût + propriétés à vendre (portage uqo-eval → Vrai-Prix)
…
Deux nouveaux univers, portés du fork UQO Éval (commits 8fa85f6, 726b80b, 1779481, 08b3a13) et rebrandés Vrai-Prix : • /cout — méthode du coût « ultra avancée » : base data/cost.db (184 articles, 99 assemblages, 16 localisations ; 4 967 observations, 2 895 grilles APCHQ 2023→2026, 1 084 points StatCan 18-10-0289), moteur déterministe (RCN → dépréciation âge-vie / composantes → terrain → indication, fourchette P10-P90, confiance A-D décomposée), atelier propriété / construction, catalogue d'assemblages, console admin (jeton COST_ADMIN_TOKEN), connecteurs Firecrawl (APCHQ, CCQ, StatCan, Canac, BMR, Patrick Morin, imports Altus/RSMeans) + planificateur `npm run cost:sync`, PDF « Rapport — Méthode du coût » (mot-symbole Vrai-Prix, palette rouge/bordeaux), 9 outils Ka (cout_*), lien « Voir la méthode du coût » sur chaque rapport de valeur. • /a-vendre — toutes les propriétés réellement à vendre au Québec (copie Immo-Ka data/immoka.db, ~71 600 annonces vivantes) : recherche FTS + filtres, fiche complète (galerie, prix, caractéristiques, historique de prix, mesure Vrai-Prix vs prix demandé, duel des méthodes, portrait au rôle, voisines), atelier « mon évaluation » (bassin de ventes réelles + annonces, comparables, grille d'ajustements en $, réconciliation, confrontation ; localStorage), analyse IA du bâtiment (Sonnet 5, photos + description → composantes → moteur déterministe du coût, overrides, JSON technique, similaires techniques). Table vp_eval (ex-uqo_eval) produite par scripts/eval-immoka.ts (shards) + build-marche-stats.mjs. • /stats/marche + teaser /stats — la mesure à l'épreuve du marché, lue à chaud depuis data/marche-stats.json (src/lib/marche-stats.ts) avec repli sur l'instantané versionné src/data/marche-stats.json. • scripts/immoka-sync.sh — rafraîchissement nocturne : .backup Immo-Ka sur M4M64b (SSH LAN, clé gardien), rsync delta, ré-évaluation en shards, vp_eval + agrégats, index/FTS, bascule atomique, pm2 restart. • Intégration : nav header/tabbar/footer/sitemap, accueil (2 cartes), méthodologie (sections 08 Méthode du coût et 09 Marché), confidentialité (analyse IA à la demande, photos publiques, rétention 30 j), prompt système de Ka. Rebranding complet : aucune mention UQO / IMM1003 / IMM1033 / « laboratoire pédagogique » ; « mode étudiant » → « mode exercice ». • Dépôt : .gitignore `data/` → `/data/` (src/data/*.json désormais versionné : stats.json, stats-v2.json, marche-stats.json) + `tmp/` ; devDep tsx ; scripts cost:sync / immoka:sync ; docs/cost-*.md portés. Tests : 69 vitest (moteur, connecteurs hors ligne, IA hors ligne), tsc propre, next build OK. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
-
-
Wed, Aug 26, 2026 1
-
Tue, Aug 25, 2026 5
-
Header : vraiment collant au défilement
…
La règle hors @layer « body > * { position: relative } » (peinture au-dessus du grain) écrasait l'utilitaire Tailwind sticky du header — les styles non-layered gagnent sur @layer utilities. Exception explicite « body > header { position: sticky; top: 0 } » : le menu du haut reste visible en scrollant, mobile comme desktop. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> -
Barre de navigation mobile commune Groupe KA (KA Tabbar v1)
…
Pilule flottante fixe en bas (standard ka-ui/nav, variante Next.js) : Estimer · Marché · Ventes · Méthode, accent rouge signature, bilingue fr/en, safe-area iOS. Estimer mène immédiatement à la recherche d adresse (focus du champ héros, id vp-adresse) ; Ventes ancre le flux des dernières ventes réelles de l accueil (id ventes). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
fix lettrage .hl (couleur héritée — le .hl ka-ui imposait du blanc sur papier) + /ka bascule sur le widget ka-agent commun (bulle → plein écran), suppression du chat embarqué KaChat
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
refonte v2 « terminal éditorial » : hero encre pleine largeur, recherche centrale CTA rouge, graphique marché multi-séries interactif (palette CVD validée), flux de ventes prix-d'abord, rapport de valeur recomposé (grands chiffres, sections à filets), méthodologie article + chaîne de calcul, header compact, zéro ombre décalée/carte superflue
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
fix(db): index NOCASE municipalité + index partiel ventes récentes — panne 2026-08-25
…
municipalityCenter/municipalityPercentile faisaient un SCAN des 3,7 M d'unités à chaque page d'estimation (COLLATE NOCASE ≠ idx_units_mun BINARY) ; recentSales scannait 750 k transactions avec tri temporaire. Sous trafic crawlers, better-sqlite3 (synchrone) gelait l'event loop : next-server à 100 % CPU pendant 10 h, port 8090 muet, site down. Index créés sur la base live + bootstrap CREATE INDEX IF NOT EXISTS dans getDb() pour survivre à une reconstruction de la base. Requêtes vérifiées : covering index, pages < 0,32 s sous 20 req parallèles (avant : plusieurs secondes chacune, empilement infini). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Mon, Aug 24, 2026 2
-
Sun, Aug 23, 2026 5
-
Favoris unifiés « Mon univers Ka » (KA ID) — ♥ hub Groupe KA
…
- lib/hubfav.ts : client HMAC du hub (transposé de food-ka) — aucun stockage local, toggle synchrone, lecture GET signée avec cache mémoire 30 s invalidé à chaque toggle - /api/favorites (GET, 401 sans session) + /api/favorites/toggle (POST, bascule add/remove selon la liste du hub, action explicite acceptée) - FavButton ♥ : fiche estimation (panneau prix) + cartes du parc ; déconnecté → départ SSO KA ID ; état initial partagé (une requête/page) - page /favoris : liste (titre, ville, estimation, lien fiche, retrait) ; lien « Mes favoris » sur /compte - Testé bout en bout contre le hub (add → list → remove, rien laissé) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
stats v3 : rapports PDF personnalisés (catalogue, rendu au choix, ReportBuilder)
…
- report-stats.ts : catalogFromDashboard() + buildCustomReport(spec) (dispatch par bloc, conversions tableau, sommaire, gabarit Groupe-KA) - routes /api/stats/catalog (GET) + /api/stats/report/custom (POST) - kacharts.tsx v3 : ReportBuilder intégré à PdfButton (modal, ordre, rendus, modèles localStorage) — SPEC.md §3bis
-
Retrait complet de Monetag (meta de vérification + script publicitaire)
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Script publicitaire Monetag (zone 272534) dans le layout
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Balise meta Monetag (vérification régie pub) dans le <head>
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Sat, Aug 22, 2026 3
-
Upgrade majeur apparence + information : contexte marché, fourchette visuelle, accueil enrichi
…
- Fiche estimation : barre de fourchette P10-P90 (marqueurs estimation + rôle), faits rapides ($/m², type, année, superficies), section « Le marché autour de cette propriété » (courbe d'indice base 100 + tendances 12 mois/2021, ventes réelles du secteur avec rayon adaptatif, position percentile dans la municipalité), comparables enrichis ($/m², superficie, année) - Moteur : MarketContext (estimator) — stats secteur depuis les candidats déjà chargés, percentile municipal (db), aussi servi par /api/estimate (manuel) - Accueil : pouls du marché (indice par type + variations), dernières ventes réelles captées (lien vers l'estimation), bande « comment ça marche », compteur ventes/30 j — page en ISR 1 h - DB : index idx_tx_date sur transactions(date) - MetricViz : RangeBar, MarketIndexChart, PercentileBar, IndexSpark Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
SEO : og:title/openGraph alignés sur le titre riche de l'accueil + lang fr-CA
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Wed, Aug 19, 2026 4
-
tokens.css : overflow-x clip aussi sur html (quirk WebKit iOS — le clip sur body seul laisse défiler le viewport)
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Stats v2 (module commun Groupe KA) : /stats ultra complet + 5 rapports PDF
…
- Dashboard v2 (agrégats réels du rôle + corpus de ventes, stats-v2.json via scripts/build-stats-v2.mjs) : 10 KPI (deltas honnêtes millésime/12 mois + sparklines), 4 jauges de couverture, 5 séries (millésimes, ventes/mois, volume, prix médian), 2 multi-courbes (indice marché, $/m² par type), ventes empilées par type, 3 répartitions, 2 distributions, géo, calendrier des ventes, 6 tableaux, 10 records. - /api/stats/report : 5 modes (complet, synthese, tendances, repartitions, donnees ; inconnu → complet), filename(mode), moteur pdfkit v2 100 % vectoriel (sommaire paginé, courbes/aires/barres, multi-courbes à motifs, empilées, anneau, jauges, heatmap, tableaux zébrés paginés, records). - /stats : hero conservé + StatsDashboard (kit kacharts v2, ordre SPEC §1), PdfButton menu 5 rapports, fraîcheur + rafraîchir. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Correctifs front-end mobile : viewport-fit=cover, safe-area et verrou de scroll cookies, socle mobile ka-ui
…
- layout.tsx : export viewport (device-width, initial-scale 1, viewport-fit=cover) pour les encoches iOS ; extension tactile ::after -8px sur le logo Vrai-Prix du header (cible >= 44 px) - CookieConsent.tsx : padding bas du bandeau avec env(safe-area-inset-bottom) ; verrou du scroll d arriere-plan quand le panneau de preferences est ouvert (useEffect + cleanup) + fermeture a Escape - src/ka/tokens.css : nouvelle section SOCLE MOBILE OBLIGATOIRE (z-index unifies, --vh100 dvh, .ka-bottombar, verrou ka-scroll-lock, filet anti-zoom iOS 16 px, extension tactile gk-badge) - public/ka-agent.js : agent corrige (safe-area bulle/panneau, textarea 16 px, plein ecran auto <= 640 px + verrou scroll kaa-lock) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Mon, Aug 17, 2026 6
-
Câblage du widget KA Agent (bulle de chat Groupe KA)
…
Ajout des balises window.KA_AGENT={site:"vrai-prix"} et /ka-agent.js en fin de <body> du layout racine. Coexiste avec l agent Ka de /ka. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> -
Footer/contact : Job-Ka rejoint l écosystème (ecosystem.json 13 sites)
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Stats Groupe KA — /api/stats/dashboard (contrat SPEC), rapport PDF au gabarit commun (complet/synthèse) et boutons PDF + fraîcheur sur /stats
…
- Nouveau GET /api/stats/dashboard : KPI, série des millésimes 2021-2026, répartition par type, top municipalités, top 20 en table, records — period accepté mais non applicable (instantané du rôle 2026), cache mémoire. - report-stats.ts porté au gabarit Groupe-KA (A4) : couverture kicker GROUPE KA · RAPPORT STATISTIQUE + wordmark boîte encre/accent #ff5148 + bande « par Groupe KA — groupe-ka.com », sommaire, en-tête/pied normalisés, page de fin (3 courriels + rôles, avertissement d agrégateur d ecosystem.json). Contenu riche conservé (chiffre-choc, millésimes, types, palmarès 200) + records ; mode synthese = couverture + sommaire exécutif. - GET /api/stats/report?mode=complet|synthese (alias /api/report/stats), fichier groupe-ka_vrai-prix_stats_instantane_<date>.pdf. - /stats : barre en tête (mention de fraîcheur + Télécharger le rapport PDF + Synthèse) ; correction du débordement 360 px des stat-chips du bloc encre. - Kit commun src/ka/stats (SPEC.md, kapdf.py, kacharts.tsx) versionné. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Assets Groupe KA (og.png, favicon.svg, apple-touch-icon) + correction du débordement à 768 px
…
- ka-assets/ → public/ : image de partage og.png (1200×630), favicon.svg, apple-touch-icon.png ; retrait du favicon.ico par défaut de Next. - layout.tsx : icons + og:image/twitter:image (summary_large_image). - page.tsx : titre d'accueil suffixé « · Un service Groupe KA ». - HeaderNav : la nav pilule n'entre pas à 768 px (~852 px requis) — bascule desktop/mobile déplacée de md: à lg: (cause racine du débordement horizontal de +84 px en tablette). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
API publique /api/stats — agrégats provinciaux pour les métriques live du hub
…
GET /api/stats expose en JSON les agrégats de src/data/stats.json (unités, valeur totale et médiane 2026, croissance, logements, municipalités, transactions, version du modèle, date de génération). Import statique du JSON, aucune base de données ; Cache-Control public max-age=600 + CORS ouvert en lecture. Consommé par groupe-ka.com pour ses métriques live. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Harmonisation Groupe KA — design system ka-ui, badge, footer commun, page contact
…
- ka-ui vendoré (src/ka/) : tokens.css importé dans layer(base) via globals.css (bat le preflight Tailwind, reste sous les utilitaires et le design local), bloc compat pour les titres, accent rouge canonique (--accent/--accent-soft/ --accent-deep/--on-accent) avec alias historiques --lime/--lime-soft - Header : badge « Un service Groupe KA » à côté du logo (desktop xl+) et dans le pied du menu mobile, cliquable vers groupe-ka.com - Footer : KaFooter commun (bloc encre, contacts et sites centralisés d ecosystem.json) précédé de la rangée locale FooterNav restylée papier - Nouvelle page /contact : courriels centralisés, avertissement d agrégateur, lien hub + création de compte KA ID, liste des sites de l écosystème - SEO : titre par défaut « Vrai-Prix — Un service Groupe KA » (layout + OG/X) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Thu, Aug 13, 2026 3
-
SEO programmatique — pages municipalités, sitemaps 3,7 M de fiches, métadonnées
…
- Fondations : metadataBase, gabarit de titres, og/twitter, canonical par page, JSON-LD Organization+WebSite (layout), title/description uniques sur toutes les pages statiques (pages clientes scindées en wrapper serveur + *Client.tsx). - /estimation/[id] : generateMetadata (adresse, estimation, fourchette), JSON-LD SingleFamilyResidence/Residence/Place + BreadcrumbList, estimation dédupliquée via React cache(). - Pages programmatiques : /municipalites (index A-Z), /municipalite/[slug] (~1 097) et /municipalite/[slug]/[type] (~5 900) — stats agrégées (médiane, totaux, croissance 2021-2026), liens HTML vers les fiches, municipalités voisines (lib/municipalites.ts, cache mémoire). - Sitemaps : /sitemap-index.xml (à soumettre dans GSC) → /sitemap.xml (7 043 pages) + /estimation/sitemap/0-83.xml (45 000 fiches chacun, plages de rowid). robots.ts (disallow /api/, /compte). - noindex : /compte, /estimation/manuelle (espace d'URL paramétrique). - Accueil : section « Explorer par municipalité » (maillage indexable). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
SSO « Se connecter avec KA ID » via le hub groupe-ka.com
…
Routes /api/auth/ka/{login,callback} + /api/auth/{me,logout}, session cookie signée (ka-auth.ts, node:crypto pur), profil hub (hub-profile.ts, cache 60 s), page /compte carte de membre, AccountButton au header. (Déployé le 2026-08-13 ; l'intégration au layout arrive avec le commit SEO.) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> -
Vrai-Prix Maps — recherche par carte propulsée par Ka Maps (framework Groupe Ka)
…
Remplace la carte Leaflet/OSM par le framework partagé @groupe-ka/ka-maps (moteur Mapbox GL, style Standard 3D par défaut + bouton 2D) : pastilles de VALEURS ESTIMÉES 2026 (encre, liseré rouge — jamais présentées comme un prix demandé), grappes avec compte + valeur moyenne clampée, chargement piloté par le viewport (débounce, annulation, cache, mode auto), aperçu React bilingue FR/EN, « Me localiser » sur action explicite, badge Vrai-Prix Maps · Groupe Ka. /api/nearby : plafonds relevés (halfLat 0,08 / halfLng 0,12 / limit 1500) — changement additif, contrat iOS 1.1.0 inchangé (défauts identiques). Consommé via tarball npm (file:../../ka-maps/*.tgz) — Turbopack ne résout pas les liens symboliques hors racine. leaflet/@types/leaflet retirés. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Tue, Aug 11, 2026 1
-
Recherche par carte — /carte (Leaflet+OSM) + API /api/nearby
…
- GET /api/nearby : unités dans une boîte englobante (idx_units_geo), tri par distance au centre (sinon l'index renvoie une bande sud), plafonds serveur ~2,2 km / 400 unités - Page /carte : fond OpenStreetMap, points encre/accent, popup éditoriale (adresse, type, estimation 2026 → /estimation/[id]), géolocalisation « Me localiser », garde de zoom, bilingue FR/EN, entrée nav « Carte » - Sert aussi l'app iOS native (onglet Carte MapKit, repo vrai-prix-ios) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Sun, Aug 9, 2026 4
-
Ka — liens PDF fiables (réfs persistantes, garde anti-hallucination)
…
Le modèle inventait des URLs de rapport quand les résultats d'outils n'étaient plus en contexte. Triple verrou : - chaque évaluation émet une réf persistante (id + URLs exactes des PDF) que le client conserve dans l'historique, masquée à l'affichage ; - garde serveur : demande de PDF sans réf en contexte → note injectée forçant chercher + liens_rapports avant tout lien ; - endpoints /api/report tolérants (id décoré nettoyé, format=pro* redirigé vers le rapport professionnel) ; liens intégrés au dossier/évaluation ; resolveId sur tous les outils à identifiant. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Ka v2 — recherche approximative, dossier d'expert, tableaux, mobile
…
- Recherche à relaxation progressive : si l'adresse exacte est introuvable, Ka présente les correspondances les plus proches (même voie/secteur) au lieu de répondre introuvable. - Nouvel outil dossier_complet : évaluation + marché local + tendance + comparables + synthèse chiffrée en un seul appel — réponses d'expert. - Chat : vrais tableaux HTML pour le markdown, fil avec défilement interne (plus aucun saut de page pendant le streaming), gabarit mobile refait (hauteur dvh, composer toujours visible, chips adaptées). - Boucle renforcée : 12 tours, 2200 tokens, appels d'outils parallèles. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Ka — agent IA conversationnel (Claude Haiku 4.5, streaming, 11 outils)
…
Page /ka + route /api/ka : boucle agentique en streaming SSE branchée sur la base SQLite et le moteur d'estimation (recherche FTS, évaluation, comparables, indice de marché, stats municipales/provinciales, parc, comparaison, recherche par secteur, rapports). Prompt caching sur system+outils, clé API via variable d'environnement (jamais versionnée). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
feat: Vrai-Prix — moteur d'évaluation immobilière transparent pour le Québec
…
Estimation hybride (modèle hédonique LightGBM + comparables ajustés), 3,75 M de propriétés, fourchette P10-P90, indice de confiance A-D, rapports PDF vectoriels, parc immobilier, statistiques provinciales. Identité éditoriale sharp — accent rouge #ff5148. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Sat, Aug 8, 2026 1