import type { Metadata } from "next"; import { GeistSans } from "geist/font"; import { cookies } from "next/headers"; import Link from "next/link"; import "./globals.css"; import type { SpaceConfig } from "@/lib/spaces"; import { themeToCSS } from "@/lib/spaces"; const API_URL = process.env.NEXT_PUBLIC_API_URL || "http://localhost:8000/api"; async function getSpaceConfig(spaceId: string): Promise { try { const res = await fetch(`${API_URL}/spaces/${spaceId}`, { next: { revalidate: 300 }, }); if (res.ok) return res.json(); } catch {} return null; } export async function generateMetadata(): Promise { const cookieStore = await cookies(); const spaceId = cookieStore.get("space_id")?.value || "default"; const space = await getSpaceConfig(spaceId); const name = space?.name || "rSwag"; const tagline = space?.tagline || "Merch for the rSpace Ecosystem"; return { title: `${name} — ${tagline}`, description: space?.description || "Design and order custom merchandise.", }; } const ECOSYSTEM_LINKS = [ { name: "rSpace", href: "https://rspace.online" }, { name: "rSwag", href: "https://rswag.online", active: true }, { name: "rWork", href: "https://rwork.online" }, { name: "rMaps", href: "https://rmaps.online" }, { name: "rNotes", href: "https://rnotes.online" }, { name: "rVote", href: "https://rvote.online" }, { name: "rFunds", href: "https://rfunds.online" }, { name: "rTrips", href: "https://rtrips.online" }, { name: "rCart", href: "https://rcart.online" }, { name: "rWallet", href: "https://rwallet.online" }, { name: "rFiles", href: "https://rfiles.online" }, { name: "rTube", href: "https://rtube.online" }, { name: "rCal", href: "https://rcal.online" }, { name: "rNetwork", href: "https://rnetwork.online" }, { name: "rInbox", href: "https://rinbox.online" }, { name: "rStack", href: "https://rstack.online" }, { name: "rAuctions", href: "https://rauctions.online" }, { name: "rPubs", href: "https://rpubs.online" }, ]; export default async function RootLayout({ children, }: { children: React.ReactNode; }) { const cookieStore = await cookies(); const spaceId = cookieStore.get("space_id")?.value || "default"; const space = await getSpaceConfig(spaceId); const name = space?.name || "rSwag"; const logoUrl = space?.logo_url; const themeCSS = space?.theme ? themeToCSS(space.theme) : ""; return ( {themeCSS && (