layout.tsx 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import type { Metadata } from "next";
  2. import localFont from "next/font/local";
  3. import "./globals.css";
  4. import { Header } from "@/components/header";
  5. import { Footer } from "@/components/footer";
  6. import { ThemeProvider } from "@/components/theme-provider";
  7. const geistSans = localFont({
  8. src: "./fonts/GeistVF.woff",
  9. variable: "--font-geist-sans",
  10. });
  11. const geistMono = localFont({
  12. src: "./fonts/GeistMonoVF.woff",
  13. variable: "--font-geist-mono",
  14. });
  15. export const metadata: Metadata = {
  16. title: "json-render | AI-powered UI from JSON with guardrails",
  17. description:
  18. "Define a catalog. AI generates JSON. Your components render natively. Enterprise-grade guardrails for controlled AI UI generation.",
  19. };
  20. export default function RootLayout({
  21. children,
  22. }: Readonly<{
  23. children: React.ReactNode;
  24. }>) {
  25. return (
  26. <html lang="en" suppressHydrationWarning>
  27. <body className={`${geistSans.variable} ${geistMono.variable}`}>
  28. <ThemeProvider>
  29. <div className="min-h-screen flex flex-col">
  30. <Header />
  31. <main className="flex-1">{children}</main>
  32. <Footer />
  33. </div>
  34. </ThemeProvider>
  35. </body>
  36. </html>
  37. );
  38. }