import type { Metadata, Viewport } from "next"; import { Geist, Geist_Mono } from "next/font/google"; import "./globals.css"; import { Providers } from "@/components/shell/providers"; import { apiServer } from "@/lib/api-server"; import type { PublicUser, UserSettings, WalletView } from "@spinza/shared"; const geist = Geist({ subsets: ["latin"], variable: "--font-geist-sans", display: "swap" }); const geistMono = Geist_Mono({ subsets: ["latin"], variable: "--font-geist-mono", display: "swap" }); const siteUrl = process.env.NEXT_PUBLIC_SITE_URL ?? "https://www.spinza.dev"; export const metadata: Metadata = { metadataBase: new URL(siteUrl), title: { default: "Spinza โ The Virtual Casino Playground", template: "%s ยท Spinza" }, description: "Play original Spinza games using free fictional credits. No deposits. No withdrawals. No cash value.", applicationName: "Spinza", openGraph: { title: "Spinza โ The Virtual Casino Playground", description: "Play original Spinza games using free fictional credits. No deposits. No withdrawals. No cash value.", url: siteUrl, siteName: "Spinza", type: "website", images: ["/og.png"] }, twitter: { card: "summary_large_image", title: "Spinza โ The Virtual Casino Playground", description: "Original games. Fictional credits. No cash value." }, icons: { icon: "/icon.svg", apple: "/apple-icon.png" }, manifest: "/manifest.webmanifest", robots: { index: true, follow: true }, }; export const viewport: Viewport = { themeColor: "#07080c", width: "device-width", initialScale: 1, viewportFit: "cover", maximumScale: 1, }; export default async function RootLayout({ children }: { children: React.ReactNode }) { const session = await apiServer<{ user: PublicUser; wallet: WalletView; settings: UserSettings }>("/api/user"); return (