diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index 0969661..2b05c0d 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -6,6 +6,7 @@ import Footer from "@/components/Footer";
import MobileFooterSpacer from "@/components/MobileFooterSpacer";
import { BaseRomProvider } from "@/contexts/BaseRomContext";
import { AuthProvider } from "@/contexts/AuthContext";
+import NoticeBanner from "@/components/NoticeBanner";
const geistSans = Geist({
variable: "--font-geist-sans",
@@ -41,6 +42,7 @@ export default function RootLayout({
+
{children}
diff --git a/src/components/NoticeBanner.tsx b/src/components/NoticeBanner.tsx
new file mode 100644
index 0000000..d49740e
--- /dev/null
+++ b/src/components/NoticeBanner.tsx
@@ -0,0 +1,36 @@
+import { get } from "@vercel/edge-config";
+
+const NOTICE_KEY = process.env.NEXT_PUBLIC_NOTICE_KEY ?? "global_notice_message";
+
+export default async function NoticeBanner() {
+ let message: string | null = null;
+
+ try {
+ const value = await get(NOTICE_KEY);
+ if (typeof value === "string" && value.trim().length > 0) {
+ message = value.trim();
+ }
+ } catch (error) {
+ // Fail silently if Edge Config is unavailable or misconfigured
+ return null;
+ }
+
+ if (!message) {
+ return null;
+ }
+
+ return (
+
+
+
+ !
+
+
+ {message}
+
+
+
+ );
+}
+
+