SPB Git

spb/valoplex Public

ValoPlex — moteur d'évaluation spécialisé pour les plex au Québec, petit frère de Vrai-Prix.

TypeScript 90.3% Python 7.1% CSS 2.5%
4.8 KB · 118 lines typescript
Raw Blame History
1// Auteur : Simon-Pierre Boucher — contact@spboucher.ai2export type Lang = "fr" | "en";34const dict = {5  fr: {6    tagline: "La vraie valeur de votre plex, porte par porte",7    sub: "ValoPlex est le moteur d'évaluation spécialisé plex du Québec : 393 865 immeubles de 2 logements et plus, 94 000 ventes réelles de plex (2021-2026), un modèle hédonique avancé dédié. Pas de boîte noire : on vous montre le calcul.",8    searchPlaceholder: "Entrez l'adresse du plex (ex. 4562 rue Chabot, Montréal)",9    estimateBtn: "Évaluer",10    manualTitle: "Pas d'adresse ? Décrivez le plex",11    municipality: "Municipalité",12    propertyType: "Type de propriété",13    portes: "Nombre de logements (portes)",14    floorArea: "Superficie habitable (m²)",15    yearBuilt: "Année de construction",16    landArea: "Superficie du terrain (m²)",17    estimatedValue: "Valeur estimée",18    valeurParPorte: "Valeur par porte",19    range: "Fourchette calibrée (80 %)",20    confidence: "Indice de confiance",21    whyTitle: "Pourquoi ce prix ? Le calcul, sans boîte noire",22    modelPart: "Modèle hédonique plex en ratio (LightGBM, 91 000 ventes)",23    compsPart: "Plex comparables ajustés (médiane pondérée)",24    weightModel: "poids du modèle",25    weightComps: "poids des comparables",26    compsTitle: "Ventes de plex comparables",27    adjTime: "Ajust. marché",28    adjArea: "Ajust. superficie",29    adjAge: "Ajust. âge",30    adjPortes: "Ajust. portes",31    adjusted: "Prix ajusté",32    sold: "Vendu",33    distance: "Distance",34    weight: "Poids",35    history: "Valeur estimée par année",36    assessed: "Évaluation municipale (rôle 2026)",37    leadTitle: "Recevoir le rapport détaillé (PDF)",38    leadBtn: "M'envoyer le rapport",39    leadOk: "Merci ! Votre rapport sera envoyé sous peu.",40    emailPlaceholder: "votre@courriel.com",41    disclaimer: "Estimation statistique à titre indicatif — ne remplace pas une évaluation professionnelle.",42    unifamilial: "Unifamiliale",43    plex: "Plex",44    condo_ou_multi: "Condo / multirésidentiel",45    chalet: "Chalet",46    maison_mobile: "Maison mobile",47    terrain: "Terrain",48    autre: "Autre",49    notFound: "Plex introuvable",50    dataNote: "Données : rôles d'évaluation foncière du Québec (MAMH) et ventes de plex publiées.",51    confA: "Très fiable",52    confB: "Fiable",53    confC: "Indicative",54    confD: "Peu fiable — marché mince",55    searchNoResult: "Aucun plex trouvé — essayez « numéro rue municipalité »",56    loading: "Calcul en cours…",57  },58  en: {59    tagline: "Your plex's true value, door by door",60    sub: "ValoPlex is Québec's plex-specialized valuation engine: 393,865 buildings of 2+ dwellings, 94,000 real plex sales (2021-2026), a dedicated advanced hedonic model. No black box: we show the math.",61    searchPlaceholder: "Enter the plex address (e.g. 4562 rue Chabot, Montréal)",62    estimateBtn: "Value it",63    manualTitle: "No address? Describe the plex",64    municipality: "Municipality",65    propertyType: "Property type",66    portes: "Number of dwellings (doors)",67    floorArea: "Living area (m²)",68    yearBuilt: "Year built",69    landArea: "Lot area (m²)",70    estimatedValue: "Estimated value",71    valeurParPorte: "Value per door",72    range: "Calibrated range (80%)",73    confidence: "Confidence index",74    whyTitle: "Why this price? The math, no black box",75    modelPart: "Ratio-based plex hedonic model (LightGBM, 91k sales)",76    compsPart: "Adjusted comparable plexes (weighted median)",77    weightModel: "model weight",78    weightComps: "comparables weight",79    compsTitle: "Comparable plex sales",80    adjTime: "Market adj.",81    adjArea: "Area adj.",82    adjAge: "Age adj.",83    adjPortes: "Doors adj.",84    adjusted: "Adjusted price",85    sold: "Sold",86    distance: "Distance",87    weight: "Weight",88    history: "Estimated value by year",89    assessed: "Municipal assessment (2026 roll)",90    leadTitle: "Get the detailed report (PDF)",91    leadBtn: "Send me the report",92    leadOk: "Thanks! Your report is on its way.",93    emailPlaceholder: "you@email.com",94    disclaimer: "Statistical estimate for information only — not a substitute for a professional appraisal.",95    unifamilial: "Single-family",96    plex: "Plex",97    condo_ou_multi: "Condo / multi-residential",98    chalet: "Cottage",99    maison_mobile: "Mobile home",100    terrain: "Land",101    autre: "Other",102    notFound: "Plex not found",103    dataNote: "Data: Québec property assessment rolls (MAMH) and published plex sales.",104    confA: "Very reliable",105    confB: "Reliable",106    confC: "Indicative",107    confD: "Low reliability — thin market",108    searchNoResult: "No plex found — try “number street municipality”",109    loading: "Computing…",110  },111} as const;112113export type TKey = keyof (typeof dict)["fr"];114115export function t(lang: Lang, key: TKey): string {116  return dict[lang][key] ?? dict.fr[key];117}118