diff --git a/app/(marketing)/components/comparison-table.tsx b/app/(marketing)/components/comparison-table.tsx deleted file mode 100644 index 3ca2278..0000000 --- a/app/(marketing)/components/comparison-table.tsx +++ /dev/null @@ -1,104 +0,0 @@ -/** - * Comparison Table Component - * - * Visual comparison between Traditional and AI Speedrun approaches. - * Responsive: table on desktop, stacked cards on mobile. - */ - -import type { ComparisonContent } from '@/content/schemas/manifesto' - -interface ComparisonTableProps { - content: ComparisonContent -} - -export function ComparisonTable({ content }: ComparisonTableProps) { - return ( -
-

- {content.heading} -

- - {/* Desktop: Table view */} -
- - - - - - - - - - {content.items.map((item, index) => ( - - - - - - ))} - -
- Aspect - - Traditioneel - - AI Speedrun -
- {item.label} - - {item.traditional} - - {item.aiSpeedrun} -
-
- - {/* Mobile: Stacked cards */} -
- {content.items.map((item) => ( -
-

- {item.label} -

-
-
-
Traditioneel:
-
- {item.traditional} -
-
-
-
- AI Speedrun: -
-
- {item.aiSpeedrun} -
-
-
-
- ))} -
-
- ) -} - diff --git a/app/(marketing)/components/experiment-cta.tsx b/app/(marketing)/components/experiment-cta.tsx deleted file mode 100644 index e86ffd6..0000000 --- a/app/(marketing)/components/experiment-cta.tsx +++ /dev/null @@ -1,56 +0,0 @@ -/** - * Experiment CTA Component - * - * Call-to-action section at the end of the manifesto. - * Subtle buttons, no aggressive colors or fake urgency. - * Follows design specs: large typography, centered, minimal styling. - */ - -import Link from 'next/link' -import type { CTAContent } from '@/content/schemas/manifesto' - -interface ExperimentCTAProps { - content: CTAContent -} - -export function ExperimentCTA({ content }: ExperimentCTAProps) { - return ( -
-
-

- {content.heading} -

- - {content.subheading && ( -

- {content.subheading} -

- )} - -
- {/* Primary Button - Subtle dark background */} - - {content.primaryButton.text} - - - {/* Secondary Button - Subtle outline */} - - {content.secondaryButton.text} - -
-
-
- ) -} - diff --git a/app/(marketing)/components/manifesto-content.tsx b/app/(marketing)/components/manifesto-content.tsx deleted file mode 100644 index 46fe9af..0000000 --- a/app/(marketing)/components/manifesto-content.tsx +++ /dev/null @@ -1,95 +0,0 @@ -/** - * Manifesto Content Component - * - * Long-form reading experience with manifesto text. - * Renders paragraphs with proper typography for optimal reading. - */ - -import type { ManifestoSection } from '@/content/schemas/manifesto' -import { InsightBox } from './insight-box' -import { StatementSection } from './statement-section' - -interface ManifestoContentProps { - sections: ManifestoSection[] -} - -export function ManifestoContent({ sections }: ManifestoContentProps) { - // Group consecutive non-statement sections into article blocks - const blocks: Array<{ start: number; end: number }> = [] - let blockStart = 0 - - sections.forEach((section, index) => { - if (section.type === 'statement') { - if (blockStart < index) { - blocks.push({ start: blockStart, end: index - 1 }) - } - blockStart = index + 1 - } - }) - - // Add final block if needed - if (blockStart < sections.length) { - blocks.push({ start: blockStart, end: sections.length - 1 }) - } - - let blockIndex = 0 - - return ( - <> - {sections.map((section, index) => { - // Statement sections are full-width - if (section.type === 'statement') { - return - } - - // Check if this is the start of a new article block - const currentBlock = blocks[blockIndex] - const isBlockStart = currentBlock && index === currentBlock.start - - if (isBlockStart) { - const blockSections = sections.slice(currentBlock.start, currentBlock.end + 1) - blockIndex++ - - return ( -
-
- {blockSections.map((blockSection) => { - if (blockSection.type === 'paragraph') { - return ( -

- {blockSection.content} -

- ) - } - - if (blockSection.type === 'insight') { - return ( - - {blockSection.content} - - ) - } - - return null - })} -
-
- ) - } - - return null - })} - - ) -} - diff --git a/app/(marketing)/components/reading-progress.tsx b/app/(marketing)/components/reading-progress.tsx index 917cf2f..9e6ce4d 100644 --- a/app/(marketing)/components/reading-progress.tsx +++ b/app/(marketing)/components/reading-progress.tsx @@ -60,7 +60,7 @@ export function ReadingProgress() { aria-label="Leesvoortgang" >
diff --git a/app/(marketing)/components/structured-data.tsx b/app/(marketing)/components/structured-data.tsx deleted file mode 100644 index fb22bda..0000000 --- a/app/(marketing)/components/structured-data.tsx +++ /dev/null @@ -1,52 +0,0 @@ -/** - * Structured Data Component - * - * Adds JSON-LD structured data for Article schema to improve SEO. - * Helps search engines understand the content structure. - */ - -import type { ManifestoContent } from '@/content/schemas/manifesto' - -interface StructuredDataProps { - content: ManifestoContent -} - -export function StructuredData({ content }: StructuredDataProps) { - const siteUrl = process.env.NEXT_PUBLIC_APP_URL || 'https://aispeedrun.vercel.app' - const publishedDate = '2024-11-15' // Launch date - const modifiedDate = new Date().toISOString().split('T')[0] - - const structuredData = { - '@context': 'https://schema.org', - '@type': 'Article', - headline: content.hero.quote, - description: content.hero.subtitle, - author: { - '@type': 'Person', - name: 'Colin van der Heijden', - url: 'https://ikbenlit.nl', - }, - publisher: { - '@type': 'Organization', - name: 'AI Speedrun', - url: siteUrl, - }, - datePublished: publishedDate, - dateModified: modifiedDate, - mainEntityOfPage: { - '@type': 'WebPage', - '@id': siteUrl, - }, - articleSection: 'Technology', - keywords: ['AI', 'Software on Demand', 'EPD', 'Development', 'Build in Public'], - inLanguage: 'nl-NL', - } - - return ( -