Files
OpenFrame/app/layout.tsx
T

53 lines
1.5 KiB
TypeScript

import type { Metadata } from "next";
import { Geist_Mono, JetBrains_Mono } from "next/font/google";
import { ThemeProvider } from "@/components/theme-provider";
import { Toaster } from "sonner";
import "./globals.css";
const jetbrainsMono = JetBrains_Mono({
subsets: ['latin'],
variable: '--font-sans',
display: 'swap',
preload: true,
});
const geistMono = Geist_Mono({
subsets: ['latin'],
variable: '--font-geist-mono',
display: 'swap',
preload: true,
});
export const metadata: Metadata = {
title: "OpenFrame - Video Feedback Platform",
description: "Collect timestamped video feedback with text and voice comments",
};
export default function RootLayout({
children,
}: Readonly<{
children: React.ReactNode;
}>) {
return (
<html lang="en" className={`${jetbrainsMono.variable} ${geistMono.variable}`} suppressHydrationWarning>
<body className="antialiased min-h-screen bg-background font-sans">
<ThemeProvider
attribute="class"
defaultTheme="dark"
enableSystem
disableTransitionOnChange
>
<svg aria-hidden="true" className="fixed h-0 w-0">
<filter id="openframe-noise">
<feTurbulence type="fractalNoise" baseFrequency="0.92" numOctaves="2" stitchTiles="stitch" />
</filter>
</svg>
{children}
<div aria-hidden="true" className="noise-overlay" />
<Toaster />
</ThemeProvider>
</body>
</html>
);
}