/** * Series Overview Page * * Shows all posts in a specific series */ import { notFound } from 'next/navigation' import Link from 'next/link' import { getSeries, getPostsBySeries, getAllSeries } from '@/lib/mdx/blog' interface SeriesPageProps { params: Promise<{ serieId: string }> } export async function generateStaticParams() { const series = await getAllSeries() return series.map((serie) => ({ serieId: serie.id })) } export async function generateMetadata({ params }: SeriesPageProps) { const { serieId } = await params const series = await getSeries(serieId) if (!series) { return { title: 'Serie niet gevonden' } } const siteUrl = process.env.NEXT_PUBLIC_APP_URL || 'https://aispeedrun.vercel.app' const seriesUrl = `${siteUrl}/blog/serie/${serieId}` return { title: `${series.title} - Blog | AI Speedrun`, description: series.description, openGraph: { title: series.title, description: series.description, type: 'website', siteName: 'AI Speedrun', locale: 'nl_NL', }, twitter: { card: 'summary', title: series.title, description: series.description, }, alternates: { canonical: seriesUrl, }, } } export default async function SeriesPage({ params }: SeriesPageProps) { const { serieId } = await params const series = await getSeries(serieId) if (!series) { notFound() } const posts = await getPostsBySeries(serieId) const colorStyles = { teal: { bg: 'bg-teal-50', badge: 'bg-teal-100 text-teal-700 border-teal-200', dot: 'bg-teal-500', number: 'bg-teal-600 text-white', }, amber: { bg: 'bg-amber-50', badge: 'bg-amber-100 text-amber-700 border-amber-200', dot: 'bg-amber-500', number: 'bg-amber-600 text-white', }, slate: { bg: 'bg-slate-50', badge: 'bg-slate-100 text-slate-700 border-slate-200', dot: 'bg-slate-500', number: 'bg-slate-600 text-white', }, } const styles = colorStyles[series.color] || colorStyles.slate const statusLabels = { completed: 'Voltooid', active: 'Actief', planned: 'Gepland', } return (
{/* Back link */}
Terug naar blog
{/* Series Header */}
{statusLabels[series.status]}

{series.title}

{series.description}

{posts.length} {posts.length === 1 ? 'deel' : 'delen'}
{/* Posts List */} {posts.length === 0 ? (

Nog geen posts in deze serie.

) : (
{posts.map((post, index) => (
{index + 1}

{post.frontmatter.title}

{post.frontmatter.description}

{post.readingTime} min
))}
)}
) }