diff --git a/web/app/globals.css b/web/app/globals.css
new file mode 100644
index 0000000..f1d8c73
--- /dev/null
+++ b/web/app/globals.css
@@ -0,0 +1 @@
+@import "tailwindcss";
diff --git a/web/app/layout.tsx b/web/app/layout.tsx
new file mode 100644
index 0000000..1a4acb1
--- /dev/null
+++ b/web/app/layout.tsx
@@ -0,0 +1,17 @@
+import "./globals.css";
+
+export const metadata = {
+ title: "CM Bot V2",
+};
+
+export default function RootLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+
+
{children}
+
+ );
+}
diff --git a/web/app/page.tsx b/web/app/page.tsx
new file mode 100644
index 0000000..381d3c4
--- /dev/null
+++ b/web/app/page.tsx
@@ -0,0 +1,77 @@
+export default function Home() {
+ const hazardStripe = {
+ backgroundImage:
+ "repeating-linear-gradient(45deg, #facc15 0 24px, #18181b 24px 48px)",
+ };
+
+ return (
+
+ {/* Top hazard stripe */}
+
+
+
+ {/* Status pill */}
+
+
+ Status: Scaffold
+
+
+ {/* Headline */}
+
+ CM Bot V2
+
+
+ {/* Subhead */}
+
+
+ //
+
+
+ cm-web-next scaffold
+
+
+
+ {/* Notice */}
+
+
+ Notice
+
+
+ This is a placeholder. The real dashboard lands in{" "}
+ B2.
+
+
+
+ {/* Smoke test */}
+
+
+ {/* Footer marker */}
+
+ B1
+
+ not for production
+
+
+
+ {/* Bottom hazard stripe */}
+
+
+ );
+}