Ring news is a full publishing surface: members author articles, promote to the main page when enabled, and readers engage on /news/[slug] and /[username]/[slug]. Article bodies are Markdown (contentFormat: markdown) authored in NewsRichEditor (WikiRichEditor core + news toolbar). Shortcodes [[embed:]] / [[mood:]] / [[video:]] expand on public pages. TipTap stays only as deferred TipTapNewsAdapter for a slash / command palette — embeds, Mood, video, and generate-image already ship via the Markdown path.
Use the Founder / Developer tabs in the docs sidebar to filter this page. audience frontmatter filters content blocks; sidebar visibility is curated in lib/docs/audience-curated-docs.ts.
Author hunk preview → Accept applies body / Reject closes
Operator journey
Author a story
Open My News (/my-news) or /news/create.
Write in NewsRichEditor — headings, lists, images via the Markdown toolbar.
Use Embed URL, Mood, Video, or Generate image (or paste a lone URL) to insert shortcodes / images.
Preview shows the same public Markdown + widget pipeline. Publish when ready; use promotion panels if your clone enables paid/main-page promotion.
Community revise
Any member (not the author) sees Revise on a published article.
They edit a copy and submit — the live page does not change yet.
On My News, the author sees Proposed amendments: N.
Preview: deleted lines pale red / struck; added lines pale green.
Accept updates the published body; Reject closes that proposal.
Why this matters
Members improve accuracy without silent overwrite. Authors stay in control of the live article.
Permissions (simplified)
Action
Who
News body — Markdown SSOT + NewsRichEditor
Authoring SSOT is Markdown. ArticleEditor and revise mount NewsRichEditor, which wraps WikiRichEditor with news-only widget chrome. CV/wiki keep bare WikiRichEditor.
News Kingdom migrations (002 / 003) and promotion remain required for paid main-page flows. NewsRichEditor Markdown + shortcodes + pending-revision ship without changing NewsStatus (draft | published | archived | deleted).
5 min listen
News Module
Ring news is a full publishing surface: members author articles, promote to the main page when enabled, and readers engage on /news/[slug] and /[username]/[slug]. Article bodies are Markdown (contentFormat: markdown) authored in NewsRichEditor (WikiRichEditor core + news toolbar). Shortcodes [[embed:]] / [[mood:]] / [[video:]] expand on public pages. TipTap stays only as deferred TipTapNewsAdapter for a slash / command palette — embeds, Mood, video, and generate-image already ship via the Markdown path.
Use the Founder / Developer tabs in the docs sidebar to filter this page. audience frontmatter filters content blocks; sidebar visibility is curated in lib/docs/audience-curated-docs.ts.
Author hunk preview → Accept applies body / Reject closes
Operator journey
Author a story
Open My News (/my-news) or /news/create.
Write in NewsRichEditor — headings, lists, images via the Markdown toolbar.
Use Embed URL, Mood, Video, or Generate image (or paste a lone URL) to insert shortcodes / images.
Preview shows the same public Markdown + widget pipeline. Publish when ready; use promotion panels if your clone enables paid/main-page promotion.
Community revise
Any member (not the author) sees Revise on a published article.
They edit a copy and submit — the live page does not change yet.
On My News, the author sees Proposed amendments: N.
Preview: deleted lines pale red / struck; added lines pale green.
Accept updates the published body; Reject closes that proposal.
Why this matters
Members improve accuracy without silent overwrite. Authors stay in control of the live article.
Permissions (simplified)
Action
Who
News body — Markdown SSOT + NewsRichEditor
Authoring SSOT is Markdown. ArticleEditor and revise mount NewsRichEditor, which wraps WikiRichEditor with news-only widget chrome. CV/wiki keep bare WikiRichEditor.
News Kingdom migrations (002 / 003) and promotion remain required for paid main-page flows. NewsRichEditor Markdown + shortcodes + pending-revision ship without changing NewsStatus (draft | published | archived | deleted).
5 min listen
News Module
Ring news is a full publishing surface: members author articles, promote to the main page when enabled, and readers engage on /news/[slug] and /[username]/[slug]. Article bodies are Markdown (contentFormat: markdown) authored in NewsRichEditor (WikiRichEditor core + news toolbar). Shortcodes [[embed:]] / [[mood:]] / [[video:]] expand on public pages. TipTap stays only as deferred TipTapNewsAdapter for a slash / command palette — embeds, Mood, video, and generate-image already ship via the Markdown path.
Use the Founder / Developer tabs in the docs sidebar to filter this page. audience frontmatter filters content blocks; sidebar visibility is curated in lib/docs/audience-curated-docs.ts.
Author hunk preview → Accept applies body / Reject closes
Operator journey
Author a story
Open My News (/my-news) or /news/create.
Write in NewsRichEditor — headings, lists, images via the Markdown toolbar.
Use Embed URL, Mood, Video, or Generate image (or paste a lone URL) to insert shortcodes / images.
Preview shows the same public Markdown + widget pipeline. Publish when ready; use promotion panels if your clone enables paid/main-page promotion.
Community revise
Any member (not the author) sees Revise on a published article.
They edit a copy and submit — the live page does not change yet.
On My News, the author sees Proposed amendments: N.
Preview: deleted lines pale red / struck; added lines pale green.
Accept updates the published body; Reject closes that proposal.
Why this matters
Members improve accuracy without silent overwrite. Authors stay in control of the live article.
Permissions (simplified)
Action
Who
News body — Markdown SSOT + NewsRichEditor
Authoring SSOT is Markdown. ArticleEditor and revise mount NewsRichEditor, which wraps WikiRichEditor with news-only widget chrome. CV/wiki keep bare WikiRichEditor.
Category, sort, featured and empty-state labels on the news list, cards and side rail come from locales/<locale>/modules/news.json (filters.*, categories.*), so Ukrainian and other locales no longer see English filter bars
Page curtain
Article pages can show advertised products in the page curtain; authors see the funnel and credits on My News
Collab (gated)
Y.Text newsMarkdown on collab:news:{articleId} when NEXT_PUBLIC_COLLAB_ENABLED=true
Autosave: dirty-gated debounce (~3s) PUT /api/news/[id] with { content } (Markdown). Explicit Save appends a version commit with contentFormat: 'markdown'.
Public sanitize pipeline
renderNewsMarkdownToHtml order (mandatory):
Legacy HTML tip → escaped conversion stub (never trust raw HTML as the tip body)
Category, sort, featured and empty-state labels on the news list, cards and side rail come from locales/<locale>/modules/news.json (filters.*, categories.*), so Ukrainian and other locales no longer see English filter bars
Page curtain
Article pages can show advertised products in the page curtain; authors see the funnel and credits on My News
Collab (gated)
Y.Text newsMarkdown on collab:news:{articleId} when NEXT_PUBLIC_COLLAB_ENABLED=true
Autosave: dirty-gated debounce (~3s) PUT /api/news/[id] with { content } (Markdown). Explicit Save appends a version commit with contentFormat: 'markdown'.
Public sanitize pipeline
renderNewsMarkdownToHtml order (mandatory):
Legacy HTML tip → escaped conversion stub (never trust raw HTML as the tip body)
Category, sort, featured and empty-state labels on the news list, cards and side rail come from locales/<locale>/modules/news.json (filters.*, categories.*), so Ukrainian and other locales no longer see English filter bars
Page curtain
Article pages can show advertised products in the page curtain; authors see the funnel and credits on My News
Collab (gated)
Y.Text newsMarkdown on collab:news:{articleId} when NEXT_PUBLIC_COLLAB_ENABLED=true
Autosave: dirty-gated debounce (~3s) PUT /api/news/[id] with { content } (Markdown). Explicit Save appends a version commit with contentFormat: 'markdown'.
Public sanitize pipeline
renderNewsMarkdownToHtml order (mandatory):
Legacy HTML tip → escaped conversion stub (never trust raw HTML as the tip body)