import type { ReactNode } from "react"; import { unstable_noStore as noStore } from "next/cache"; import { getLocale } from "next-intl/server"; import { redirect } from "next/navigation"; import { SiteAmbientBackdrop } from "@/components/layout/site-ambient-backdrop"; import { SiteFooter } from "@/components/layout/site-footer"; import { SiteHeader } from "@/components/layout/site-header"; import { ScrollSmootherProvider } from "@/components/scroll-smoother-provider"; import { isSuperAdmin } from "@/lib/admin-auth"; import { getMaintenanceMode, getSiteSettings, getSiteSettingsMediaBindings } from "@/lib/app-config"; import { getLocalizedPath, resolveLocale } from "@/lib/locale"; type SiteLayoutProps = { children: ReactNode; params: Promise<{ locale: string; }>; }; export const dynamic = "force-dynamic"; export const revalidate = 0; export default async function SiteLayout({ children, params }: SiteLayoutProps) { noStore(); await params; const [maintenanceEnabled, mediaBindings, siteSettings] = await Promise.all([ getMaintenanceMode(), getSiteSettingsMediaBindings(), getSiteSettings(), ]); const localeKey = resolveLocale(await getLocale().catch(() => siteSettings.defaultLocale), siteSettings.defaultLocale); // Server-side decision only. The header receives just this boolean and uses // it purely to show/hide the Admin shortcut link — it grants no access by // itself. Every admin page/action re-checks the session independently, so // this value is not a security boundary, only a UI convenience. const authenticated = await isSuperAdmin(); if (maintenanceEnabled && !authenticated) { redirect(getLocalizedPath(localeKey, "/coming-soon", siteSettings.defaultLocale)); } return ( <>
{children}
); }