trptk/app/layout.tsx
2026-02-24 17:14:07 +01:00

102 lines
2.8 KiB
TypeScript

import type { Metadata, Viewport } from "next";
import localFont from "next/font/local";
import "./globals.css";
import { ThemeProvider } from "next-themes";
import { AuthProvider } from "@/components/auth/AuthContext";
import { CartProvider } from "@/components/cart/CartContext";
import { CartDrawer } from "@/components/cart/CartDrawer";
import { PlayerProvider } from "@/components/player/PlayerContext";
import { Player } from "@/components/player/Player";
const argesta = localFont({
src: "../public/fonts/Argesta.woff2",
variable: "--font-argesta-face",
display: "swap",
});
const silka = localFont({
src: "../public/fonts/Silka-Regular.woff2",
variable: "--font-silka-face",
display: "swap",
});
const silkaSB = localFont({
src: "../public/fonts/Silka-SemiBold.woff2",
variable: "--font-silkasb-face",
display: "swap",
});
const isProduction =
process.env.NEXT_PUBLIC_APP_URL?.includes("trptk.com") &&
!process.env.NEXT_PUBLIC_APP_URL?.includes("staging");
export const metadata: Metadata = {
metadataBase: new URL("https://trptk.com"),
title: {
default: "TRPTK",
template: "%s • TRPTK",
},
description: "Recording the extraordinary.",
// Prevent search engines from indexing non-production deployments
...(!isProduction && {
robots: { index: false, follow: false },
}),
};
export const viewport: Viewport = {
maximumScale: 1,
themeColor: [
{ media: "(prefers-color-scheme: light)", color: "#e8e9ea" },
{ media: "(prefers-color-scheme: dark)", color: "#282e39" },
],
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html
lang="en"
suppressHydrationWarning
className={`${argesta.variable} ${silka.variable} ${silkaSB.variable}`}
>
<head>
<script
type="application/ld+json"
dangerouslySetInnerHTML={{
__html: JSON.stringify({
"@context": "https://schema.org",
"@type": "Organization",
name: "TRPTK",
url: "https://trptk.com",
description: "Recording the extraordinary.",
}).replace(/</g, "\\u003c"),
}}
/>
</head>
<body
className={`min-h-screen overflow-x-hidden bg-lightbg font-silka text-lighttext antialiased dark:bg-darkbg dark:text-darktext`}
>
<ThemeProvider
attribute="class"
defaultTheme="dark"
enableSystem={true}
disableTransitionOnChange={false}
storageKey="theme"
>
<AuthProvider>
<CartProvider>
<PlayerProvider>
{children}
<Player />
</PlayerProvider>
<CartDrawer />
</CartProvider>
</AuthProvider>
</ThemeProvider>
</body>
</html>
);
}