- Migrate from vanilla JavaScript SPA to Next.js 16 with App Router - Add server-side rendering for all pages (Home, Compare, Rankings) - Create individual school pages with dynamic routing (/school/[urn]) - Implement Chart.js and Leaflet map integrations - Add comprehensive SEO with sitemap, robots.txt, and JSON-LD - Set up Docker multi-service architecture (PostgreSQL, FastAPI, Next.js) - Update CI/CD pipeline to build both backend and frontend images - Fix Dockerfile to include devDependencies for TypeScript compilation - Add Jest testing configuration - Implement performance optimizations (code splitting, caching) Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
52 lines
1.5 KiB
TypeScript
52 lines
1.5 KiB
TypeScript
import type { Metadata } from 'next';
|
|
import { Navigation } from '@/components/Navigation';
|
|
import { Footer } from '@/components/Footer';
|
|
import { ComparisonProvider } from '@/context/ComparisonProvider';
|
|
import './globals.css';
|
|
|
|
export const metadata: Metadata = {
|
|
title: {
|
|
default: 'SchoolCompare | Compare Primary School Performance',
|
|
template: '%s | SchoolCompare',
|
|
},
|
|
description: 'Compare primary school KS2 performance across England',
|
|
keywords: 'school comparison, KS2 results, primary school performance, England schools, SATs results',
|
|
authors: [{ name: 'SchoolCompare' }],
|
|
manifest: '/manifest.json',
|
|
openGraph: {
|
|
type: 'website',
|
|
title: 'SchoolCompare | Compare Primary School Performance',
|
|
description: 'Compare primary school KS2 performance across England',
|
|
url: 'https://schoolcompare.co.uk',
|
|
siteName: 'SchoolCompare',
|
|
},
|
|
twitter: {
|
|
card: 'summary',
|
|
title: 'SchoolCompare | Compare Primary School Performance',
|
|
description: 'Compare primary school KS2 performance across England',
|
|
},
|
|
};
|
|
|
|
export default function RootLayout({
|
|
children,
|
|
}: Readonly<{
|
|
children: React.ReactNode;
|
|
}>) {
|
|
return (
|
|
<html lang="en">
|
|
<body>
|
|
<ComparisonProvider>
|
|
<div className="app-container">
|
|
<div className="noise-overlay" />
|
|
<Navigation />
|
|
<main className="main-content">
|
|
{children}
|
|
</main>
|
|
<Footer />
|
|
</div>
|
|
</ComparisonProvider>
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|