diff --git a/apps/website/src/app/solutions/[slug]/page.tsx b/apps/website/src/app/solutions/[slug]/page.tsx new file mode 100644 index 000000000..2660ae591 --- /dev/null +++ b/apps/website/src/app/solutions/[slug]/page.tsx @@ -0,0 +1,102 @@ +import { notFound } from 'next/navigation'; +import { tokens } from '@cacheplane/design-tokens'; +import { getSolutionBySlug, getAllSolutionSlugs } from '../../../lib/solutions-data'; +import { SolutionHero } from '../../../components/landing/solutions/SolutionHero'; +import { SolutionProblem } from '../../../components/landing/solutions/SolutionProblem'; +import { SolutionArchitecture } from '../../../components/landing/solutions/SolutionArchitecture'; +import { SolutionProofPoints } from '../../../components/landing/solutions/SolutionProofPoints'; +import { SolutionFooterCTA } from '../../../components/landing/solutions/SolutionFooterCTA'; +import { WhitePaperSection } from '../../../components/landing/WhitePaperSection'; + +interface PageProps { + params: Promise<{ slug: string }>; +} + +export function generateStaticParams() { + return getAllSolutionSlugs().map(slug => ({ slug })); +} + +export async function generateMetadata({ params }: PageProps) { + const { slug } = await params; + const solution = getSolutionBySlug(slug); + if (!solution) return {}; + return { + title: solution.metaTitle, + description: solution.metaDescription, + }; +} + +export default async function SolutionPage({ params }: PageProps) { + const { slug } = await params; + const solution = getSolutionBySlug(slug); + if (!solution) notFound(); + + return ( +
+ {/* Ambient gradient blobs */} +