Vrai-Prix — La valeur réelle de chaque propriété

Vrai-Prix

La valeur réelle de chaque propriété

[![Site](https://img.shields.io/website?url=https%3A%2F%2Fwww.vrai-prix.com&style=flat-square&label=www.vrai-prix.com&up_color=ff5148)](https://www.vrai-prix.com) [![Documentation](https://img.shields.io/badge/📖_documentation-%2Fdoc-ff5148?style=flat-square)](https://www.vrai-prix.com/doc/index.html) [![PDF](https://img.shields.io/badge/guide-PDF-ff5148?style=flat-square)](https://www.vrai-prix.com/doc/vrai-prix-documentation.pdf) ![Nœud](https://img.shields.io/badge/n%C5%93ud-M3U96a-1f6feb?style=flat-square) ![Port](https://img.shields.io/badge/port-8090-ff5148?style=flat-square) ![PM2](https://img.shields.io/badge/process-PM2-2b037a?style=flat-square) [![Propriétés](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fwww.vrai-prix.com%2Fapi%2Fstats&query=%24.units_total&label=propri%C3%A9t%C3%A9s&color=ff5148&style=flat-square)](https://www.vrai-prix.com/api/stats) [![Transactions](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fwww.vrai-prix.com%2Fapi%2Fstats&query=%24.transactions&label=transactions%20r%C3%A9elles&color=ff5148&style=flat-square)](https://www.vrai-prix.com/api/stats) [![Municipalités](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fwww.vrai-prix.com%2Fapi%2Fstats&query=%24.municipalities&label=municipalit%C3%A9s&color=ff5148&style=flat-square)](https://www.vrai-prix.com/api/stats) [![Logements](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fwww.vrai-prix.com%2Fapi%2Fstats&query=%24.dwellings&label=logements&color=ff5148&style=flat-square)](https://www.vrai-prix.com/api/stats) [![Valeur médiane 2026](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fwww.vrai-prix.com%2Fapi%2Fstats&query=%24.value_median_2026&label=m%C3%A9diane%202026&suffix=%20%24&color=ff5148&style=flat-square)](https://www.vrai-prix.com/api/stats) [![Croissance](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fwww.vrai-prix.com%2Fapi%2Fstats&query=%24.growth_2021_2026_pct&label=croissance%202021%E2%86%922026&suffix=%20%25&color=ff5148&style=flat-square)](https://www.vrai-prix.com/api/stats) ![MdAPE](https://img.shields.io/badge/MdAPE-11%2C0%20%25-ff5148?style=flat-square) ![Next.js](https://img.shields.io/badge/Next.js-16.3-141814?style=flat-square&logo=nextdotjs) ![React](https://img.shields.io/badge/React-19-141814?style=flat-square&logo=react) ![TypeScript](https://img.shields.io/badge/TypeScript-strict-141814?style=flat-square&logo=typescript) ![Tailwind](https://img.shields.io/badge/Tailwind-4-141814?style=flat-square&logo=tailwindcss) ![SQLite](https://img.shields.io/badge/SQLite-FTS5-141814?style=flat-square&logo=sqlite) ![Mapbox](https://img.shields.io/badge/carte-Mapbox%20GL-141814?style=flat-square&logo=mapbox) ![Claude](https://img.shields.io/badge/agent%20Ka-Claude-141814?style=flat-square&logo=anthropic) ![Vitest](https://img.shields.io/badge/tests-Vitest-141814?style=flat-square&logo=vitest) ![ngrok](https://img.shields.io/badge/tunnel-ngrok-140a3c?style=flat-square&logo=ngrok) ![Groupe KA](https://img.shields.io/badge/Groupe-KA-b7f000?style=flat-square) ![remote-first](https://img.shields.io/badge/remote--first-spbgit-24292f?style=flat-square&logo=git&logoColor=white)
Vrai-Prix estime la valeur marchande de **n'importe quelle propriété du Québec** — unifamiliale, plex, condo, chalet, terrain — et montre *pourquoi* : chaque comparable, chaque ajustement en dollars, la pondération du modèle, la fourchette (P10–P90) et l'indice de confiance (A–D). Le différenciateur est la **transparence totale** : pas de score magique, pas de boîte noire. La méthodologie complète (normes **IAAO**) est publiée intégralement sur le site. Sous le capot : les **6 millésimes (2021-2026)** des rôles d'évaluation foncière géoréférencés du Québec (**MAMH**, données ouvertes) — **3 747 008 propriétés**, soit **22 150 285 observations** — fusionnés spatialement avec **745 119 transactions réelles** (99,88 % d'appariement, distance médiane 0,6 m), alimentant un **modèle hédonique LightGBM** (MdAPE 11,0 %, ratio médian 0,995 en holdout) et un **moteur de comparables ajustés**. Pour qui ? Propriétaires, acheteurs, courtiers et curieux qui veulent une estimation honnête et vérifiable, gratuite, sur les **1 097 municipalités** de la province. ## Chiffres clés (live sur [/api/stats](https://www.vrai-prix.com/api/stats), vérifiés au 2026-08-24) | Métrique | Valeur | |---|---| | Propriétés (unités d'évaluation) | **3 747 008** | | Observations (6 millésimes 2021-2026) | **22 150 285** | | Transactions réelles appariées | **745 119** (99,88 %, distance médiane 0,6 m) | | Logements couverts | **4 400 551** | | Municipalités | **1 097** | | Valeur totale du parc 2026 | **2 009 452 277 400 $** (≈ 2,01 billions $) | | Valeur médiane 2026 | **444 300 $** | | Croissance 2021 → 2026 | **+43,1 %** | | Modèle | hédonique LightGBM + comparables ajustés — **MdAPE 11,0 %**, ratio médian 0,995 | | Millésime de la base | 2026 (dernier recalcul : 2026-08-08) | ## Visite guidée — le site en 10 pages *Captures live du **2026-08-28** (production, www.vrai-prix.com — desktop). Chaque capture correspond à une page réelle du site ; le manifeste des URLs est dans [`docs/screenshots/`](docs/screenshots/).* ### 1. Accueil — [`/`](https://www.vrai-prix.com/) Accueil de Vrai-Prix — hero encre, recherche d'adresse centrale, graphique marché multi-séries **L'estimateur, dès la première seconde.** Hero « terminal éditorial », recherche d'adresse centrale (FTS5, tolérante aux fautes) parmi les 3 747 008 unités d'évaluation, chiffres clés de la province et graphique marché multi-séries interactif. C'est le point d'entrée de 95 % des visites : on tape une adresse, on obtient un rapport de valeur. ### 2. Répertoire des municipalités — [`/municipalites`](https://www.vrai-prix.com/municipalites) Répertoire des 1 097 municipalités du Québec — recherche, tri et agrégats **Les 1 097 municipalités du Québec, une par une.** Répertoire complet avec recherche et agrégats (valeur médiane, croissance, nombre d'unités) — la porte d'entrée du SEO programmatique (1 097 pages municipalités + ~5 900 pages municipalité × type de propriété). ### 3. Vrai-Prix Maps — [`/carte`](https://www.vrai-prix.com/carte) Vrai-Prix Maps — carte 3D Mapbox GL avec grappes de valeurs estimées **La recherche par carte.** Carte 3D Mapbox GL (framework partagé `@groupe-ka/ka-maps`) : grappes de valeurs estimées pilotées par le viewport, pastilles de prix, clic → fiche d'estimation. Le compteur suit exactement les marqueurs affichés. ### 4. Statistiques provinciales — [`/stats`](https://www.vrai-prix.com/stats) Tableau de bord des statistiques provinciales — valeur du parc, palmarès, flux de ventes **L'observatoire du marché québécois.** Tableau de bord v3 : valeur totale du parc (≈ 2,01 billions $ au millésime 2026), médianes, croissance 2021→2026, palmarès des 200 municipalités, flux de ventes « prix d'abord » — et rapports PDF personnalisés à la demande (catalogue de blocs, ReportBuilder). ### 5. Ka · agent IA — [`/ka`](https://www.vrai-prix.com/ka) Agent conversationnel Ka — estimation et analyse immobilière en langage naturel **Poser ses questions en français.** Agent conversationnel (Claude, streaming SSE, widget ka-agent v4 plein écran) branché sur **12 outils serveur** : il évalue une propriété, sort les comparables détaillés, compare deux adresses, évalue un parc, cite les stats municipales et pointe vers les rapports PDF — sans jamais inventer de lien. ### 6. Parc immobilier — [`/parc`](https://www.vrai-prix.com/parc) Évaluation de parc immobilier — jusqu'à 40 propriétés agrégées **Évaluer un portefeuille entier.** Jusqu'à 40 adresses évaluées d'un coup, valeur consolidée, répartition et rapport PDF de parc — pensé pour les propriétaires de plex et les petits investisseurs. ### 7. Méthodologie — [`/methodologie`](https://www.vrai-prix.com/methodologie) Méthodologie complète publiée — modèle hédonique, comparables, normes IAAO **La transparence comme produit.** Les 7 sections de la méthodologie (normes **IAAO**) publiées intégralement : sources (rôles MAMH 2021-2026 + 745 119 ventes réelles), fusion spatiale, modèle hédonique LightGBM (MdAPE 11,0 %), comparables ajustés, fourchette P10–P90, indice de confiance A–D, limites connues. Aucune boîte noire. ### 8. Conditions d'utilisation — [`/conditions`](https://www.vrai-prix.com/conditions) Conditions d'utilisation de Vrai-Prix **Le cadre d'usage, écrit clairement.** Nature indicative des estimations (elles ne remplacent pas un évaluateur agréé OEAQ), usage loyal du service et des rapports, propriété des contenus. ### 9. Politique de confidentialité — [`/confidentialite`](https://www.vrai-prix.com/confidentialite) Politique de confidentialité — conformité Loi 25 **Conformité Loi 25.** Aucun script publicitaire, analytics première partie seulement, SSO KA ID sans base d'utilisateurs locale — la politique détaille ce qui est collecté (presque rien) et pourquoi. ### 10. Page municipalité — [`/municipalite/montreal`](https://www.vrai-prix.com/municipalite/montreal) Page municipalité de Montréal — agrégats, palmarès et propriétés locales **Le portrait local, ici Montréal.** Agrégats du rôle (valeur médiane, croissance, composition du parc), palmarès locaux et accès aux fiches d'estimation du territoire — le gabarit décliné sur les 1 097 municipalités. --- ### Galerie v2 « terminal éditorial » (2026-08-25) *Captures de la refonte v2 (mobile 390×844 · desktop 1440×900).* #### Mobile
Accueil mobile
Accueil — recherche d'adresse, KA Tabbar
Carte mobile
Vrai-Prix Maps — pastilles d'estimation 3D
Fiche mobile
Rapport de valeur — grands chiffres
Municipalité mobile
Page municipalité
Stats mobile
Statistiques provinciales
Agent Ka mobile
Ka · agent IA (widget v4 plein écran)
#### Desktop
Accueil desktop
Accueil — hero encre, recherche centrale, graphique marché multi-séries
Rapport de valeur
Rapport de valeur — fourchette honnête P10–P90, indice de confiance A–D
Comparables
Fiche — comparables et chaîne de calcul montrée
Vrai-Prix Maps desktop
Vrai-Prix Maps — recherche par carte (Mapbox GL 3D)
Municipalité
Page municipalité — agrégats et palmarès locaux
Stats
Statistiques provinciales — flux de ventes prix-d'abord
Parc immobilier
Parc immobilier — explorateur du rôle d'évaluation
Agent Ka
Ka · agent IA — cartes d'annonces cliquables (ka-card v4)
### Nouveautés front-end (2026-08-25) - **Refonte v2 « terminal éditorial »** — hero encre pleine largeur, recherche centrale CTA rouge, graphique marché multi-séries interactif, rapport de valeur recomposé (grands chiffres, sections à filets), méthodologie en article. - **KA Tabbar v1** — barre de navigation mobile commune Groupe KA (Estimer · Marché · Ventes · Méthode). - **Header réellement collant** au défilement + nav mobile v2 plein écran. - **Widget ka-agent v4** sur `/ka` — cartes d'annonces cliquables (`ka-card`) et choix de clarification en boutons (`ka-choix`), bulle → plein écran. > 🗄️ Les captures d'époque (v1) sont conservées dans [`docs/archive/`](docs/archive/). ### Guide pas à pas (« Utiliser le site en 5 étapes », depuis [/doc](https://www.vrai-prix.com/doc/index.html))
Étape 1 — accueil de Vrai-Prix
Étape 1 — Arriver sur l'accueil
Étape 2 — recherche d'adresse avec suggestions
Étape 2 — Chercher l'adresse
Étape 3 — fiche d'estimation avec fourchette et indice de confiance
Étape 3 — Lire la fiche d'estimation
Étape 4 — recherche par carte 3D
Étape 4 — Explorer par la carte
Étape 5 — tableau de bord statistiques
Étape 5 — Aller plus loin : statistiques, parc, agent Ka
## Fonctionnalités - **Estimation par adresse** — recherche plein-texte (SQLite FTS5) parmi 3 747 008 unités d'évaluation, tolérante aux fautes ; **plan B sans adresse** : estimation manuelle par municipalité + caractéristiques. - **Estimation hybride** — 65 % modèle hédonique LightGBM + 35 % comparables ajustés (marché, superficie, âge), fourchette P10–P90 par régression quantile, indice de confiance A–D obligatoire. - **Portrait de la propriété** — façade SVG dessinée par les données du registre, terrain à l'échelle, composition de la valeur ; historique 2021→2026 (six millésimes, badges YoY). - **Vrai-Prix Maps** — recherche par carte 3D (Mapbox GL via le framework partagé `@groupe-ka/ka-maps`), grappes de valeurs estimées pilotées par le viewport ; plan des comparables « arpenteur » en SVG pur. - **Ka · agent IA** — agent conversationnel (Claude, SDK Anthropic, streaming SSE) branché sur **12 outils serveur** : `evaluer_propriete`, `chercher_propriete`, `chercher_proprietes_secteur`, `comparables_detailles`, `comparer_proprietes`, `estimation_manuelle`, `evaluer_parc`, `dossier_complet`, `indice_marche`, `stats_municipalite`, `stats_provinciales`, `liens_rapports`. - **Rapports PDF 100 % vectoriels** (pdfkit) — standard (3 p.), professionnel bancaire (6 p.), parc consolidé, statistique provincial. - **Parc immobilier** — évaluation multi-adresses agrégée (jusqu'à 40 propriétés). - **Statistiques provinciales** — valeur totale du parc (2,01 billions $ au millésime 2026), palmarès des 200 municipalités, tableau de bord `/stats` + rapports PDF v3 personnalisés (catalogue de blocs, ReportBuilder). - **Contexte marché** — indice de marché, fourchette visuelle, accueil enrichi (upgrade 2026-08-22). - **Méthode du coût — [`/cout`](https://www.vrai-prix.com/cout)** (2026-09-08) — la troisième lecture de la valeur : coût de remplacement à neuf décomposé par **assemblages** (≈ 100 assemblages, ≈ 550 composants, 184 articles), matériaux sourcés chez les détaillants publics (Canac, BMR, Patrick Morin — médiane robuste multi-source, aberrations marquées), heures de métier aux **taux employeur complets APCHQ/CCQ** (2 895 grilles 2023→2026), indices **StatCan 18-10-0289-01**, facteurs régionaux (16 localisations), indirects / frais généraux / profit / contingence, **dépréciation** âge-vie ou par composante, valeur du terrain (rôle, saisie, résiduel), fourchette P10-P90 et confiance A-D décomposée ; atelier propriété (préremplissage du rôle) ou construction, catalogue d'assemblages, mode exercice, PDF « Rapport — Méthode du coût » (9 p.), console admin des connecteurs, 9 outils Ka `cout_*`. Chaque nombre porte sa provenance (● observé · ◐ calculé · ○ indexé · ◇ hypothèse) et chaque estimation est reproductible (instantané des prix). - **Propriétés à vendre — [`/a-vendre`](https://www.vrai-prix.com/a-vendre)** (2026-09-08) — toutes les propriétés réellement à vendre au Québec (copie nocturne de la base **Immo-Ka**, ≈ 71 000 annonces vivantes), chacune jumelée spatialement à son unité du rôle et **déjà mesurée par le moteur** (≈ 66 000) : recherche FTS + filtres, fiche complète (galerie, prix, caractéristiques, historique de prix, mesure vs prix demandé, duel des méthodes, portrait au rôle, voisines), **atelier « mon évaluation »** (bassin de ventes réelles et d'annonces, choix des comparables, grille d'ajustements en $ pré-remplie, réconciliation, confrontation — localStorage), **analyse IA du bâtiment** (Claude Sonnet 5 lit photos + description → composantes avec confiance et provenance → moteur déterministe du coût ; corrections manuelles, JSON technique, similaires techniques) ; [`/stats/marche`](https://www.vrai-prix.com/stats/marche) publie la mesure à l'épreuve du marché (ratio, MdAPE, calibration A-D, méthodes). - **SEO programmatique — 3,76 M d'URLs indexables** : 1 097 pages municipalités + ~5 900 pages municipalité × type + 3,75 M fiches d'estimation SSR avec métadonnées uniques, JSON-LD, sitemaps générés à la volée. - **KA ID** — connexion unique du Groupe KA (SSO signé via le hub groupe-ka.com, sans base d'utilisateurs) + favoris « Mon univers Ka ». - **Bilingue FR/EN**, méthodologie publique (7 sections, IAAO), conformité Loi 25, app compagnon iOS SwiftUI (dépôt séparé). ## Architecture ``` Rôles d'évaluation MAMH 2021-2026 (6 millésimes × ~3,7 M unités) │ fusion spatiale XY (EPSG:32198) — kNN k=25 ≤200 m ▼ 745 119 transactions enrichies ──▶ modèle hédonique LightGBM (log-prix, 18 variables + quantiles P10/P90) ▼ Application Next.js 16 (App Router) — SQLite better-sqlite3 (units + FTS5 + transactions + indice de marché) · moteur de comparables (src/lib/engine.ts) · Ka Maps (Mapbox GL) · agent Ka (Claude + 12 outils) · rapports pdfkit · SSO KA ID · SEO programmatique ``` - **Frontend / API** : Next.js **16.3** (App Router), React **19**, TypeScript strict, Tailwind CSS **4** — tout est servi par une seule app (pages SSR + routes `/api/*`). - **Base de données** : SQLite (`data/vraiprix.db`, ~1,5 Go, non versionnée) via **better-sqlite3** — 3,75 M unités, FTS5, index spatiaux, mode WAL. - **Modèle** : pipeline externe LightGBM / scikit-learn (réentraînement : `scripts/hedonic-retrain.py`), estimations pré-calculées injectées dans la base (dernière ré-estimation sur le nœud : 2026-08-22, terrain/autre + recalibrage P10/P90). - **Agent Ka** : SDK Anthropic (`@anthropic-ai/sdk`), streaming SSE, 12 outils serveur, garde anti-hallucination sur les liens PDF. - **PDF** : pdfkit (rapports 100 % vectoriels, aucune capture d'écran). - **Tests** : Vitest (moteur d'estimation, `npm run test`) + Playwright (captures : `scripts/screenshots.mjs`). ## API — endpoints principaux (21 routes + 29 routes coût / annonces) | Endpoint | Méthode | Rôle | |---|---|---| | `/api/cost/overview` · `/items` · `/items/[code]` · `/assemblies` · `/assemblies/[code]` · `/labour` · `/locations` · `/materials/history` · `/benchmarks` · `/sources` | GET | base de coûts (lecture seule, cache 10 min) | | `/api/cost/property?id=` | GET | préremplissage d'une propriété du rôle + autres lectures de la valeur | | `/api/cost/estimate` · `/estimate/[id]` | POST · GET | calcul déterministe (sauvegardé avec instantané des prix) · relecture | | `/api/cost/report?estimate=` | GET · POST | PDF « Rapport — Méthode du coût » | | `/api/admin/cost/*` | GET · POST | connecteurs, synchro, anomalies, correspondances, imports, usage IA — jeton `COST_ADMIN_TOKEN` | | `/api/avendre` · `/api/avendre/comps` | GET | recherche d'annonces (FTS, facettes, tris) · bassin de comparables d'une annonce | | `/api/listings/[uid]/ai-cost-analysis` (+ `/reanalyze`, `/override`) · `/cost-estimate` · `/technical-similar` · `/ai-analysis-json` | POST · GET · PATCH | analyse IA du bâtiment (à la demande, quotas 3 / 10 min / IP, 30 / jour, budget), recalcul aux coûts du jour, similaires techniques, export JSON | | `/api/search` | GET | recherche plein-texte d'adresses (FTS5, tolérante aux fautes) | | `/api/estimate` | GET | estimation hybride d'une unité (modèle + comparables, P10–P90, confiance A–D) | | `/api/nearby` | GET | unités voisines / grappes pour la carte | | `/api/ka` | POST | agent Ka (Claude, streaming SSE, 12 outils serveur) | | `/api/portfolio` | POST | évaluation de parc immobilier multi-adresses (≤ 40) | | `/api/report` | GET | rapport PDF standard (3 p.) | | `/api/report/pro` | GET | rapport PDF professionnel bancaire (6 p.) | | `/api/report/portfolio` | GET | rapport PDF de parc consolidé | | `/api/report/stats` | GET | rapport PDF statistique provincial | | `/api/stats` | GET | agrégats provinciaux publics (source des pastilles dynamiques ci-dessus) | | `/api/stats/catalog` · `/api/stats/dashboard` | GET | catalogue de blocs + tableau de bord (kit stats v3 Groupe KA) | | `/api/stats/report` · `/api/stats/report/custom` | GET/POST | rapports PDF v3 (modèles + personnalisés) | | `/api/auth/ka/login` · `/api/auth/ka/callback` | GET | SSO KA ID (hub groupe-ka.com) | | `/api/auth/me` · `/api/auth/logout` | GET/POST | session KA ID | | `/api/favorites` · `/api/favorites/toggle` | GET/POST | favoris « Mon univers Ka » | | `/api/lead` | POST | prise de contact / lead | ## Données & conformité | Source | Contenu | Volume | Mise à jour | |---|---|---|---| | **MAMH — rôles d'évaluation foncière géoréférencés** (données ouvertes, Données Québec) | 6 millésimes 2021-2026, caractéristiques complètes des unités | 3 747 008 propriétés · 22 150 285 observations | à chaque millésime annuel (réingestion `scripts/`) | | **Transactions réelles** (fusion spatiale XY, EPSG:32198) | prix de vente appariés aux unités (99,88 %, distance médiane 0,6 m) | 745 119 transactions | lors du réentraînement du modèle | | **Connecteur « nouvelles ventes »** (JdM / api.qub.ca) | ingestion incrémentale de transactions récentes | à la demande | `scripts/ingest-jdm.mjs` (process PM2 `vrai-prix-ingest`) | | **Modèle hédonique LightGBM** | log-prix, 18 variables, quantiles P10/P90 — MdAPE 11,0 %, ratio médian 0,995 | estimations pré-calculées sur ~3,75 M unités | réentraînement `scripts/hedonic-retrain.py` (hors ligne) | - Contrairement aux apps à connecteurs du Groupe KA, Vrai-Prix ne dépend d'aucune synchronisation horaire : la base est **pré-calculée** et versionnée par millésime — l'app sert les estimations en lecture seule. - **Méthodologie publique** (7 sections, normes IAAO) publiée intégralement sur le site ; chaque estimation affiche ses comparables, ses ajustements et son indice de confiance. - **Disclaimer** : estimations statistiques à titre indicatif — elles ne remplacent pas une évaluation par un évaluateur agréé (**OEAQ**). - **Vie privée** : conformité Loi 25 ; SSO KA ID sans base d'utilisateurs locale ; analytics première partie (admin-ka `/collect`), aucun script publicitaire (Monetag retiré le 2026-08-23). ## Structure du repo | Répertoire | Rôle | |---|---| | `src/app/` | pages App Router (accueil, `estimation/[id]`, `municipalite/[slug]/[type]`, `carte`, `ka`, `parc`, `stats`, `favoris`, sitemaps/robots) + routes `/api/*` | | `src/components/` | SearchBox, ResultView, MetricViz, RadarMap, KaCarte, KaChat, StatsView… | | `src/lib/` | moteur de comparables (`engine.ts`), accès DB, agrégats municipalités, agent Ka (`ka/`), SSO KA ID, générateurs PDF (`report*.ts`), SEO, i18n ; **`cost/`** (méthode du coût : `types` · `taxonomy` · `units` · `geometry` · `pricing` · `engine` · `catalog` · `estimate` · `db` · `seed/` · `connectors/` · `ai/`) ; **`immoka.ts`** (annonces, FTS, `vp_eval`), `comps.ts` (bassin de comparables), `listing-types.ts`, `marche-stats.ts`, `report-cost.ts` | | `src/components/cout/`, `src/components/avendre/` | atelier de la méthode du coût (Landing, Workbench, panneaux, graphiques SVG, admin) ; fiche d'annonce, atelier d'évaluation, analyse IA | | `data/` | bases SQLite non versionnées : `vraiprix.db` (rôle + ventes), `immoka.db` (copie Immo-Ka rafraîchie chaque nuit, table `vp_eval`), `cost.db` (base de coûts, s'auto-crée depuis les seeds), `marche-stats.json` (agrégats nocturnes) | | `prompts/` | prompt système de l'analyse IA du bâtiment (`property-cost-analysis-v1.md`, versionné par `PROMPT_VERSION`) | | `scripts/` | réentraînement hédonique, build des stats, ingestion (dont `ingest-jdm.mjs`), captures Playwright ; **`immoka-sync.sh`** (snapshot Immo-Ka → ré-évaluation en shards → `vp_eval` → bascule), `eval-immoka.ts` + `run-eval-shards.sh`, `build-marche-stats.mjs`, `cost-sync.ts` (connecteurs de la base de coûts) | | `docs/` | pipeline de données (`PIPELINE-DONNEES.md`), **méthode du coût** (`cost-method-implementation-plan.md`, `cost-connectors.md`), notes Ka Maps, captures d'écran (`screenshots/` : visite guidée 10 pages + manifeste, galeries WebP mobile/desktop ; `archive/` : captures v1) | | `public/` | assets statiques (favicons, OG, polices) + guide `/doc` (page, images, PDF) | | `ios/` | ressources de l'app compagnon iOS (SwiftUI) | | `assets/` | matériel graphique du projet | ## Démarrage rapide ```bash ssh M3U96a && cd ~/apps/vrai-prix npm install # dépendances (au besoin) npm run test # Vitest — moteur d'estimation (src/lib/engine.test.ts) npm run lint # ESLint 9 + config Next npm run dev # serveur de développement (next dev) npm run build # build de production npm start # next start (en prod : PM2, voir Déploiement) ``` ## Développement (remote-first) ⚠️ **La source de vérité est le repo git sur le nœud M3U96a** (`~/apps/vrai-prix`) — on n'édite **jamais** les copies laptop. Toute modification se fait sur le nœud via SSH : édition, build, redémarrage, puis commit + push **depuis le nœud**. - Remote **`origin` = spbgit** (git perso, https://git.spboucher.ai) — sur M3U96a, l'origin est le chemin local **`/Users/simon-pierreboucher/srv/git/vrai-prix.git`** (bare repo) ; - remote secondaire `github` → github.com/spboucher-ai/vrai-prix. ```bash cd ~/apps/vrai-prix npm run build # après changement de code pm2 restart vrai-prix git add && git commit -m "…" && git push origin main ``` ## Variables d'environnement Noms seulement — **aucun secret n'est versionné** (`.env.local` sur le nœud). | Variable | Rôle | |---|---| | `VRAIPRIX_DB` | chemin de la base SQLite (`data/vraiprix.db`) | | `NEXT_PUBLIC_SITE_URL` | URL canonique du site (SEO, sitemaps) | | `NEXT_PUBLIC_MAPBOX_TOKEN` | carte 3D Vrai-Prix Maps (jeton public) | | `ANTHROPIC_API_KEY` | agent Ka (Claude) | | `KA_SSO_SECRET` · `KA_AUTH_SECRET` | signature SSO / session KA ID | | `KA_HUB_URL` · `KA_BASE_URL` | hub groupe-ka.com + URL de rappel du site | | `IMMOKA_DB` · `COST_DB` | chemins des bases `immoka.db` (copie Immo-Ka, **doit exister**) et `cost.db` (s'auto-crée) | | `COST_ADMIN_TOKEN` | jeton Bearer des routes `/api/admin/cost/*` (503 si absent) | | `FIRECRAWL_API_KEY` | connecteurs de la base de coûts (`npm run cost:sync`, jamais dans le chemin utilisateur) | | `PROPERTY_ANALYSIS_MODEL` · `PROPERTY_ANALYSIS_MAX_IMAGES` · `PROPERTY_ANALYSIS_STRICT` | analyse IA du bâtiment (défaut `claude-sonnet-5`, 40 images) | | `AI_ANALYSIS_DAILY_MAX` · `AI_DAILY_BUDGET_USD` · `AI_MONTHLY_BUDGET_USD` · `LISTING_IMAGE_RETENTION_DAYS` | quotas et budget de l'analyse IA, rétention du cache d'images (30 j) | ## Déploiement | | | |---|---| | **Nœud** | **M3U96a** (Mac Studio M3 Ultra, cluster MacLustr) — `~/apps/vrai-prix` | | **Port** | **8090** | | **Domaine** | [www.vrai-prix.com](https://www.vrai-prix.com) via tunnel ngrok | | Processus PM2 | Commande réelle | Rôle | |---|---|---| | `vrai-prix` | `next start -H 0.0.0.0 -p 8090` | l'app Next.js — pages SSR + API | | `vrai-prix-ngrok` | `ngrok http --url=www.vrai-prix.com 8090` | tunnel vers www.vrai-prix.com | | `vrai-prix-ingest` | `node scripts/ingest-jdm.mjs` | connecteur incrémental « nouvelles ventes » — lancé à la demande, arrêté au repos | | `vrai-prix-immoka-sync` | `npm run immoka:sync` (cron `30 3 * * *`) | snapshot `.backup` d'Immo-Ka sur M4M64b (SSH LAN, clé gardien), rsync delta, ré-évaluation de toutes les annonces vivantes (shards = cœurs − 4), table `vp_eval` + `data/marche-stats.json`, index/FTS, bascule atomique, `pm2 restart vrai-prix` | | `vrai-prix-cost-sync` | `npm run cost:sync` (cron `15 5 * * *`) | connecteurs de la base de coûts (APCHQ, CCQ, StatCan, Canac, BMR, Patrick Morin) → `data/cost.db` | ```bash # sur M3U96a, après un changement : cd ~/apps/vrai-prix && npm run build && pm2 restart vrai-prix pm2 logs vrai-prix --lines 30 # rafraîchir les annonces à la main (≈ 2 min) / relancer un connecteur de coûts : scripts/immoka-sync.sh # journal : tmp/immoka-sync.log npm run cost:sync -- statcan --force ``` Le manifeste `mld` (`M1M32:~/dispatch/apps/vrai-prix.json`) exclut `data/`, `tmp/`, `.env.local` de la synchronisation et épingle l'app sur M3U96a (les bases de 2 Go ne voyagent pas). ## Documentation - **Guide utilisateur en ligne** : [www.vrai-prix.com/doc/index.html](https://www.vrai-prix.com/doc/index.html) — à quoi sert le site, utilisation en 5 étapes, provenance des données, FAQ. - **Guide PDF téléchargeable** : [vrai-prix-documentation.pdf](https://www.vrai-prix.com/doc/vrai-prix-documentation.pdf). - **Méthodologie complète** (normes IAAO, 7 sections) : publiée sur le site. - **Docs internes** : `docs/` (pipeline de données `PIPELINE-DONNEES.md`, notes Ka Maps, captures). ## Historique | Date | Jalon | |---|---| | 2026-08-08 | naissance du projet ; 08-09 : moteur d'évaluation transparent v1 + agent Ka (Claude, streaming, 11 puis 12 outils) | | 2026-08-13 | Vrai-Prix Maps (framework Ka Maps), SSO KA ID, SEO programmatique (sitemaps 3,7 M de fiches) | | 2026-08-17 | harmonisation Groupe KA (ka-ui, footer commun) + API publique `/api/stats` + assets OG | | 2026-08-19 | stats v2 (`/stats` ultra complet + 5 rapports PDF), KA Agent v2 plein écran, socle mobile | | 2026-08-22 | ré-estimation hédonique sur le nœud (terrain/autre + recalibrage P10/P90), connecteur « nouvelles ventes » JdM, upgrade apparence (contexte marché, fourchette visuelle) | | 2026-08-23/24 | stats v3 (rapports PDF personnalisés), favoris « Mon univers Ka », page `/doc` + PDF, README v3 | | 2026-08-25 | refonte front-end v2 « terminal éditorial », KA Tabbar v1, widget ka-agent v4, galerie WebP mobile+desktop | | 2026-08-28 | README v4 — visite guidée « le site en 10 pages » (captures live de production, `docs/screenshots/`) | | 2026-09-08 | **Méthode du coût** (`/cout`, base de coûts + connecteurs + PDF + 9 outils Ka) et **propriétés à vendre** (`/a-vendre`, copie Immo-Ka ré-évaluée chaque nuit, atelier d'évaluation, analyse IA du bâtiment), `/stats/marche` ; portés du fork UQO Éval et rebrandés | ## Écosystème Groupe KA | Site | Univers | |---|---| | [groupe-ka.com](https://www.groupe-ka.com) | portail | | [lou-ka.com](https://www.lou-ka.com) | logements à louer | | [immo-ka.com](https://www.immo-ka.com) | propriétés à vendre | | [vrai-prix.com](https://www.vrai-prix.com) | estimation immobilière | | [auto-ka.com](https://www.auto-ka.com) | véhicules | | [fabri-ka.com](https://www.fabri-ka.com) | produits québécois | | [food-ka.com](https://www.food-ka.com) | épicerie / alimentation | | [resto-ka.com](https://www.resto-ka.com) | restaurants | | [sorti-ka.com](https://www.sorti-ka.com) | sorties et événements | | [job-ka.com](https://www.job-ka.com) | emplois | | [crea-ka.com](https://www.crea-ka.com) | créateurs | | [trouve-ka.com](https://www.trouve-ka.com) | petites annonces | | [api-ka.com](https://www.api-ka.com) | API de données | ## Contact **Simon-Pierre Boucher** — fondateur, Groupe KA 📧 [contact@spboucher.ai](mailto:contact@spboucher.ai) --- © Groupe KA — Simon-Pierre Boucher · [contact@spboucher.ai](mailto:contact@spboucher.ai) *Ce dépôt vit sur **spbgit** (git perso — https://git.spboucher.ai). Estimations statistiques à titre indicatif — elles ne remplacent pas une évaluation par un évaluateur agréé (OEAQ).*