diff --git a/README.md b/README.md index eabc1dc..a030126 100644 --- a/README.md +++ b/README.md @@ -1441,6 +1441,44 @@ calling out specifically since they add new shared components: each page's heading — not nested inside the sidebar's `hidden lg:...` wrapper, which would hide it too regardless of its own `lg:hidden` class. +## Custom post content blocks, and SEO settings (2026-07-24) + +`app/components/RichText.tsx` switched from a small hand-rolled Lexical +JSON→JSX walker to Payload's official `@payloadcms/richtext-lexical/react` +renderer + custom `JSXConverters` — needed once the Payload repo's +`Posts.content` gained custom Lexical Blocks (`Bild`/`Bildergalerie`/`Video`/ +`Zitat`, see the Payload README's own section on this), which the old +hand-rolled `switch` had no case for at all. Kept the exact same exported +call signature (`RichText({ content, quoteLabel })`), so `LiveRichText.tsx` +and `app/blog/[slug]/components/LivePostContent.tsx` needed zero changes. +`extractHeadings()`/`headingId()` (used by `SectionTOC` on legal pages) stay +an independent, minimal walk over the raw JSON, unrelated to the new +renderer — legal pages don't use Blocks. + +Block converters follow this project's established "CMS-sourced image" +convention (`relative` + `aspect-[…]` + `next/image fill` + `object-cover`, +see the blog thumbnail treatment) — a gallery block renders as a +`grid-cols-2` grid, a video block resolves a YouTube/Vimeo URL into an +`