diff --git a/apps/website/src/app/angular/page.tsx b/apps/website/src/app/angular/page.tsx index 161c12124..db32099e4 100644 --- a/apps/website/src/app/angular/page.tsx +++ b/apps/website/src/app/angular/page.tsx @@ -5,6 +5,7 @@ import { AngularFeaturesGrid } from '../../components/landing/angular/AngularFea import { AngularCodeShowcase } from '../../components/landing/angular/AngularCodeShowcase'; import { AngularComparison } from '../../components/landing/angular/AngularComparison'; import { AngularWhitePaperGate } from '../../components/landing/angular/AngularWhitePaperGate'; +import { AngularStackSiblings } from '../../components/landing/angular/AngularStackSiblings'; import { AngularFooterCTA } from '../../components/landing/angular/AngularFooterCTA'; import { tokens } from '@cacheplane/design-tokens'; @@ -25,6 +26,7 @@ export default function AngularPage() { + ); diff --git a/apps/website/src/app/chat/page.tsx b/apps/website/src/app/chat/page.tsx index ab2f39210..7634128cb 100644 --- a/apps/website/src/app/chat/page.tsx +++ b/apps/website/src/app/chat/page.tsx @@ -5,6 +5,7 @@ import { ChatLandingFeaturesGrid } from '../../components/landing/chat-landing/C import { ChatLandingCodeShowcase } from '../../components/landing/chat-landing/ChatLandingCodeShowcase'; import { ChatLandingComparison } from '../../components/landing/chat-landing/ChatLandingComparison'; import { ChatLandingWhitePaperGate } from '../../components/landing/chat-landing/ChatLandingWhitePaperGate'; +import { ChatLandingStackSiblings } from '../../components/landing/chat-landing/ChatLandingStackSiblings'; import { ChatLandingFooterCTA } from '../../components/landing/chat-landing/ChatLandingFooterCTA'; import { tokens } from '@cacheplane/design-tokens'; @@ -25,6 +26,7 @@ export default function ChatPage() { + ); diff --git a/apps/website/src/app/render/page.tsx b/apps/website/src/app/render/page.tsx index 28c48acd8..aaabfef40 100644 --- a/apps/website/src/app/render/page.tsx +++ b/apps/website/src/app/render/page.tsx @@ -5,6 +5,7 @@ import { RenderFeaturesGrid } from '../../components/landing/render/RenderFeatur import { RenderCodeShowcase } from '../../components/landing/render/RenderCodeShowcase'; import { RenderComparison } from '../../components/landing/render/RenderComparison'; import { RenderWhitePaperGate } from '../../components/landing/render/RenderWhitePaperGate'; +import { RenderStackSiblings } from '../../components/landing/render/RenderStackSiblings'; import { RenderFooterCTA } from '../../components/landing/render/RenderFooterCTA'; import { tokens } from '@cacheplane/design-tokens'; @@ -25,6 +26,7 @@ export default function RenderPage() { + ); 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 */} +