Documentation

    Concepts, value, and typical clone scenarios — less code.

    Welcome to Ring
    Quick Reference
    Getting Started
    Prerequisites
    Installation
    First Success Validation
    Next Steps
    Features
    Multi-Vendor Store
    Inventory & Stock
    Vendor Management
    Commissions & Settlements
    SubscriptionConductor
    PaymentConductor
    Payments Overview
    Public Pools & DAO Jars
    WayForPay Payment Integration
    Wallet & Credit System
    WalletConductor
    Affiliate & Referral Enablement
    Referral Codes (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Token Staking System
    Owner Project Lab
    Entities
    Opportunities
    Real-Time Messaging
    Ring Tasks
    WebRTC Calls & STUNner TURN
    Peer Games
    News Module
    Member Blogs
    Public Profile Pages
    Ring File Cabinet
    Username Reservation System
    Scientific Editor
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Email AI-CRM
    Ring Mailer & RingdomX Mail
    Tunnel Protocol
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Security & Compliance
    Admin console
    Admin Wiki
    Manage via Telegram
    Locale System
    Mobile Experience
    Performance Optimization Patterns
    Examples
    Quick Start
    Basic Setup
    White Label
    Custom Branding
    Web3 Integration
    Real World
    Advanced Features
    Customization
    Quick Start — Your First Ring Clone
    Customization Guide
    Branding
    Themes
    Features
    Localization
    Token Economics Setup
    Payment Gateway Integration
    Reference Ring deployments
    Web3
    Token launch jurisdictions
    Wallet
    Wallet Security Tips
    Integrations
    Ethereum wallets (Wagmi v3)
    RingFileBase (object storage API)
    Ring CDN (RingFileBase edge)
    Deployment
    Self-hosted deployment
    Vercel
    Docker
    Environment Configuration
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery
    Architecture
    Data Model
    Security
    Real Time
    Discovery Mutation Sync
    PaymentConductor architecture
    WalletConductor architecture
    Development
    Ring MCP Server

    Quick entry (CTOs · auditors · agents)

    Welcome — mission & audiences
    Quick Reference
    Getting started
    Architecture & Auth.js
    Backend modes & databases (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Security & compliance reads
    ringdom.org — LegioX homebase
    Source — MIT license (GitHub)

    Documentation

    Concepts, value, and typical clone scenarios — less code.

    Welcome to Ring
    Quick Reference
    Getting Started
    Prerequisites
    Installation
    First Success Validation
    Next Steps
    Features
    Multi-Vendor Store
    Inventory & Stock
    Vendor Management
    Commissions & Settlements
    SubscriptionConductor
    PaymentConductor
    Payments Overview
    Public Pools & DAO Jars
    WayForPay Payment Integration
    Wallet & Credit System
    WalletConductor
    Affiliate & Referral Enablement
    Referral Codes (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Token Staking System
    Owner Project Lab
    Entities
    Opportunities
    Real-Time Messaging
    Ring Tasks
    WebRTC Calls & STUNner TURN
    Peer Games
    News Module
    Member Blogs
    Public Profile Pages
    Ring File Cabinet
    Username Reservation System
    Scientific Editor
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Email AI-CRM
    Ring Mailer & RingdomX Mail
    Tunnel Protocol
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Security & Compliance
    Admin console
    Admin Wiki
    Manage via Telegram
    Locale System
    Mobile Experience
    Performance Optimization Patterns
    Examples
    Quick Start
    Basic Setup
    White Label
    Custom Branding
    Web3 Integration
    Real World
    Advanced Features
    Customization
    Quick Start — Your First Ring Clone
    Customization Guide
    Branding
    Themes
    Features
    Localization
    Token Economics Setup
    Payment Gateway Integration
    Reference Ring deployments
    Web3
    Token launch jurisdictions
    Wallet
    Wallet Security Tips
    Integrations
    Ethereum wallets (Wagmi v3)
    RingFileBase (object storage API)
    Ring CDN (RingFileBase edge)
    Deployment
    Self-hosted deployment
    Vercel
    Docker
    Environment Configuration
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery
    Architecture
    Data Model
    Security
    Real Time
    Discovery Mutation Sync
    PaymentConductor architecture
    WalletConductor architecture
    Development
    Ring MCP Server

    Quick entry (CTOs · auditors · agents)

    Welcome — mission & audiences
    Quick Reference
    Getting started
    Architecture & Auth.js
    Backend modes & databases (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Security & compliance reads
    ringdom.org — LegioX homebase
    Source — MIT license (GitHub)

    Documentation

    Concepts, value, and typical clone scenarios — less code.

    Welcome to Ring
    Quick Reference
    Getting Started
    Prerequisites
    Installation
    First Success Validation
    Next Steps
    Features
    Multi-Vendor Store
    Inventory & Stock
    Vendor Management
    Commissions & Settlements
    SubscriptionConductor
    PaymentConductor
    Payments Overview
    Public Pools & DAO Jars
    WayForPay Payment Integration
    Wallet & Credit System
    WalletConductor
    Affiliate & Referral Enablement
    Referral Codes (Refcodes)
    NFT Exhibition Marketplace
    Solana NFT Gates
    Token Staking System
    Owner Project Lab
    Entities
    Opportunities
    Real-Time Messaging
    Ring Tasks
    WebRTC Calls & STUNner TURN
    Peer Games
    News Module
    Member Blogs
    Public Profile Pages
    Ring File Cabinet
    Username Reservation System
    Scientific Editor
    Notifications
    Push Notifications with FCM (Ring-Powered)
    Email AI-CRM
    Ring Mailer & RingdomX Mail
    Tunnel Protocol
    VideoConductor
    MediaConductor
    Generative Gallery
    Authentication
    Security & Compliance
    Admin console
    Admin Wiki
    Manage via Telegram
    Locale System
    Mobile Experience
    Performance Optimization Patterns
    Examples
    Quick Start
    Basic Setup
    White Label
    Custom Branding
    Web3 Integration
    Real World
    Advanced Features
    Customization
    Quick Start — Your First Ring Clone
    Customization Guide
    Branding
    Themes
    Features
    Localization
    Token Economics Setup
    Payment Gateway Integration
    Reference Ring deployments
    Web3
    Token launch jurisdictions
    Wallet
    Wallet Security Tips
    Integrations
    Ethereum wallets (Wagmi v3)
    RingFileBase (object storage API)
    Ring CDN (RingFileBase edge)
    Deployment
    Self-hosted deployment
    Vercel
    Docker
    Environment Configuration
    Monitoring & Analytics
    Performance Optimization
    Backup & Recovery
    Architecture
    Data Model
    Security
    Real Time
    Discovery Mutation Sync
    PaymentConductor architecture
    WalletConductor architecture
    Development
    Ring MCP Server

    Quick entry (CTOs · auditors · agents)

    Welcome — mission & audiences
    Quick Reference
    Getting started
    Architecture & Auth.js
    Backend modes & databases (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Security & compliance reads
    ringdom.org — LegioX homebase
    Source — MIT license (GitHub)
    1. Docs
    2. /Features
    3. /News Module

    Updated Jul 16, 20265 min listen

    Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    1. Docs
    2. /Features
    3. /News Module

    Updated Jul 16, 20265 min listen

    Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    1. Docs
    2. /Features
    3. /News Module

    Updated Jul 16, 20265 min listen

    Ring Platform Logo

    Завантаження документації...

    Підготовка контенту платформи Ring

    News Module

    Ring news is a full publishing surface: member authors create articles, promote to the main page when enabled, and readers engage on public and blog URLs. As of 2026-07-16, article bodies are authored in TipTap (TinyMCE removed), and members can propose pending revisions on published articles for the author to accept or reject.

    Use the Founder / Developer tabs in the docs sidebar to filter this page.

    News Kingdom architecture

    Migrations, promotion workflow, scoring, and Telegram callbacks.

    Member blogs

    Per-user blog paths via blogUsername and public article URLs.

    Generative newsroom

    Autonomous draft pipeline, featured images, TTS, and locale fan-out.

    Scientific Editor

    TipTap publications editor (equations, versions) — separate from news articles.

    What ships today

    SurfaceWhat it does
    TipTap NewsEditorSlash / commands, paste URL embeds, Mood Player widget, image upload, AI generate image, debounced autosave
    My News/my-news — author dashboard, visit charts, create/edit, Proposed amendments: $count
    Create/news/create (members) and admin create — shared ArticleEditor
    ReviseRevise on published articles → /news/[slug]/revise → pending-revision (live article unchanged until Accept)
    AmendmentsAuthor preview with pale red/green hunks → Accept applies content / Reject closes
    Public render/news/[slug] and /[username]/[slug] — HTML allowlisted via sanitizeNewsHtml

    Operator journey

    Author a story

    1. Open My News (/my-news) and create an article, or go to /news/create.
    2. Write in the TipTap editor — type / for headings, lists, image, embed, or generate image.
    3. Paste a YouTube, Rumble, X, Facebook, Suno, or generic link to insert an embed card/player.
    4. Publish when ready. Use promotion panels if your clone enables paid/main-page promotion.

    Community revise (crowdsourced edits)

    1. Any member (not the author) sees Revise on a published article.
    2. They edit a copy and submit — the live page does not change yet.
    3. On My News, the author sees Proposed amendments: N.
    4. Open the preview: deleted lines are crossed out (pale red); added lines are pale green.
    5. 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)

    ActionWho
    Create / edit ownMember+ (and admins)

    TipTap NewsEditor

    TinyMCE Cloud/addButton paths are gone. Authoring SSOT:

    PathRole
    features/news/components/editor/tiptap-news-editor.tsxTipTap surface + slash + paste embeds + autosave
    features/news/components/editor/extensions/slash-commands.tsSlash item builders
    features/news/components/editor/extensions/embed-node.ts<ring-embed> TipTap node
    features/news/components/editor/mood-player-node.ts<ring-mood-player> node
    features/news/lib/editor-widget-detector.tsURL → provider classifier (no network)
    features/news/lib/sanitize-news-html.tsPublic HTML allowlist

    Related reading

    Related reading

    Member Blogs

    Same-workflow: member blogs share public article surfaces with news.

    News Kingdom architecture

    Deep-dive: promotion, Telegram, and News Kingdom migrations.

    Autonomous Newsroom (Grok)

    Next-step: generative newsroom tooling on the same clone.

    Scientific Editor

    See-also: publications TipTap — not the news HTML editor.

    Production note

    News Kingdom migrations (002 / 003) and promotion remain required for paid main-page flows. TipTap + pending-revision ship on the news feature surface without changing NewsStatus (draft | published | archived | deleted).

    News Module

    Ring news is a full publishing surface: member authors create articles, promote to the main page when enabled, and readers engage on public and blog URLs. As of 2026-07-16, article bodies are authored in TipTap (TinyMCE removed), and members can propose pending revisions on published articles for the author to accept or reject.

    Use the Founder / Developer tabs in the docs sidebar to filter this page.

    News Kingdom architecture

    Migrations, promotion workflow, scoring, and Telegram callbacks.

    Member blogs

    Per-user blog paths via blogUsername and public article URLs.

    Generative newsroom

    Autonomous draft pipeline, featured images, TTS, and locale fan-out.

    Scientific Editor

    TipTap publications editor (equations, versions) — separate from news articles.

    What ships today

    SurfaceWhat it does
    TipTap NewsEditorSlash / commands, paste URL embeds, Mood Player widget, image upload, AI generate image, debounced autosave
    My News/my-news — author dashboard, visit charts, create/edit, Proposed amendments: $count
    Create/news/create (members) and admin create — shared ArticleEditor
    ReviseRevise on published articles → /news/[slug]/revise → pending-revision (live article unchanged until Accept)
    AmendmentsAuthor preview with pale red/green hunks → Accept applies content / Reject closes
    Public render/news/[slug] and /[username]/[slug] — HTML allowlisted via sanitizeNewsHtml

    Operator journey

    Author a story

    1. Open My News (/my-news) and create an article, or go to /news/create.
    2. Write in the TipTap editor — type / for headings, lists, image, embed, or generate image.
    3. Paste a YouTube, Rumble, X, Facebook, Suno, or generic link to insert an embed card/player.
    4. Publish when ready. Use promotion panels if your clone enables paid/main-page promotion.

    Community revise (crowdsourced edits)

    1. Any member (not the author) sees Revise on a published article.
    2. They edit a copy and submit — the live page does not change yet.
    3. On My News, the author sees Proposed amendments: N.
    4. Open the preview: deleted lines are crossed out (pale red); added lines are pale green.
    5. 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)

    ActionWho
    Create / edit ownMember+ (and admins)

    TipTap NewsEditor

    TinyMCE Cloud/addButton paths are gone. Authoring SSOT:

    PathRole
    features/news/components/editor/tiptap-news-editor.tsxTipTap surface + slash + paste embeds + autosave
    features/news/components/editor/extensions/slash-commands.tsSlash item builders
    features/news/components/editor/extensions/embed-node.ts<ring-embed> TipTap node
    features/news/components/editor/mood-player-node.ts<ring-mood-player> node
    features/news/lib/editor-widget-detector.tsURL → provider classifier (no network)
    features/news/lib/sanitize-news-html.tsPublic HTML allowlist

    Related reading

    Related reading

    Member Blogs

    Same-workflow: member blogs share public article surfaces with news.

    News Kingdom architecture

    Deep-dive: promotion, Telegram, and News Kingdom migrations.

    Autonomous Newsroom (Grok)

    Next-step: generative newsroom tooling on the same clone.

    Scientific Editor

    See-also: publications TipTap — not the news HTML editor.

    Production note

    News Kingdom migrations (002 / 003) and promotion remain required for paid main-page flows. TipTap + pending-revision ship on the news feature surface without changing NewsStatus (draft | published | archived | deleted).

    News Module

    Ring news is a full publishing surface: member authors create articles, promote to the main page when enabled, and readers engage on public and blog URLs. As of 2026-07-16, article bodies are authored in TipTap (TinyMCE removed), and members can propose pending revisions on published articles for the author to accept or reject.

    Use the Founder / Developer tabs in the docs sidebar to filter this page.

    News Kingdom architecture

    Migrations, promotion workflow, scoring, and Telegram callbacks.

    Member blogs

    Per-user blog paths via blogUsername and public article URLs.

    Generative newsroom

    Autonomous draft pipeline, featured images, TTS, and locale fan-out.

    Scientific Editor

    TipTap publications editor (equations, versions) — separate from news articles.

    What ships today

    SurfaceWhat it does
    TipTap NewsEditorSlash / commands, paste URL embeds, Mood Player widget, image upload, AI generate image, debounced autosave
    My News/my-news — author dashboard, visit charts, create/edit, Proposed amendments: $count
    Create/news/create (members) and admin create — shared ArticleEditor
    ReviseRevise on published articles → /news/[slug]/revise → pending-revision (live article unchanged until Accept)
    AmendmentsAuthor preview with pale red/green hunks → Accept applies content / Reject closes
    Public render/news/[slug] and /[username]/[slug] — HTML allowlisted via sanitizeNewsHtml

    Operator journey

    Author a story

    1. Open My News (/my-news) and create an article, or go to /news/create.
    2. Write in the TipTap editor — type / for headings, lists, image, embed, or generate image.
    3. Paste a YouTube, Rumble, X, Facebook, Suno, or generic link to insert an embed card/player.
    4. Publish when ready. Use promotion panels if your clone enables paid/main-page promotion.

    Community revise (crowdsourced edits)

    1. Any member (not the author) sees Revise on a published article.
    2. They edit a copy and submit — the live page does not change yet.
    3. On My News, the author sees Proposed amendments: N.
    4. Open the preview: deleted lines are crossed out (pale red); added lines are pale green.
    5. 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)

    ActionWho
    Create / edit ownMember+ (and admins)

    TipTap NewsEditor

    TinyMCE Cloud/addButton paths are gone. Authoring SSOT:

    PathRole
    features/news/components/editor/tiptap-news-editor.tsxTipTap surface + slash + paste embeds + autosave
    features/news/components/editor/extensions/slash-commands.tsSlash item builders
    features/news/components/editor/extensions/embed-node.ts<ring-embed> TipTap node
    features/news/components/editor/mood-player-node.ts<ring-mood-player> node
    features/news/lib/editor-widget-detector.tsURL → provider classifier (no network)
    features/news/lib/sanitize-news-html.tsPublic HTML allowlist

    Related reading

    Related reading

    Member Blogs

    Same-workflow: member blogs share public article surfaces with news.

    News Kingdom architecture

    Deep-dive: promotion, Telegram, and News Kingdom migrations.

    Autonomous Newsroom (Grok)

    Next-step: generative newsroom tooling on the same clone.

    Scientific Editor

    See-also: publications TipTap — not the news HTML editor.

    Production note

    News Kingdom migrations (002 / 003) and promotion remain required for paid main-page flows. TipTap + pending-revision ship on the news feature surface without changing NewsStatus (draft | published | archived | deleted).

    Propose revision on publishedMember+ (not needed for the author — they Edit)
    Accept / reject amendmentsArticle author or platform admin
    Invite co-editors by emailScaffolded APIs only — not a full UI yet
    features/news/components/article-editor.tsx
    Form shell; mounts TipTapNewsEditor
    features/news/components/editor/rich-text-editor.tsxRe-exports TipTapNewsEditor (legacy name)

    Embed preview (authenticated): POST /api/news/embed-preview with { url } — OG title/description/image when fetch succeeds.

    Autosave: debounced PUT /api/news/[id] with { content } (HTML). Storage remains HTML on news.content for public render compatibility; TipTap JSON is editor-internal.

    Slash command groups

    • basic — H1–H3, lists, quote, code block, divider
    • media — image upload, AI generate image, embed URL
    • insert — link

    Dependency: @tiptap/suggestion (TipTap 3.x).

    My News & create routes

    Route helperPath
    ROUTES.MY_NEWS/my-news
    ROUTES.NEWS_CREATE/news/create
    ROUTES.NEWS_REVISE(slug)/news/[slug]/revise
    ROUTES.MY_NEWS_AMENDMENTS(articleId)/my-news/[articleId]/amendments
    ROUTES.MY_NEWS_AMENDMENT_PREVIEW(...)/my-news/[articleId]/amendments/[revisionId]

    UI: app/[locale]/(protected)/my-news/, components/wrappers/my-news-wrapper.tsx.

    Pending revisions API

    Collection: news_revisions via DatabaseService createDoc / queryDocs / updateDoc.

    MethodRouteBehavior
    GET/api/news/[id]/revisions?status=pending-revisionList
    POST/api/news/[id]/revisionsBody { proposedContent } → status pending-revision
    GET/api/news/revisions/[revisionId]One revision
    PATCH/api/news/revisions/[revisionId]{ action: 'accept' | 'reject' } — accept writes proposedContent onto the article

    Service: features/news/services/revision-service.ts
    Permissions: features/news/lib/news-collaboration-permissions.ts (canProposeRevision, canResolveRevision)
    Types: features/news/types/collaboration.ts
    Diff UI: features/news/lib/revision-diff.ts + features/news/components/revision-hunk-preview.tsx (ported from file-registry-viewer LCS)

    Pending revision accept flow

    Public sanitize

    sanitizeNewsHtml strips scripts/handlers and allowlists tags including iframe (YouTube nocookie + Rumble hosts), ring-embed, and ring-mood-player. Used on /news/[slug] and /[username]/[slug].

    ACL / invite scaffolding (not full product)

    PieceStatus
    lib/database/schema/news-collaboration.sqlConceptual schema notes
    GET/POST /api/news/[id]/collaborators501 stub
    GET/POST /api/news/collaboration/invite/[token]501 stub
    Roles owner|admin|editor|reviewer|viewerTypes only (Zemna Phase 4 map)

    CRDT collab (gated, not wired into NewsEditor)

    features/news/lib/news-collab-gate.ts + existing hooks/use-collaboration.ts / Tunnel Yjs provider. Channel convention: collab:news:{articleId}. Requires NEXT_PUBLIC_COLLAB_ENABLED=true and native WSS — TipTap Collaboration extensions not mounted on news yet. See Real Time.

    Core news service (unchanged kingdom)

    features/news/services/news-service.ts — createNewsArticle, updateNewsArticle, getMyArticles, getUserArticleStats, recordArticlePageView, etc. Promotion and Telegram flows: News Kingdom.

    Real Time

    Depends-on: Tunnel / future CRDT collab channels for news.

    Admin Wiki

    See-also: Admin Wiki is Markdown + wikilinks in Postgres — not TipTap news HTML.

    Propose revision on publishedMember+ (not needed for the author — they Edit)
    Accept / reject amendmentsArticle author or platform admin
    Invite co-editors by emailScaffolded APIs only — not a full UI yet
    features/news/components/article-editor.tsx
    Form shell; mounts TipTapNewsEditor
    features/news/components/editor/rich-text-editor.tsxRe-exports TipTapNewsEditor (legacy name)

    Embed preview (authenticated): POST /api/news/embed-preview with { url } — OG title/description/image when fetch succeeds.

    Autosave: debounced PUT /api/news/[id] with { content } (HTML). Storage remains HTML on news.content for public render compatibility; TipTap JSON is editor-internal.

    Slash command groups

    • basic — H1–H3, lists, quote, code block, divider
    • media — image upload, AI generate image, embed URL
    • insert — link

    Dependency: @tiptap/suggestion (TipTap 3.x).

    My News & create routes

    Route helperPath
    ROUTES.MY_NEWS/my-news
    ROUTES.NEWS_CREATE/news/create
    ROUTES.NEWS_REVISE(slug)/news/[slug]/revise
    ROUTES.MY_NEWS_AMENDMENTS(articleId)/my-news/[articleId]/amendments
    ROUTES.MY_NEWS_AMENDMENT_PREVIEW(...)/my-news/[articleId]/amendments/[revisionId]

    UI: app/[locale]/(protected)/my-news/, components/wrappers/my-news-wrapper.tsx.

    Pending revisions API

    Collection: news_revisions via DatabaseService createDoc / queryDocs / updateDoc.

    MethodRouteBehavior
    GET/api/news/[id]/revisions?status=pending-revisionList
    POST/api/news/[id]/revisionsBody { proposedContent } → status pending-revision
    GET/api/news/revisions/[revisionId]One revision
    PATCH/api/news/revisions/[revisionId]{ action: 'accept' | 'reject' } — accept writes proposedContent onto the article

    Service: features/news/services/revision-service.ts
    Permissions: features/news/lib/news-collaboration-permissions.ts (canProposeRevision, canResolveRevision)
    Types: features/news/types/collaboration.ts
    Diff UI: features/news/lib/revision-diff.ts + features/news/components/revision-hunk-preview.tsx (ported from file-registry-viewer LCS)

    Pending revision accept flow

    Public sanitize

    sanitizeNewsHtml strips scripts/handlers and allowlists tags including iframe (YouTube nocookie + Rumble hosts), ring-embed, and ring-mood-player. Used on /news/[slug] and /[username]/[slug].

    ACL / invite scaffolding (not full product)

    PieceStatus
    lib/database/schema/news-collaboration.sqlConceptual schema notes
    GET/POST /api/news/[id]/collaborators501 stub
    GET/POST /api/news/collaboration/invite/[token]501 stub
    Roles owner|admin|editor|reviewer|viewerTypes only (Zemna Phase 4 map)

    CRDT collab (gated, not wired into NewsEditor)

    features/news/lib/news-collab-gate.ts + existing hooks/use-collaboration.ts / Tunnel Yjs provider. Channel convention: collab:news:{articleId}. Requires NEXT_PUBLIC_COLLAB_ENABLED=true and native WSS — TipTap Collaboration extensions not mounted on news yet. See Real Time.

    Core news service (unchanged kingdom)

    features/news/services/news-service.ts — createNewsArticle, updateNewsArticle, getMyArticles, getUserArticleStats, recordArticlePageView, etc. Promotion and Telegram flows: News Kingdom.

    Real Time

    Depends-on: Tunnel / future CRDT collab channels for news.

    Admin Wiki

    See-also: Admin Wiki is Markdown + wikilinks in Postgres — not TipTap news HTML.

    Propose revision on publishedMember+ (not needed for the author — they Edit)
    Accept / reject amendmentsArticle author or platform admin
    Invite co-editors by emailScaffolded APIs only — not a full UI yet
    features/news/components/article-editor.tsx
    Form shell; mounts TipTapNewsEditor
    features/news/components/editor/rich-text-editor.tsxRe-exports TipTapNewsEditor (legacy name)

    Embed preview (authenticated): POST /api/news/embed-preview with { url } — OG title/description/image when fetch succeeds.

    Autosave: debounced PUT /api/news/[id] with { content } (HTML). Storage remains HTML on news.content for public render compatibility; TipTap JSON is editor-internal.

    Slash command groups

    • basic — H1–H3, lists, quote, code block, divider
    • media — image upload, AI generate image, embed URL
    • insert — link

    Dependency: @tiptap/suggestion (TipTap 3.x).

    My News & create routes

    Route helperPath
    ROUTES.MY_NEWS/my-news
    ROUTES.NEWS_CREATE/news/create
    ROUTES.NEWS_REVISE(slug)/news/[slug]/revise
    ROUTES.MY_NEWS_AMENDMENTS(articleId)/my-news/[articleId]/amendments
    ROUTES.MY_NEWS_AMENDMENT_PREVIEW(...)/my-news/[articleId]/amendments/[revisionId]

    UI: app/[locale]/(protected)/my-news/, components/wrappers/my-news-wrapper.tsx.

    Pending revisions API

    Collection: news_revisions via DatabaseService createDoc / queryDocs / updateDoc.

    MethodRouteBehavior
    GET/api/news/[id]/revisions?status=pending-revisionList
    POST/api/news/[id]/revisionsBody { proposedContent } → status pending-revision
    GET/api/news/revisions/[revisionId]One revision
    PATCH/api/news/revisions/[revisionId]{ action: 'accept' | 'reject' } — accept writes proposedContent onto the article

    Service: features/news/services/revision-service.ts
    Permissions: features/news/lib/news-collaboration-permissions.ts (canProposeRevision, canResolveRevision)
    Types: features/news/types/collaboration.ts
    Diff UI: features/news/lib/revision-diff.ts + features/news/components/revision-hunk-preview.tsx (ported from file-registry-viewer LCS)

    Pending revision accept flow

    Public sanitize

    sanitizeNewsHtml strips scripts/handlers and allowlists tags including iframe (YouTube nocookie + Rumble hosts), ring-embed, and ring-mood-player. Used on /news/[slug] and /[username]/[slug].

    ACL / invite scaffolding (not full product)

    PieceStatus
    lib/database/schema/news-collaboration.sqlConceptual schema notes
    GET/POST /api/news/[id]/collaborators501 stub
    GET/POST /api/news/collaboration/invite/[token]501 stub
    Roles owner|admin|editor|reviewer|viewerTypes only (Zemna Phase 4 map)

    CRDT collab (gated, not wired into NewsEditor)

    features/news/lib/news-collab-gate.ts + existing hooks/use-collaboration.ts / Tunnel Yjs provider. Channel convention: collab:news:{articleId}. Requires NEXT_PUBLIC_COLLAB_ENABLED=true and native WSS — TipTap Collaboration extensions not mounted on news yet. See Real Time.

    Core news service (unchanged kingdom)

    features/news/services/news-service.ts — createNewsArticle, updateNewsArticle, getMyArticles, getUserArticleStats, recordArticlePageView, etc. Promotion and Telegram flows: News Kingdom.

    Real Time

    Depends-on: Tunnel / future CRDT collab channels for news.

    Admin Wiki

    See-also: Admin Wiki is Markdown + wikilinks in Postgres — not TipTap news HTML.