import { notFound } from "next/navigation"; import { ArrowLeft } from "lucide-react"; import Link from "next/link"; import { Button } from "~/components/ui/button"; import { Badge } from "~/components/ui/badge"; import fs from "fs"; import path from "path"; interface PageProps { params: Promise<{ slug: string }>; } export async function generateStaticParams() { const contentDir = path.join(process.cwd(), "src/content/blog"); const files = fs.readdirSync(contentDir); return files .filter((file) => file.endsWith(".mdx")) .map((file) => ({ slug: file.replace(".mdx", ""), })); } export async function generateMetadata({ params }: PageProps) { const { slug } = await params; try { const { metadata } = await import(`~/content/blog/${slug}.mdx`); return metadata; } catch (e) { return { title: "Post Not Found", }; } } export default async function BlogPost({ params }: PageProps) { const { slug } = await params; let Post; let metadata; try { const content = await import(`~/content/blog/${slug}.mdx`); Post = content.default; metadata = content.metadata; } catch (e) { notFound(); } return (
{/* */}

{metadata.title}

{metadata.tags && (
{metadata.tags.map((tag: string) => ( {tag} ))}
)}
); }