SPB Git forge
38commits 1branches 0releases
338.7 MBsize
maindefault branch
4 h agolast push
HTML 53.9% TypeScript 44.5% JavaScript 0.6% SQL 0.5%
3.6 KB · 85 lines tsx
Raw Blame History
1import type { Metadata, Viewport } from "next";2import { Inter, JetBrains_Mono } from "next/font/google";3import type { ReactNode } from "react";4import { CommandPalette } from "@/components/command-palette";5import { Header } from "@/components/header";6import { MobileNav } from "@/components/mobile-nav";7import { Providers } from "@/components/theme";8import { SITE_URL } from "@/lib/routes";9import "./globals.css";1011const inter = Inter({ subsets: ["latin"], variable: "--font-inter", display: "swap" });12const mono = JetBrains_Mono({ subsets: ["latin"], variable: "--font-jetbrains", display: "swap", weight: ["400", "500"] });1314const TITLE = "DataCenterIndex — The global index of data center infrastructure";15const DESCRIPTION = "Facilities, operators, cloud regions, markets, countries, projects, power and connectivity — every figure sourced, versioned and tracked in a live change feed.";1617export const metadata: Metadata = {18  metadataBase: new URL(SITE_URL),19  title: { default: TITLE, template: "%s · DataCenterIndex" },20  description: DESCRIPTION,21  applicationName: "DataCenterIndex",22  authors: [{ name: "Simon-Pierre Boucher", url: "mailto:contact@spboucher.ai" }],23  creator: "Simon-Pierre Boucher",24  keywords: ["data centers", "data center map", "hyperscale", "colocation", "cloud regions", "MW capacity", "construction pipeline", "digital infrastructure index"],25  alternates: { canonical: "/" },26  openGraph: { type: "website", siteName: "DataCenterIndex", url: SITE_URL, title: TITLE, description: DESCRIPTION, locale: "en_US" },27  twitter: { card: "summary_large_image", title: TITLE, description: DESCRIPTION },28  robots: { index: true, follow: true },29  category: "technology",30};3132export const viewport: Viewport = {33  themeColor: [34    { media: "(prefers-color-scheme: dark)", color: "#0b0f14" },35    { media: "(prefers-color-scheme: light)", color: "#f5f4f1" },36  ],37  width: "device-width",38  initialScale: 1,39  viewportFit: "cover",40};4142const jsonLd = {43  "@context": "https://schema.org",44  "@graph": [45    {46      "@type": "Organization",47      "@id": `${SITE_URL}/#org`,48      name: "DataCenterIndex",49      url: SITE_URL,50      logo: `${SITE_URL}/brand/logo-mark.svg`,51      email: "contact@spboucher.ai",52      founder: { "@type": "Person", name: "Simon-Pierre Boucher", email: "contact@spboucher.ai" },53      contactPoint: [{ "@type": "ContactPoint", email: "contact@spboucher.ai", contactType: "customer support", availableLanguage: ["en", "fr"] }],54    },55    {56      "@type": "WebSite",57      "@id": `${SITE_URL}/#website`,58      url: SITE_URL,59      name: "DataCenterIndex",60      description: DESCRIPTION,61      publisher: { "@id": `${SITE_URL}/#org` },62      potentialAction: { "@type": "SearchAction", target: { "@type": "EntryPoint", urlTemplate: `${SITE_URL}/search?q={search_term_string}` }, "query-input": "required name=search_term_string" },63    },64  ],65};6667export default function RootLayout({ children }: { children: ReactNode }) {68  return (69    <html lang="en" className={`${inter.variable} ${mono.variable}`} suppressHydrationWarning>70      <body className="min-h-dvh">71        <Providers>72          <a href="#main" className="sr-only focus:not-sr-only focus:fixed focus:left-2 focus:top-2 focus:z-[110] focus:rounded-sm focus:border focus:border-hair-2 focus:bg-surface focus:px-3 focus:py-2">73            Skip to content74          </a>75          <Header />76          {children}77          <MobileNav />78          <CommandPalette />79        </Providers>80        <script type="application/ld+json" dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }} />81      </body>82    </html>83  );84}85