SPB Git

Repository Public

page.tsx 2.7 KB 64 lines tsx

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&apos;unités d&apos;é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&apos;é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
Files main
Menu

Theme