diff --git a/src/app/apply/staff/page.tsx b/src/app/(site)/apply/staff/page.tsx similarity index 100% rename from src/app/apply/staff/page.tsx rename to src/app/(site)/apply/staff/page.tsx diff --git a/src/app/apply/team/page.tsx b/src/app/(site)/apply/team/page.tsx similarity index 100% rename from src/app/apply/team/page.tsx rename to src/app/(site)/apply/team/page.tsx diff --git a/src/app/badges/page.tsx b/src/app/(site)/badges/page.tsx similarity index 100% rename from src/app/badges/page.tsx rename to src/app/(site)/badges/page.tsx diff --git a/src/app/banned/page.tsx b/src/app/(site)/banned/page.tsx similarity index 100% rename from src/app/banned/page.tsx rename to src/app/(site)/banned/page.tsx diff --git a/src/app/community/page.tsx b/src/app/(site)/community/page.tsx similarity index 100% rename from src/app/community/page.tsx rename to src/app/(site)/community/page.tsx diff --git a/src/app/developers/page.tsx b/src/app/(site)/developers/page.tsx similarity index 100% rename from src/app/developers/page.tsx rename to src/app/(site)/developers/page.tsx diff --git a/src/app/draw-badge/page.tsx b/src/app/(site)/draw-badge/page.tsx similarity index 100% rename from src/app/draw-badge/page.tsx rename to src/app/(site)/draw-badge/page.tsx diff --git a/src/app/forgot/page.tsx b/src/app/(site)/forgot/page.tsx similarity index 100% rename from src/app/forgot/page.tsx rename to src/app/(site)/forgot/page.tsx diff --git a/src/app/friends/page.tsx b/src/app/(site)/friends/page.tsx similarity index 100% rename from src/app/friends/page.tsx rename to src/app/(site)/friends/page.tsx diff --git a/src/app/guilds/[id]/forum/new/page.tsx b/src/app/(site)/guilds/[id]/forum/new/page.tsx similarity index 100% rename from src/app/guilds/[id]/forum/new/page.tsx rename to src/app/(site)/guilds/[id]/forum/new/page.tsx diff --git a/src/app/guilds/[id]/forum/page.tsx b/src/app/(site)/guilds/[id]/forum/page.tsx similarity index 100% rename from src/app/guilds/[id]/forum/page.tsx rename to src/app/(site)/guilds/[id]/forum/page.tsx diff --git a/src/app/guilds/[id]/page.tsx b/src/app/(site)/guilds/[id]/page.tsx similarity index 100% rename from src/app/guilds/[id]/page.tsx rename to src/app/(site)/guilds/[id]/page.tsx diff --git a/src/app/guilds/page.tsx b/src/app/(site)/guilds/page.tsx similarity index 100% rename from src/app/guilds/page.tsx rename to src/app/(site)/guilds/page.tsx diff --git a/src/app/help/[category]/page.tsx b/src/app/(site)/help/[category]/page.tsx similarity index 100% rename from src/app/help/[category]/page.tsx rename to src/app/(site)/help/[category]/page.tsx diff --git a/src/app/help/page.tsx b/src/app/(site)/help/page.tsx similarity index 100% rename from src/app/help/page.tsx rename to src/app/(site)/help/page.tsx diff --git a/src/app/help/tickets/page.tsx b/src/app/(site)/help/tickets/page.tsx similarity index 100% rename from src/app/help/tickets/page.tsx rename to src/app/(site)/help/tickets/page.tsx diff --git a/src/app/(site)/layout.tsx b/src/app/(site)/layout.tsx new file mode 100644 index 00000000..6eee060e --- /dev/null +++ b/src/app/(site)/layout.tsx @@ -0,0 +1,27 @@ +import type { ReactNode } from "react"; +import { Navigation } from "@/components/navigation"; +import RadioPlayerGate from "@/components/public/radio-player-gate"; +import { SiteFooter } from "@/components/site-footer"; +import { SiteHeader } from "@/components/site-header"; +import { TopHeader } from "@/components/top-header"; + +/** + * Public site chrome. Route group `(site)` keeps this off `/admin` and `/client`, + * so housekeeping is never constrained by the public max-w-7xl grid. + */ +export default function SiteLayout({ children }: { children: ReactNode }) { + return ( + <> + + + +
+
+
{children}
+
+
+ + + + ); +} diff --git a/src/app/leaderboard/page.tsx b/src/app/(site)/leaderboard/page.tsx similarity index 100% rename from src/app/leaderboard/page.tsx rename to src/app/(site)/leaderboard/page.tsx diff --git a/src/app/login/page.tsx b/src/app/(site)/login/page.tsx similarity index 100% rename from src/app/login/page.tsx rename to src/app/(site)/login/page.tsx diff --git a/src/app/logo/page.tsx b/src/app/(site)/logo/page.tsx similarity index 100% rename from src/app/logo/page.tsx rename to src/app/(site)/logo/page.tsx diff --git a/src/app/maintenance/page.tsx b/src/app/(site)/maintenance/page.tsx similarity index 100% rename from src/app/maintenance/page.tsx rename to src/app/(site)/maintenance/page.tsx diff --git a/src/app/marketplace/page.tsx b/src/app/(site)/marketplace/page.tsx similarity index 100% rename from src/app/marketplace/page.tsx rename to src/app/(site)/marketplace/page.tsx diff --git a/src/app/me/CopyReferralButton.tsx b/src/app/(site)/me/CopyReferralButton.tsx similarity index 100% rename from src/app/me/CopyReferralButton.tsx rename to src/app/(site)/me/CopyReferralButton.tsx diff --git a/src/app/me/page.tsx b/src/app/(site)/me/page.tsx similarity index 100% rename from src/app/me/page.tsx rename to src/app/(site)/me/page.tsx diff --git a/src/app/messages/page.tsx b/src/app/(site)/messages/page.tsx similarity index 100% rename from src/app/messages/page.tsx rename to src/app/(site)/messages/page.tsx diff --git a/src/app/news/[slug]/page.tsx b/src/app/(site)/news/[slug]/page.tsx similarity index 100% rename from src/app/news/[slug]/page.tsx rename to src/app/(site)/news/[slug]/page.tsx diff --git a/src/app/news/loading.tsx b/src/app/(site)/news/loading.tsx similarity index 100% rename from src/app/news/loading.tsx rename to src/app/(site)/news/loading.tsx diff --git a/src/app/news/page.tsx b/src/app/(site)/news/page.tsx similarity index 100% rename from src/app/news/page.tsx rename to src/app/(site)/news/page.tsx diff --git a/src/app/page.tsx b/src/app/(site)/page.tsx similarity index 100% rename from src/app/page.tsx rename to src/app/(site)/page.tsx diff --git a/src/app/photos/page.tsx b/src/app/(site)/photos/page.tsx similarity index 100% rename from src/app/photos/page.tsx rename to src/app/(site)/photos/page.tsx diff --git a/src/app/radio/apply/page.tsx b/src/app/(site)/radio/apply/page.tsx similarity index 100% rename from src/app/radio/apply/page.tsx rename to src/app/(site)/radio/apply/page.tsx diff --git a/src/app/radio/contests/[id]/page.tsx b/src/app/(site)/radio/contests/[id]/page.tsx similarity index 100% rename from src/app/radio/contests/[id]/page.tsx rename to src/app/(site)/radio/contests/[id]/page.tsx diff --git a/src/app/radio/contests/page.tsx b/src/app/(site)/radio/contests/page.tsx similarity index 100% rename from src/app/radio/contests/page.tsx rename to src/app/(site)/radio/contests/page.tsx diff --git a/src/app/radio/giveaways/[id]/page.tsx b/src/app/(site)/radio/giveaways/[id]/page.tsx similarity index 100% rename from src/app/radio/giveaways/[id]/page.tsx rename to src/app/(site)/radio/giveaways/[id]/page.tsx diff --git a/src/app/radio/giveaways/page.tsx b/src/app/(site)/radio/giveaways/page.tsx similarity index 100% rename from src/app/radio/giveaways/page.tsx rename to src/app/(site)/radio/giveaways/page.tsx diff --git a/src/app/radio/layout.tsx b/src/app/(site)/radio/layout.tsx similarity index 100% rename from src/app/radio/layout.tsx rename to src/app/(site)/radio/layout.tsx diff --git a/src/app/radio/leaderboard/page.tsx b/src/app/(site)/radio/leaderboard/page.tsx similarity index 100% rename from src/app/radio/leaderboard/page.tsx rename to src/app/(site)/radio/leaderboard/page.tsx diff --git a/src/app/radio/page.tsx b/src/app/(site)/radio/page.tsx similarity index 100% rename from src/app/radio/page.tsx rename to src/app/(site)/radio/page.tsx diff --git a/src/app/radio/requests/page.tsx b/src/app/(site)/radio/requests/page.tsx similarity index 100% rename from src/app/radio/requests/page.tsx rename to src/app/(site)/radio/requests/page.tsx diff --git a/src/app/radio/schedule/page.tsx b/src/app/(site)/radio/schedule/page.tsx similarity index 100% rename from src/app/radio/schedule/page.tsx rename to src/app/(site)/radio/schedule/page.tsx diff --git a/src/app/radio/shouts/page.tsx b/src/app/(site)/radio/shouts/page.tsx similarity index 100% rename from src/app/radio/shouts/page.tsx rename to src/app/(site)/radio/shouts/page.tsx diff --git a/src/app/rankings/page.tsx b/src/app/(site)/rankings/page.tsx similarity index 100% rename from src/app/rankings/page.tsx rename to src/app/(site)/rankings/page.tsx diff --git a/src/app/rares/[category]/page.tsx b/src/app/(site)/rares/[category]/page.tsx similarity index 100% rename from src/app/rares/[category]/page.tsx rename to src/app/(site)/rares/[category]/page.tsx diff --git a/src/app/rares/page.tsx b/src/app/(site)/rares/page.tsx similarity index 100% rename from src/app/rares/page.tsx rename to src/app/(site)/rares/page.tsx diff --git a/src/app/redeem/RedeemForm.tsx b/src/app/(site)/redeem/RedeemForm.tsx similarity index 100% rename from src/app/redeem/RedeemForm.tsx rename to src/app/(site)/redeem/RedeemForm.tsx diff --git a/src/app/redeem/page.tsx b/src/app/(site)/redeem/page.tsx similarity index 100% rename from src/app/redeem/page.tsx rename to src/app/(site)/redeem/page.tsx diff --git a/src/app/register/page.tsx b/src/app/(site)/register/page.tsx similarity index 100% rename from src/app/register/page.tsx rename to src/app/(site)/register/page.tsx diff --git a/src/app/reset/page.tsx b/src/app/(site)/reset/page.tsx similarity index 100% rename from src/app/reset/page.tsx rename to src/app/(site)/reset/page.tsx diff --git a/src/app/room/[id]/page.tsx b/src/app/(site)/room/[id]/page.tsx similarity index 100% rename from src/app/room/[id]/page.tsx rename to src/app/(site)/room/[id]/page.tsx diff --git a/src/app/settings/2fa/page.tsx b/src/app/(site)/settings/2fa/page.tsx similarity index 100% rename from src/app/settings/2fa/page.tsx rename to src/app/(site)/settings/2fa/page.tsx diff --git a/src/app/settings/connections/page.tsx b/src/app/(site)/settings/connections/page.tsx similarity index 100% rename from src/app/settings/connections/page.tsx rename to src/app/(site)/settings/connections/page.tsx diff --git a/src/app/settings/page.tsx b/src/app/(site)/settings/page.tsx similarity index 100% rename from src/app/settings/page.tsx rename to src/app/(site)/settings/page.tsx diff --git a/src/app/settings/sessions/page.tsx b/src/app/(site)/settings/sessions/page.tsx similarity index 100% rename from src/app/settings/sessions/page.tsx rename to src/app/(site)/settings/sessions/page.tsx diff --git a/src/app/shop/page.tsx b/src/app/(site)/shop/page.tsx similarity index 100% rename from src/app/shop/page.tsx rename to src/app/(site)/shop/page.tsx diff --git a/src/app/shop/topup/TopUpForm.tsx b/src/app/(site)/shop/topup/TopUpForm.tsx similarity index 100% rename from src/app/shop/topup/TopUpForm.tsx rename to src/app/(site)/shop/topup/TopUpForm.tsx diff --git a/src/app/shop/topup/page.tsx b/src/app/(site)/shop/topup/page.tsx similarity index 100% rename from src/app/shop/topup/page.tsx rename to src/app/(site)/shop/topup/page.tsx diff --git a/src/app/staff/page.tsx b/src/app/(site)/staff/page.tsx similarity index 100% rename from src/app/staff/page.tsx rename to src/app/(site)/staff/page.tsx diff --git a/src/app/u/[username]/page.tsx b/src/app/(site)/u/[username]/page.tsx similarity index 100% rename from src/app/u/[username]/page.tsx rename to src/app/(site)/u/[username]/page.tsx diff --git a/src/app/verify/page.tsx b/src/app/(site)/verify/page.tsx similarity index 100% rename from src/app/verify/page.tsx rename to src/app/(site)/verify/page.tsx diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 3f10734f..ab9b19a2 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,17 +1,11 @@ import type { Metadata } from "next"; import { Nunito, Pixelify_Sans } from "next/font/google"; -import { headers } from "next/headers"; import Script from "next/script"; import { NextIntlClientProvider } from "next-intl"; import { getLocale, getMessages } from "next-intl/server"; import type { ReactNode } from "react"; -import { Navigation } from "@/components/navigation"; -import RadioPlayerGate from "@/components/public/radio-player-gate"; import { PwaRegister } from "@/components/pwa-register"; -import { SiteFooter } from "@/components/site-footer"; -import { SiteHeader } from "@/components/site-header"; import { ThemeVars } from "@/components/theme-vars"; -import { TopHeader } from "@/components/top-header"; import { enforceSiteAccess } from "@/lib/access-guard"; import { siteSettings } from "@/lib/services/site-settings"; import "./globals.css"; @@ -63,16 +57,9 @@ export default async function RootLayout({ await enforceSiteAccess(); const locale = await getLocale(); const messages = await getMessages(); - // "Dusk" / dark-by-default: the site starts dark unless the visitor has picked - // light. The saved choice always wins over the default. const defaultDark = await siteSettings.getBool("default_dark", false); - - const headersList = await headers(); - const pathname = - headersList.get("x-pathname") || headersList.get("next-url") || ""; - const isClient = pathname === "/client" || pathname.startsWith("/client/"); - const isAdmin = pathname === "/admin" || pathname.startsWith("/admin/"); const nitroUrl = await siteSettings.get("nitro_client_url", ""); + return ( - {isClient || isAdmin ? ( - children - ) : ( - <> - - - -
-
-
{children}
-
-
- - - - )} + {children}