import Link from 'next/link'; import Image from 'next/image'; import { notFound } from 'next/navigation'; import type { Metadata } from 'next'; import { allPages } from 'contentlayer2/generated'; import { getPageBySlug, getTagSlug } from '@/lib/posts'; import { siteConfig } from '@/lib/config'; import { ReadingProgress } from '@/components/reading-progress'; import { PostLayout } from '@/components/post-layout'; import { ScrollReveal } from '@/components/scroll-reveal'; import { SectionDivider } from '@/components/section-divider'; import { JsonLd } from '@/components/json-ld'; import { DevEnvDeviceHero } from '@/components/dev-env-device-hero'; import { HomeLabDeviceHero } from '@/components/homelab-device-hero'; import { MermaidRenderer } from '@/components/mermaid-renderer'; export function generateStaticParams() { const params = allPages.map((page) => ({ slug: page.slug || page.flattenedPath })); return params.length > 0 ? params : [{ slug: '__placeholder__' }]; } interface Props { params: Promise<{ slug: string }>; } export async function generateMetadata({ params }: Props): Promise { const { slug } = await params; const page = getPageBySlug(slug); if (!page) return {}; const pageUrl = `${siteConfig.url}${page.url}`; return { title: page.title, description: page.description || page.title, alternates: { canonical: pageUrl }, openGraph: { title: page.title, description: page.description || page.title, url: pageUrl, type: 'website', images: [ page.feature_image ? { url: `${siteConfig.url}${page.feature_image.replace('../assets', '/assets')}`, alt: page.title } : { url: `${siteConfig.url}${siteConfig.ogImage}`, alt: page.title } ] }, twitter: { card: siteConfig.twitterCard, title: page.title, description: page.description || page.title, images: [ page.feature_image ? page.feature_image.replace('../assets', '/assets') : siteConfig.ogImage ] } }; } export default async function StaticPage({ params }: Props) { const { slug } = await params; const page = getPageBySlug(slug); if (!page) return notFound(); const hasToc = /
{page.published_at && (

{new Date(page.published_at).toLocaleDateString( siteConfig.defaultLocale )}

)}

{page.title}

{page.tags && (
{page.tags.map((t) => ( #{t} ))}
)}
{slug === 'dev-env' ? ( ) : slug === 'homelab' ? ( ) : ( page.feature_image && (
{page.title}
) )}
); }