| import type { Metadata } from "next"; |
| import { Geist, Geist_Mono } from "next/font/google"; |
| import "./globals.css"; |
| import { Toaster } from "@/components/ui/toaster"; |
|
|
| const geistSans = Geist({ |
| variable: "--font-geist-sans", |
| subsets: ["latin"], |
| }); |
|
|
| const geistMono = Geist_Mono({ |
| variable: "--font-geist-mono", |
| subsets: ["latin"], |
| }); |
|
|
| export const metadata: Metadata = { |
| title: "SlideMap API – Real-time Teaching Backend", |
| description: "REST + SSE API backend for SlideMap. Supports slide broadcast, polls, doubts, and real-time events. CORS enabled for any frontend.", |
| keywords: ["SlideMap", "education API", "SSE", "real-time slides", "poll API"], |
| authors: [{ name: "SlideMap" }], |
| openGraph: { |
| title: "SlideMap API", |
| description: "Real-time teaching backend with REST + SSE. CORS enabled.", |
| type: "website", |
| }, |
| }; |
|
|
| export default function RootLayout({ |
| children, |
| }: Readonly<{ |
| children: React.ReactNode; |
| }>) { |
| return ( |
| <html lang="en" suppressHydrationWarning> |
| <body |
| className={`${geistSans.variable} ${geistMono.variable} antialiased bg-background text-foreground`} |
| > |
| {children} |
| <Toaster /> |
| </body> |
| </html> |
| ); |
| } |
|
|