+ {c.title} +
+{c.excerpt}
+ +diff --git a/frontend/src/app/[lang]/blog/[slug]/page.tsx b/frontend/src/app/[lang]/blog/[slug]/page.tsx new file mode 100644 index 0000000..77c288c --- /dev/null +++ b/frontend/src/app/[lang]/blog/[slug]/page.tsx @@ -0,0 +1,105 @@ +'use client'; + +import { useParams } from 'next/navigation'; +import { ArrowLeft } from 'lucide-react'; +import { Link } from '@/i18n/Link'; +import { useT, useLocale } from '@/i18n/I18nProvider'; +import { getPost, type BlogBlock } from '@/components/landing/blog/posts'; +import { BlogCover } from '@/components/landing/blog/BlogCover'; +import { BlogShell } from '@/components/landing/blog/BlogShell'; + +function Block({ block }: { block: BlogBlock }) { + if (block.type === 'h2') { + return
{block.text}
; +} + +export default function BlogPostPage() { + const params = useParams(); + const slug = Array.isArray(params.slug) ? params.slug[0] : (params.slug ?? ''); + const t = useT(); + const b = t.landing.blog; + const locale = useLocale(); + const post = getPost(slug); + + if (!post) { + return ( +{b.notFound}
+ + {b.backToBlog} +{c.excerpt}
+ +{b.subtitle}
+{c.excerpt}
+ + {b.readMore} +{post.desc}
- - {b.readMore} -{c.excerpt}
+ + {b.readMore} +