busi488energy/src/app/layout.tsx
Joey Eamigh ad1a6792f5
phase 8: UI/UX overhaul — layout, charts, map, data freshness
- Fix ticker tape CLS with skeleton loader and fixed height
- Add Inter font, max-width container, responsive dvh units
- Hero metrics: trend deltas, per-metric sparkline colors, 3+2 grid
- GPU calculator: step=100 slider + text input, PUE factor, region comparison bars
- Grid stress: replace misleading arc gauges with demand status bars
- Demand summary: expand to 4-metric highlights grid
- Charts: responsive heights, ISO/non-ISO toggle, correlation R² + trend line
- Map: US-wide default view, marker clustering, enriched region panels, zoom controls
- Fix NYISO polygon (NYC), MISO polygon (Michigan), MISO south (MS/LA)
- Add automated ingestion via instrumentation.ts
- Add data freshness indicator in footer
- Fix backfill start date to 2019-01-01 (EIA RTO data availability)
2026-02-11 19:59:01 -05:00

37 lines
1.2 KiB
TypeScript

import type { Metadata } from 'next';
import { ThemeProvider } from 'next-themes';
import { Inter } from 'next/font/google';
import { Toaster } from 'sonner';
import { Footer } from '@/components/layout/footer.js';
import { Nav } from '@/components/layout/nav.js';
import './globals.css';
const inter = Inter({
subsets: ['latin'],
display: 'swap',
variable: '--font-inter',
});
export const metadata: Metadata = {
title: 'Energy & AI Dashboard',
description:
'Interactive dashboard visualizing how AI datacenter buildout is driving regional electricity demand and energy prices',
};
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
<html lang="en" className={inter.variable} suppressHydrationWarning>
<body className="flex min-h-dvh flex-col font-sans antialiased">
<ThemeProvider attribute="class" defaultTheme="dark" enableSystem={false} disableTransitionOnChange>
<Nav />
<main className="mx-auto w-full max-w-[1920px] flex-1">{children}</main>
<Footer />
<Toaster theme="dark" richColors position="bottom-right" />
</ThemeProvider>
</body>
</html>
);
}