/** * Manifesto Homepage * * Main landing page for the AI Speedrun manifesto website. * This page will display the long-form manifesto content. * * Performance optimizations: * - Lazy load components below the fold (ComparisonTable, ExperimentCTA) * - Critical content (Hero, ManifestoContent) loads immediately */ import type { Metadata } from 'next' import dynamic from 'next/dynamic' import { getContent } from '@/lib/content/loader' import type { ManifestoContent, MetadataContent } from '@/content/schemas/manifesto' import { HeroQuote } from './components/hero-quote' import { ManifestoContent as ManifestoContentComponent } from './components/manifesto-content' import { StructuredData } from './components/structured-data' // Generate metadata for SEO export async function generateMetadata(): Promise { const metadataContent = await getContent('nl', 'metadata') const meta = metadataContent.manifesto const siteUrl = process.env.NEXT_PUBLIC_APP_URL || 'https://aispeedrun.vercel.app' const ogImageUrl = `${siteUrl}${meta.ogImage}` return { title: meta.title, description: meta.description, keywords: meta.keywords, authors: [{ name: 'Colin van der Heijden' }], openGraph: { type: 'article', title: meta.ogTitle, description: meta.ogDescription, images: [ { url: ogImageUrl, width: 1200, height: 630, alt: meta.ogTitle, }, ], siteName: 'AI Speedrun', locale: 'nl_NL', }, twitter: { card: 'summary_large_image', title: meta.ogTitle, description: meta.ogDescription, images: [ogImageUrl], }, alternates: { canonical: siteUrl, }, robots: { index: true, follow: true, googleBot: { index: true, follow: true, 'max-video-preview': -1, 'max-image-preview': 'large', 'max-snippet': -1, }, }, } } // Lazy load components below the fold for better initial load performance const ComparisonTable = dynamic( () => import('./components/comparison-table').then((mod) => ({ default: mod.ComparisonTable })), { ssr: true, // Still SSR for SEO, but code-split loading: () => (
) } ) const ExperimentCTA = dynamic( () => import('./components/experiment-cta').then((mod) => ({ default: mod.ExperimentCTA })), { ssr: true, // Still SSR for SEO, but code-split loading: () => (
) } ) export default async function ManifestoPage() { const content = await getContent('nl', 'manifesto') return ( <> {/* Structured data for SEO */}
) }