import { Link, useParams } from 'react-router-dom'; import { ArrowLeft, Clock, Info, AlertTriangle } from 'lucide-react'; import { PublicLayout } from '@/components/public/PublicLayout'; import { getPost, type Block } from '@/content/posts'; import { formatDate } from '@/lib/format'; import { cn } from '@/lib/cn'; export default function BlogPostPage() { const { slug } = useParams<{ slug: string }>(); const post = slug ? getPost(slug) : undefined; if (!post) { return (

Post not found

← Back to blog
); } return (
All posts

Blog

{post.title}

{post.description}

{post.author} · · {post.readMinutes} min read
{post.coverImage && ( )}
{post.body.map((b, i) => ( ))}
); } function RenderBlock({ block }: { block: Block }) { switch (block.type) { case 'p': return

{block.text}

; case 'h2': return

{block.text}

; case 'h3': return

{block.text}

; case 'ul': return ( ); case 'ol': return (
    {block.items.map((item, i) => (
  1. {item}
  2. ))}
); case 'quote': return (
{block.text}
); case 'callout': { const tone = block.tone; const Icon = tone === 'amber' ? AlertTriangle : Info; return (

{block.title}

{block.text}

); } } }