| 1 | import type { Metadata, Viewport } from "next"; |
| 2 | import { Bricolage_Grotesque, Instrument_Serif, Space_Mono } from "next/font/google"; |
| 3 | import "./globals.css"; |
| 4 | import { TRPCProvider } from "@/lib/trpc/provider"; |
| 5 | import { SmoothScroll } from "@/components/smooth-scroll"; |
| 6 | |
| 7 | const bricolage = Bricolage_Grotesque({ |
| 8 | subsets: ["latin"], |
| 9 | variable: "--font-bricolage", |
| 10 | display: "swap", |
| 11 | }); |
| 12 | |
| 13 | const instrument = Instrument_Serif({ |
| 14 | subsets: ["latin"], |
| 15 | weight: "400", |
| 16 | style: ["normal", "italic"], |
| 17 | variable: "--font-instrument", |
| 18 | display: "swap", |
| 19 | }); |
| 20 | |
| 21 | const spaceMono = Space_Mono({ |
| 22 | subsets: ["latin"], |
| 23 | weight: ["400", "700"], |
| 24 | variable: "--font-space-mono", |
| 25 | display: "swap", |
| 26 | }); |
| 27 | |
| 28 | const SITE_URL = process.env.NEXT_PUBLIC_SITE_URL || "https://stepping.zionboggan.com"; |
| 29 | const DESCRIPTION = |
| 30 | "Chicago Stepping. Your City. The sets, the people, and the road between cities, in one place."; |
| 31 | |
| 32 | export const metadata: Metadata = { |
| 33 | metadataBase: new URL(SITE_URL), |
| 34 | title: "Chicago Stepping. Your City.", |
| 35 | description: DESCRIPTION, |
| 36 | applicationName: "Chicago Stepping", |
| 37 | robots: { index: false, follow: false }, |
| 38 | manifest: "/manifest.webmanifest", |
| 39 | icons: { |
| 40 | icon: "/icon.svg", |
| 41 | shortcut: "/icon.svg", |
| 42 | apple: "/icon.svg", |
| 43 | }, |
| 44 | openGraph: { |
| 45 | title: "Chicago Stepping. Your City.", |
| 46 | description: DESCRIPTION, |
| 47 | siteName: "Chicago Stepping", |
| 48 | url: SITE_URL, |
| 49 | images: [{ url: `${SITE_URL}/og-image.png`, width: 1200, height: 630 }], |
| 50 | type: "website", |
| 51 | }, |
| 52 | twitter: { |
| 53 | card: "summary_large_image", |
| 54 | title: "Chicago Stepping. Your City.", |
| 55 | description: DESCRIPTION, |
| 56 | images: [`${SITE_URL}/og-image.png`], |
| 57 | }, |
| 58 | }; |
| 59 | |
| 60 | export const viewport: Viewport = { |
| 61 | themeColor: "#0a0a0b", |
| 62 | }; |
| 63 | |
| 64 | export default function RootLayout({ |
| 65 | children, |
| 66 | }: Readonly<{ |
| 67 | children: React.ReactNode; |
| 68 | }>) { |
| 69 | return ( |
| 70 | <html |
| 71 | lang="en" |
| 72 | className={`${bricolage.variable} ${instrument.variable} ${spaceMono.variable} h-full`} |
| 73 | > |
| 74 | <body className="min-h-full bg-stage text-bone"> |
| 75 | <SmoothScroll> |
| 76 | <TRPCProvider>{children}</TRPCProvider> |
| 77 | </SmoothScroll> |
| 78 | </body> |
| 79 | </html> |
| 80 | ); |
| 81 | } |