import { AUTHOR, pageMetadata, SITE_NAME, SITE_URL } from '@/app/metadata' import { ImageWrapper } from '@/components/content/ImageWrapper' import { ShareLinks } from '@/components/post/ShareLinks' import { TableOfContents } from '@/components/post/TableOfContents' import { getAllPostSlugs, getNextAndPreviousPosts, getPostBySlug } from '@/lib/posts' import { slugify } from '@/utils/slug' import { ArrowLeft, ArrowRight, Pencil, SendHorizonal } from 'lucide-react' import type { Metadata } from 'next' import Link from 'next/link' export async function generateStaticParams() { return getAllPostSlugs().map((slug) => ({ slug })) } export const dynamicParams = false export async function generateMetadata({ params, }: { params: Promise<{ slug: string }> }): Promise { const { slug } = await params const { meta } = await getPostBySlug(slug) return pageMetadata({ title: meta.title, description: meta.description, path: `/posts/${slug}`, image: `/posts/${slug}/opengraph-image`, openGraph: { type: 'article', publishedTime: meta.date, modifiedTime: meta.updated, authors: [AUTHOR.url], section: meta.category, tags: meta.tags, }, }) } export default async function Post({ params }: { params: Promise<{ slug: string }> }) { const { slug } = await params const { meta, content, tableOfContents } = await getPostBySlug(slug) const { next, previous } = getNextAndPreviousPosts(slug) const url = `${SITE_URL}/posts/${slug}` const jsonLd = { '@context': 'https://schema.org', '@type': 'BlogPosting', headline: meta.title, description: meta.description, url, mainEntityOfPage: url, datePublished: meta.date, dateModified: meta.updated ?? meta.date, image: `${url}/opengraph-image`, articleSection: meta.category, keywords: meta.tags.join(', '), author: { '@type': 'Person', name: AUTHOR.name, url: AUTHOR.url }, publisher: { '@type': 'Person', name: AUTHOR.name, url: AUTHOR.url }, isPartOf: { '@type': 'Blog', name: SITE_NAME, url: SITE_URL }, } return (