Repository Public
1// Auteur : Simon-Pierre Boucher — contact@spboucher.ai2// Index des 1 097 municipalités : point d'entrée du maillage programmatique.3import type { Metadata } from "next";4import Link from "next/link";5import { allMunicipalities } from "@/lib/municipalites";6import { numFr, slugify } from "@/lib/seo";78export const metadata: Metadata = {9 title: "Toutes les municipalités du Québec — valeur des propriétés",10 description:11 "Valeur médiane, statistiques d'évaluation et propriétés estimées pour les 1 097 municipalités du Québec : Montréal, Québec, Laval, Gatineau, Longueuil et toutes les autres.",12 alternates: { canonical: "/municipalites" },13};1415export default function MunicipalitesPage() {16 const all = allMunicipalities();17 const byLetter = new Map<string, typeof all>();18 for (const m of [...all].sort((a, b) => a.nom.localeCompare(b.nom, "fr"))) {19 const l = slugify(m.nom)[0]!.toUpperCase();20 if (!byLetter.has(l)) byLetter.set(l, []);21 byLetter.get(l)!.push(m);22 }23 return (24 <div className="pb-6 pt-10 sm:pt-14">25 <section>26 <span className="kicker">Explorer le Québec</span>27 <h1 className="vp-display mt-3 max-w-4xl text-[clamp(28px,5vw,52px)] font-bold uppercase leading-[1.02] tracking-[-0.03em]">28 La valeur des propriétés dans les{" "}29 <span className="hl">{numFr(all.length)} municipalités</span> du30 Québec31 </h1>32 <p className="mt-4 max-w-2xl text-[15.5px] text-ink-2">33 Chaque municipalité a sa page : nombre d'unités d'évaluation,34 valeur médiane estimée 2026, croissance depuis 2021, répartition par35 type de propriété et fiches détaillées, bâties sur les rôles36 d'évaluation foncière du MAMH et 745 119 ventes réelles.37 </p>38 </section>39 {[...byLetter.entries()].map(([letter, ms]) => (40 <section key={letter} className="mt-10">41 <h2 className="vp-display border-b-2 border-ink pb-1 text-[22px] font-bold">42 {letter}43 </h2>44 <ul className="mt-3 grid grid-cols-2 gap-x-6 gap-y-1.5 sm:grid-cols-3 lg:grid-cols-4">45 {ms.map((m) => (46 <li key={m.slug}>47 <Link48 href={`/municipalite/${m.slug}`}49 className="group flex items-baseline justify-between gap-2 py-0.5 text-[13.5px]"50 >51 <span className="group-hover:underline">{m.nom}</span>52 <span className="vp-mono text-[10.5px] text-ink-2">53 {numFr(m.n)}54 </span>55 </Link>56 </li>57 ))}58 </ul>59 </section>60 ))}61 </div>62 );63}64