SPB Git

Repository Public

layout.tsx 6.9 KB 185 lines tsx

1// Auteur : Simon-Pierre Boucher — contact@spboucher.ai2import type { Metadata, Viewport } from "next";3import { Inter, JetBrains_Mono, Space_Grotesk } from "next/font/google";4import "./globals.css";5import { LangProvider, LangToggle } from "@/components/LangContext";6import AccountButton from "@/components/AccountButton";7import CookieConsent from "@/components/CookieConsent";8import FooterNav from "@/components/FooterNav";9import HeaderNav from "@/components/HeaderNav";10import GroupeKaBadge from "@/ka/GroupeKaBadge";11import KaFooter from "@/ka/KaFooter";12import Link from "next/link";13import { SITE_URL } from "@/lib/seo";1415const inter = Inter({ subsets: ["latin"], variable: "--font-inter" });16const spaceGrotesk = Space_Grotesk({17  subsets: ["latin"],18  variable: "--font-space-grotesk",19});20const jetbrains = JetBrains_Mono({21  subsets: ["latin"],22  variable: "--font-jetbrains",23});2425export const metadata: Metadata = {26  metadataBase: new URL(SITE_URL),27  title: {28    default: "Vrai-Prix — Un service Groupe KA",29    template: "%s | Vrai-Prix",30  },31  description:32    "Estimation immobilière transparente pour le Québec : modèle hédonique + comparables réels, fourchette honnête et indice de confiance. 3,7 millions de propriétés, 1 100 municipalités.",33  applicationName: "Vrai-Prix",34  icons: { icon: "/favicon.svg", apple: "/apple-touch-icon.png" },35  openGraph: {36    type: "website",37    siteName: "Vrai-Prix",38    locale: "fr_CA",39    url: SITE_URL,40    title: "Vrai-Prix — Un service Groupe KA",41    description:42      "Estimation immobilière transparente pour le Québec : modèle hédonique + comparables réels, fourchette honnête et indice de confiance.",43    images: [44      { url: "https://www.vrai-prix.com/og.png", width: 1200, height: 630 },45    ],46  },47  twitter: {48    card: "summary_large_image",49    images: [50      { url: "https://www.vrai-prix.com/og.png", width: 1200, height: 630 },51    ],52    title: "Vrai-Prix — Un service Groupe KA",53    description:54      "Estimation immobilière transparente pour le Québec : 3,7 millions de propriétés estimées, calcul montré en entier.",55  },56  formatDetection: { telephone: false },57};5859/** Viewport mobile : viewport-fit=cover pour les encoches iOS (safe-area). */60export const viewport: Viewport = {61  width: "device-width",62  initialScale: 1,63  viewportFit: "cover",64};6566/** JSON-LD global : l'organisation et le site (entités schema.org). */67const ORG_JSONLD = {68  "@context": "https://schema.org",69  "@graph": [70    {71      "@type": "Organization",72      "@id": `${SITE_URL}/#org`,73      name: "Vrai-Prix",74      url: SITE_URL,75      email: "contact@spboucher.ai",76      founder: { "@type": "Person", name: "Simon-Pierre Boucher" },77      areaServed: { "@type": "AdministrativeArea", name: "Québec, Canada" },78    },79    {80      "@type": "WebSite",81      "@id": `${SITE_URL}/#site`,82      name: "Vrai-Prix",83      url: SITE_URL,84      inLanguage: "fr-CA",85      publisher: { "@id": `${SITE_URL}/#org` },86      description:87        "Estimation immobilière transparente pour le Québec : modèle hédonique + comparables réels, fourchette honnête et indice de confiance.",88    },89  ],90};9192const TICKER = [93  "3 747 008 unités d'évaluation",94  "745 119 ventes réelles 2021-2026",95  "22 M d'estimations calculées",96  "Fourchette honnête P10-P90",97  "Indice de confiance A-D",98  "Zéro boîte noire — le calcul est montré",99  "1 100 municipalités couvertes",100  "Erreur médiane 11 %",101];102103export default function RootLayout({ children }: LayoutProps<"/">) {104  return (105    <html lang="fr-CA">106      <body107        className={`${inter.variable} ${spaceGrotesk.variable} ${jetbrains.variable}`}108      >109        <script110          type="application/ld+json"111          dangerouslySetInnerHTML={{ __html: JSON.stringify(ORG_JSONLD) }}112        />113        <LangProvider>114          {/* header opaque (standard header/menu KA 2026-08-22) */}115          <header className="sticky top-0 z-[var(--z-header,500)] border-b-2 border-ink bg-paper">116            <div className="relative mx-auto flex h-16 max-w-6xl items-center gap-5 px-4 sm:px-6">117              <Link118                href="/"119                className="vp-display group relative flex items-center text-[22px] font-bold leading-none tracking-[-0.04em] after:absolute after:-inset-2 after:content-[''] sm:text-[26px]"120              >121                Vrai122                <span className="ml-1 rotate-[-2deg] rounded-md bg-ink px-[7px] pb-1 pt-[2px] text-lime transition-transform duration-200 group-hover:rotate-0">123                  Prix124                </span>125              </Link>126              {/* badge Groupe KA — desktop seulement (l'espace manque sous xl ;127                  le menu mobile porte sa propre entrée) */}128              <span className="hidden xl:inline-flex">129                <GroupeKaBadge />130              </span>131              <div className="ml-auto flex items-center gap-2">132                <HeaderNav />133                <AccountButton />134                <LangToggle />135              </div>136            </div>137          </header>138          <div className="ticker" aria-hidden="true">139            <div className="ticker-track">140              {[...TICKER, ...TICKER].map((s, i) => (141                <span key={i}>{s}</span>142              ))}143            </div>144          </div>145          <main className="mx-auto max-w-6xl px-4 pb-16 sm:px-6">{children}</main>146          {/* rangée locale (papier) : marque + liens de navigation du site,147              puis le bloc encre final = KaFooter (commun Groupe KA) */}148          <div className="mx-auto max-w-6xl px-4 sm:px-6">149            <div className="border-t-2 border-ink pt-7 text-[13px] text-ink-2">150              <p className="vp-display mb-3 text-[26px] font-bold tracking-[-0.04em] text-ink">151                Vrai152                <span className="ml-1 inline-block rotate-[-2deg] rounded-md bg-ink px-[6px] pb-[3px] pt-[1px] text-lime">153                  Prix154                </span>155              </p>156              <p className="max-w-2xl">157                Estimations bâties sur les rôles d&apos;évaluation foncière du158                Québec (MAMH, données ouvertes) et 745 119 transactions réelles.159                Modèle hédonique + comparables ajustés, calcul montré en entier.160                Estimation statistique à titre indicatif.161              </p>162              <FooterNav />163            </div>164          </div>165          <KaFooter166            siteId="vrai-prix"167            localLegal={[168              { label: "Conditions", href: "/conditions" },169              { label: "Confidentialité", href: "/confidentialite" },170              { label: "Méthodologie", href: "/methodologie" },171            ]}172          />173          <CookieConsent />174          <script175            dangerouslySetInnerHTML={{176              __html: 'window.KA_AGENT={site:"vrai-prix"}',177            }}178          />179          <script src="/ka-agent.js" defer />180        </LangProvider>181      </body>182    </html>183  );184}185
Files ab13dfd9ea98dd0b410510f2fe4ca593375d044c
Menu

Theme