OpportunitiesEntities
Docs
    Ring Platform

    Dezentralisierte selbstbauende Zukunft

    Anmelden
    Entities
    Opportunities
    Store
    Docs
    Plattformkonzepte
    RING ÖkonomieSonoratek LLCGlobaler ImpactKI trifft Web3
    Loslegen
    SchnellstartKalkulatorRoadmap
    Datenschutz|Kontakt
    v1.104.26|Sonoratek LLC

    Documentation

    Konzepte, Nutzen und typische Clone-Szenarien — weniger Code.

    Erste Schritte
    Voraussetzungen
    Installation
    Validierung des ersten Erfolgs
    Nächste Schritte
    Funktionen
    Mitglieder-Blogs
    Anpassung
    Ringization playbook
    Deployment
    Selbst gehostetes Deployment
    Architektur
    News-Kingdom-Architektur
    Entwicklung
    OSS und Enterprise

    Schnelleinstieg (CTOs · Auditoren · Agenten)

    Willkommen — Mission & Zielgruppen
    Schnellreferenz
    Erste Schritte
    Architektur & Auth.js
    Backend-Modi & Datenbanken (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Sicherheit & Compliance
    ringdom.org — LegioX-Homebase
    Quellcode — MIT-Lizenz (GitHub)

    Documentation

    Konzepte, Nutzen und typische Clone-Szenarien — weniger Code.

    Erste Schritte
    Voraussetzungen
    Installation
    Validierung des ersten Erfolgs
    Nächste Schritte
    Funktionen
    Mitglieder-Blogs
    Anpassung
    Ringization playbook
    Deployment
    Selbst gehostetes Deployment
    Architektur
    News-Kingdom-Architektur
    Entwicklung
    OSS und Enterprise

    Schnelleinstieg (CTOs · Auditoren · Agenten)

    Willkommen — Mission & Zielgruppen
    Schnellreferenz
    Erste Schritte
    Architektur & Auth.js
    Backend-Modi & Datenbanken (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Sicherheit & Compliance
    ringdom.org — LegioX-Homebase
    Quellcode — MIT-Lizenz (GitHub)

    Documentation

    Konzepte, Nutzen und typische Clone-Szenarien — weniger Code.

    Erste Schritte
    Voraussetzungen
    Installation
    Validierung des ersten Erfolgs
    Nächste Schritte
    Funktionen
    Mitglieder-Blogs
    Anpassung
    Ringization playbook
    Deployment
    Selbst gehostetes Deployment
    Architektur
    News-Kingdom-Architektur
    Entwicklung
    OSS und Enterprise

    Schnelleinstieg (CTOs · Auditoren · Agenten)

    Willkommen — Mission & Zielgruppen
    Schnellreferenz
    Erste Schritte
    Architektur & Auth.js
    Backend-Modi & Datenbanken (DB_BACKEND_MODE)
    Self-hosted
    Ring MCP Tools
    Ring MCP Server
    Token economics
    Token launch jurisdictions
    Deploy (Docker · k8s)
    Sicherheit & Compliance
    ringdom.org — LegioX-Homebase
    Quellcode — MIT-Lizenz (GitHub)
    Ring Logo

    Loading documentation...

    Preparing Ring content

    Ring Logo

    Loading documentation...

    Preparing Ring content

    Ring Logo

    Loading documentation...

    Preparing Ring content

    Mitglieder-Blogs

    URL-Änderung: Artikel von Mitgliedern liegen jetzt unter /{username}/{slug}, direkt neben dem Profil des Mitglieds unter /{username}. Das ältere Muster /blog/{username}/{slug} gibt es nicht mehr, und eine Route /blog existiert nicht. Nutze die Tabs Gründer / Entwickler in der Seitenleiste, um diese Seite zu filtern.

    Mitglieder-Blogs machen das News-Modul deines Klons zu einem Publikationsbereich für jedes Mitglied. Artikel werden in derselben Tabelle news gespeichert wie offizielle News, mit dem Handle des Autors versehen und unter der eigenen URL des Autors ausgeliefert. Wenn ein Autor in den Haupt-Feed will, beantragt er eine Promotion, und der Artikel gelangt in die Pipeline von News Kingdom.

    Frühere Dokumentation sagteAktuelles Verhalten
    /blog/{username} und /blog/{username}/{slug}/{username} (Profil) und /{username}/{slug} (Artikel)
    Eine bezahlte Mitgliedschaft schaltet den Blog freiSchreiben erfordert die Rolle member oder höher. Ein bezahltes Mitgliedschafts-Upgrade verleiht member
    Das Profil zeigt einen Blog-Link und ein Telegram-BadgeNicht auf der aktuellen Profilseite. Autoren teilen ihren Link aus /my-news
    Ohne Mitgliedschaft liefert die Blog-Route 404Ein Artikel liefert 404, wenn er nicht veröffentlicht ist, Handle oder Slug nicht passen oder die Sprache abweicht

    Warum das für deinen Klon wichtig ist

    • Mitglieder werden zu Publizisten. Jedes zahlende Mitglied bekommt einen persönlichen Bereich mit einer sauberen, teilbaren URL unter deiner Domain.
    • Eine Identität. Derselbe Benutzername trägt Profil, Artikel und Autorenliste.
    • Ein Content-Funnel unter deiner Kontrolle. Gute Beiträge können gegen eine Gebühr auf deine Startseite befördert werden. Jeden davon gibst du frei.
    • Leser helfen, Beiträge zu verbessern. Andere Mitglieder können Überarbeitungen vorschlagen. Der Autor entscheidet, was er annimmt.

    News Kingdom

    Bewertung, bezahlte Promotion und Freigabe in Telegram für den Haupt-Feed.

    Öffentliches Profil

    Die Seite /{username} neben den Artikeln des Mitglieds.

    Reservierung von Benutzernamen

    Routen und Module (geprüft in ring/web)

    BereichPfad
    Artikelseiteapp/[locale]/[username]/[slug]/page.tsx
    Profilseiteapp/[locale]/[username]/page.tsx
    Autorenlisteapp/[locale]/news/author/[username]/page.tsx (bis zu 50 veröffentlichte, über getMyArticles)
    Editor für Mitgliederapp/[locale]/(protected)/news/create/page.tsx (ArticleEditor audience="member")
    Arbeitsbereich für Mitgliederapp/[locale]/(protected)/my-news/ mit components/layout/rails/my-news-rail.tsx
    Posteingang für Änderungsvorschläge/my-news/{articleId}/amendments (ROUTES.MY_NEWS_AMENDMENTS)
    Helfer für Handles und Pfade (, , )

    Häufige Fragen

    Migration

    Funktionieren alte /blog-Links noch?

    Nein. In ring/web gibt es weder eine Route /blog noch eine Weiterleitung. Aktualisiere geteilte Links auf /{username}/{slug}.

    Auswirkungen

    Können Leser Mitgliederartikel als Lesezeichen speichern?

    Favoriten laufen über GET und POST /api/user/favorites mit dem Hook useContentFavorite. Dieser Hook ist in der News-Artikelansicht (components/wrappers/news-article-wrapper.tsx) eingebunden, nicht auf der Seite /{username}/{slug}.

    Bekannte Lücken

    Verwandte Dokumentation

    Related documentation

    News Kingdom architecture

    Nächster Schritt: was passiert, nachdem ein Autor eine Promotion auf die Startseite beantragt hat.

    News Module

    Voraussetzung: das News-Modul, das Mitgliederartikel speichert und darstellt.

    Public Profile Pages

    Gleicher Ablauf: die Seite /{username}, die das Handle des Mitglieds teilt.

    Username Reservation System

    Abhängigkeit: wie Handles gewählt und geschützt werden, die über die Blog-URLs entscheiden.

    1. Docs
    2. /Funktionen
    3. /Mitglieder-Blogs

    Aktualisiert 1. Okt. 20265 Min. Anhören

    Mitglieder-Blogs

    URL-Änderung: Artikel von Mitgliedern liegen jetzt unter /{username}/{slug}, direkt neben dem Profil des Mitglieds unter /{username}. Das ältere Muster /blog/{username}/{slug} gibt es nicht mehr, und eine Route /blog existiert nicht. Nutze die Tabs Gründer / Entwickler in der Seitenleiste, um diese Seite zu filtern.

    Mitglieder-Blogs machen das News-Modul deines Klons zu einem Publikationsbereich für jedes Mitglied. Artikel werden in derselben Tabelle news gespeichert wie offizielle News, mit dem Handle des Autors versehen und unter der eigenen URL des Autors ausgeliefert. Wenn ein Autor in den Haupt-Feed will, beantragt er eine Promotion, und der Artikel gelangt in die Pipeline von News Kingdom.

    Frühere Dokumentation sagteAktuelles Verhalten
    /blog/{username} und /blog/{username}/{slug}/{username} (Profil) und /{username}/{slug} (Artikel)
    Eine bezahlte Mitgliedschaft schaltet den Blog freiSchreiben erfordert die Rolle member oder höher. Ein bezahltes Mitgliedschafts-Upgrade verleiht member
    Das Profil zeigt einen Blog-Link und ein Telegram-BadgeNicht auf der aktuellen Profilseite. Autoren teilen ihren Link aus /my-news
    Ohne Mitgliedschaft liefert die Blog-Route 404Ein Artikel liefert 404, wenn er nicht veröffentlicht ist, Handle oder Slug nicht passen oder die Sprache abweicht

    Warum das für deinen Klon wichtig ist

    • Mitglieder werden zu Publizisten. Jedes zahlende Mitglied bekommt einen persönlichen Bereich mit einer sauberen, teilbaren URL unter deiner Domain.
    • Eine Identität. Derselbe Benutzername trägt Profil, Artikel und Autorenliste.
    • Ein Content-Funnel unter deiner Kontrolle. Gute Beiträge können gegen eine Gebühr auf deine Startseite befördert werden. Jeden davon gibst du frei.
    • Leser helfen, Beiträge zu verbessern. Andere Mitglieder können Überarbeitungen vorschlagen. Der Autor entscheidet, was er annimmt.

    News Kingdom

    Bewertung, bezahlte Promotion und Freigabe in Telegram für den Haupt-Feed.

    Öffentliches Profil

    Die Seite /{username} neben den Artikeln des Mitglieds.

    Reservierung von Benutzernamen

    Routen und Module (geprüft in ring/web)

    BereichPfad
    Artikelseiteapp/[locale]/[username]/[slug]/page.tsx
    Profilseiteapp/[locale]/[username]/page.tsx
    Autorenlisteapp/[locale]/news/author/[username]/page.tsx (bis zu 50 veröffentlichte, über getMyArticles)
    Editor für Mitgliederapp/[locale]/(protected)/news/create/page.tsx (ArticleEditor audience="member")
    Arbeitsbereich für Mitgliederapp/[locale]/(protected)/my-news/ mit components/layout/rails/my-news-rail.tsx
    Posteingang für Änderungsvorschläge/my-news/{articleId}/amendments (ROUTES.MY_NEWS_AMENDMENTS)
    Helfer für Handles und Pfade (, , )

    Häufige Fragen

    Migration

    Funktionieren alte /blog-Links noch?

    Nein. In ring/web gibt es weder eine Route /blog noch eine Weiterleitung. Aktualisiere geteilte Links auf /{username}/{slug}.

    Auswirkungen

    Können Leser Mitgliederartikel als Lesezeichen speichern?

    Favoriten laufen über GET und POST /api/user/favorites mit dem Hook useContentFavorite. Dieser Hook ist in der News-Artikelansicht (components/wrappers/news-article-wrapper.tsx) eingebunden, nicht auf der Seite /{username}/{slug}.

    Bekannte Lücken

    Verwandte Dokumentation

    Related documentation

    News Kingdom architecture

    Nächster Schritt: was passiert, nachdem ein Autor eine Promotion auf die Startseite beantragt hat.

    News Module

    Voraussetzung: das News-Modul, das Mitgliederartikel speichert und darstellt.

    Public Profile Pages

    Gleicher Ablauf: die Seite /{username}, die das Handle des Mitglieds teilt.

    Username Reservation System

    Abhängigkeit: wie Handles gewählt und geschützt werden, die über die Blog-URLs entscheiden.

    1. Docs
    2. /Funktionen
    3. /Mitglieder-Blogs

    Aktualisiert 1. Okt. 20265 Min. Anhören

    Mitglieder-Blogs

    URL-Änderung: Artikel von Mitgliedern liegen jetzt unter /{username}/{slug}, direkt neben dem Profil des Mitglieds unter /{username}. Das ältere Muster /blog/{username}/{slug} gibt es nicht mehr, und eine Route /blog existiert nicht. Nutze die Tabs Gründer / Entwickler in der Seitenleiste, um diese Seite zu filtern.

    Mitglieder-Blogs machen das News-Modul deines Klons zu einem Publikationsbereich für jedes Mitglied. Artikel werden in derselben Tabelle news gespeichert wie offizielle News, mit dem Handle des Autors versehen und unter der eigenen URL des Autors ausgeliefert. Wenn ein Autor in den Haupt-Feed will, beantragt er eine Promotion, und der Artikel gelangt in die Pipeline von News Kingdom.

    Frühere Dokumentation sagteAktuelles Verhalten
    /blog/{username} und /blog/{username}/{slug}/{username} (Profil) und /{username}/{slug} (Artikel)
    Eine bezahlte Mitgliedschaft schaltet den Blog freiSchreiben erfordert die Rolle member oder höher. Ein bezahltes Mitgliedschafts-Upgrade verleiht member
    Das Profil zeigt einen Blog-Link und ein Telegram-BadgeNicht auf der aktuellen Profilseite. Autoren teilen ihren Link aus /my-news
    Ohne Mitgliedschaft liefert die Blog-Route 404Ein Artikel liefert 404, wenn er nicht veröffentlicht ist, Handle oder Slug nicht passen oder die Sprache abweicht

    Warum das für deinen Klon wichtig ist

    • Mitglieder werden zu Publizisten. Jedes zahlende Mitglied bekommt einen persönlichen Bereich mit einer sauberen, teilbaren URL unter deiner Domain.
    • Eine Identität. Derselbe Benutzername trägt Profil, Artikel und Autorenliste.
    • Ein Content-Funnel unter deiner Kontrolle. Gute Beiträge können gegen eine Gebühr auf deine Startseite befördert werden. Jeden davon gibst du frei.
    • Leser helfen, Beiträge zu verbessern. Andere Mitglieder können Überarbeitungen vorschlagen. Der Autor entscheidet, was er annimmt.

    News Kingdom

    Bewertung, bezahlte Promotion und Freigabe in Telegram für den Haupt-Feed.

    Öffentliches Profil

    Die Seite /{username} neben den Artikeln des Mitglieds.

    Reservierung von Benutzernamen

    Routen und Module (geprüft in ring/web)

    BereichPfad
    Artikelseiteapp/[locale]/[username]/[slug]/page.tsx
    Profilseiteapp/[locale]/[username]/page.tsx
    Autorenlisteapp/[locale]/news/author/[username]/page.tsx (bis zu 50 veröffentlichte, über getMyArticles)
    Editor für Mitgliederapp/[locale]/(protected)/news/create/page.tsx (ArticleEditor audience="member")
    Arbeitsbereich für Mitgliederapp/[locale]/(protected)/my-news/ mit components/layout/rails/my-news-rail.tsx
    Posteingang für Änderungsvorschläge/my-news/{articleId}/amendments (ROUTES.MY_NEWS_AMENDMENTS)
    Helfer für Handles und Pfade (, , )

    Häufige Fragen

    Migration

    Funktionieren alte /blog-Links noch?

    Nein. In ring/web gibt es weder eine Route /blog noch eine Weiterleitung. Aktualisiere geteilte Links auf /{username}/{slug}.

    Auswirkungen

    Können Leser Mitgliederartikel als Lesezeichen speichern?

    Favoriten laufen über GET und POST /api/user/favorites mit dem Hook useContentFavorite. Dieser Hook ist in der News-Artikelansicht (components/wrappers/news-article-wrapper.tsx) eingebunden, nicht auf der Seite /{username}/{slug}.

    Bekannte Lücken

    Verwandte Dokumentation

    Related documentation

    News Kingdom architecture

    Nächster Schritt: was passiert, nachdem ein Autor eine Promotion auf die Startseite beantragt hat.

    News Module

    Voraussetzung: das News-Modul, das Mitgliederartikel speichert und darstellt.

    Public Profile Pages

    Gleicher Ablauf: die Seite /{username}, die das Handle des Mitglieds teilt.

    Username Reservation System

    Abhängigkeit: wie Handles gewählt und geschützt werden, die über die Blog-URLs entscheiden.

    1. Docs
    2. /Funktionen
    3. /Mitglieder-Blogs

    Aktualisiert 1. Okt. 20265 Min. Anhören

    Handles bestimmen die Blog-URLs, deshalb sind reservierte Namen wichtig.

    Abonnements

    Der bezahlte Weg, der einen Nutzer zur Rolle member befördert.

    Typische Szenarien

    1. Experten-Community. Mitglieder schreiben ausführliche Beiträge unter ihrem eigenen Handle, und die besten werden auf die Startseite befördert.
    2. Genossenschafts-Newsletter. Jeder Erzeuger führt einen Blog. Das Admin-Team wählt Storys für den Haupt-Feed aus.
    3. Anreiz zur Mitgliedschaft. Kostenlose Nutzer können lesen. Schreiben ist ein Vorteil der bezahlten Mitgliedschaft.

    Wo Mitglieder arbeiten

    BereichPfad
    Einen neuen Artikel schreiben/news/create
    Verwalten, teilen und befördern/my-news
    Öffentlicher Artikel/{username}/{slug}
    Alle Artikel eines Autors/news/author/{username}
    lib/blog/blog-path.ts
    normalizeBlogHandle
    profileArticlePathname
    profileArticleHref
    Absolute URLlib/site-branding.ts localeBlogArticleUrl(locale, username, slug)
    Speicher-Actionapp/_actions/news.ts
    Berechtigungenfeatures/news/lib/news-permissions.ts

    Wie ein Artikel aufgelöst wird

    Die Artikelseite sucht in news eine Zeile, die alle vier Filter erfüllt: blogUsername == normalizeBlogHandle(username), slug, locale und status == 'published'. Passt keine Zeile, ruft sie notFound() auf und die Metadaten fallen auf noindex zurück. Handles werden mit führendem @ gespeichert, daher sucht /en/alice/hello nach blogUsername: '@alice'.

    blogUsername wird nur beim Anlegen gesetzt und nur, wenn der Session-Nutzer einen Benutzernamen hat. Artikel, die geschrieben wurden, bevor der Autor einen Benutzernamen gewählt hat, bekommen nie ein Handle und lassen sich daher nicht unter /{username}/{slug} aufrufen. Für diesen Fall zeigt die Leiste in /my-news einen Hinweis zum Festlegen des Benutzernamens.

    Statische Routen wie /store, /news oder /about haben Vorrang vor dem dynamischen Segment [username]. Ein Benutzername, der einer statischen Route entspricht, kann keine Profil-URL besitzen.

    Berechtigungen

    AktionRegel
    AnlegencanCreateNewsArticle: Rolle member oder höher, Plattform-Admin oder confidential
    Bearbeiten oder löschenPlattform-Admin oder der Autor des Artikels
    Sichtbarkeit site-wideNur Plattform-Admins. Mitglieder erreichen sie über die Freigabe einer Promotion
    Sichtbarkeit confidentialNur Nutzer mit vertraulichem Zugriff
    featuredWird beim Speichern für Nicht-Admins auf false gesetzt
    Eine Überarbeitung vorschlagenAngemeldeter Nutzer, der nicht der Autor ist, mit canProposeRevision, bei veröffentlichten Artikeln

    Schreiben, veröffentlichen, befördern

    1. 1

      Anlegen

      Ein Mitglied öffnet /news/create. Beim Speichern schreibt app/_actions/news.ts den Artikel über createNewsArticle() mit blogUsername und erfasst den ersten Versions-Commit (lib/versioning).

    2. 2

      Veröffentlichen und teilen

      Setze status: 'published'. Die Leiste in /my-news erzeugt den öffentlichen Link aus ROUTES.PUBLIC_PROFILE(handle) und bietet einen Button zum Kopieren des Links.

    3. 3

      Befördern (optional)

      features/news/components/news-promotion-panel.tsx ruft POST /api/news/promotion/submit mit { articleId } auf. Nur der Autor darf einreichen. Bewertung, Zahlung und Freigabe beschreibt News Kingdom.

    Jeder Artikelaufruf wird von recordArticlePageView() innerhalb von after() gezählt, sodass die Zählung das Rendern nie blockiert.

    Handles bestimmen die Blog-URLs, deshalb sind reservierte Namen wichtig.

    Abonnements

    Der bezahlte Weg, der einen Nutzer zur Rolle member befördert.

    Typische Szenarien

    1. Experten-Community. Mitglieder schreiben ausführliche Beiträge unter ihrem eigenen Handle, und die besten werden auf die Startseite befördert.
    2. Genossenschafts-Newsletter. Jeder Erzeuger führt einen Blog. Das Admin-Team wählt Storys für den Haupt-Feed aus.
    3. Anreiz zur Mitgliedschaft. Kostenlose Nutzer können lesen. Schreiben ist ein Vorteil der bezahlten Mitgliedschaft.

    Wo Mitglieder arbeiten

    BereichPfad
    Einen neuen Artikel schreiben/news/create
    Verwalten, teilen und befördern/my-news
    Öffentlicher Artikel/{username}/{slug}
    Alle Artikel eines Autors/news/author/{username}
    lib/blog/blog-path.ts
    normalizeBlogHandle
    profileArticlePathname
    profileArticleHref
    Absolute URLlib/site-branding.ts localeBlogArticleUrl(locale, username, slug)
    Speicher-Actionapp/_actions/news.ts
    Berechtigungenfeatures/news/lib/news-permissions.ts

    Wie ein Artikel aufgelöst wird

    Die Artikelseite sucht in news eine Zeile, die alle vier Filter erfüllt: blogUsername == normalizeBlogHandle(username), slug, locale und status == 'published'. Passt keine Zeile, ruft sie notFound() auf und die Metadaten fallen auf noindex zurück. Handles werden mit führendem @ gespeichert, daher sucht /en/alice/hello nach blogUsername: '@alice'.

    blogUsername wird nur beim Anlegen gesetzt und nur, wenn der Session-Nutzer einen Benutzernamen hat. Artikel, die geschrieben wurden, bevor der Autor einen Benutzernamen gewählt hat, bekommen nie ein Handle und lassen sich daher nicht unter /{username}/{slug} aufrufen. Für diesen Fall zeigt die Leiste in /my-news einen Hinweis zum Festlegen des Benutzernamens.

    Statische Routen wie /store, /news oder /about haben Vorrang vor dem dynamischen Segment [username]. Ein Benutzername, der einer statischen Route entspricht, kann keine Profil-URL besitzen.

    Berechtigungen

    AktionRegel
    AnlegencanCreateNewsArticle: Rolle member oder höher, Plattform-Admin oder confidential
    Bearbeiten oder löschenPlattform-Admin oder der Autor des Artikels
    Sichtbarkeit site-wideNur Plattform-Admins. Mitglieder erreichen sie über die Freigabe einer Promotion
    Sichtbarkeit confidentialNur Nutzer mit vertraulichem Zugriff
    featuredWird beim Speichern für Nicht-Admins auf false gesetzt
    Eine Überarbeitung vorschlagenAngemeldeter Nutzer, der nicht der Autor ist, mit canProposeRevision, bei veröffentlichten Artikeln

    Schreiben, veröffentlichen, befördern

    1. 1

      Anlegen

      Ein Mitglied öffnet /news/create. Beim Speichern schreibt app/_actions/news.ts den Artikel über createNewsArticle() mit blogUsername und erfasst den ersten Versions-Commit (lib/versioning).

    2. 2

      Veröffentlichen und teilen

      Setze status: 'published'. Die Leiste in /my-news erzeugt den öffentlichen Link aus ROUTES.PUBLIC_PROFILE(handle) und bietet einen Button zum Kopieren des Links.

    3. 3

      Befördern (optional)

      features/news/components/news-promotion-panel.tsx ruft POST /api/news/promotion/submit mit { articleId } auf. Nur der Autor darf einreichen. Bewertung, Zahlung und Freigabe beschreibt News Kingdom.

    Jeder Artikelaufruf wird von recordArticlePageView() innerhalb von after() gezählt, sodass die Zählung das Rendern nie blockiert.

    Handles bestimmen die Blog-URLs, deshalb sind reservierte Namen wichtig.

    Abonnements

    Der bezahlte Weg, der einen Nutzer zur Rolle member befördert.

    Typische Szenarien

    1. Experten-Community. Mitglieder schreiben ausführliche Beiträge unter ihrem eigenen Handle, und die besten werden auf die Startseite befördert.
    2. Genossenschafts-Newsletter. Jeder Erzeuger führt einen Blog. Das Admin-Team wählt Storys für den Haupt-Feed aus.
    3. Anreiz zur Mitgliedschaft. Kostenlose Nutzer können lesen. Schreiben ist ein Vorteil der bezahlten Mitgliedschaft.

    Wo Mitglieder arbeiten

    BereichPfad
    Einen neuen Artikel schreiben/news/create
    Verwalten, teilen und befördern/my-news
    Öffentlicher Artikel/{username}/{slug}
    Alle Artikel eines Autors/news/author/{username}
    lib/blog/blog-path.ts
    normalizeBlogHandle
    profileArticlePathname
    profileArticleHref
    Absolute URLlib/site-branding.ts localeBlogArticleUrl(locale, username, slug)
    Speicher-Actionapp/_actions/news.ts
    Berechtigungenfeatures/news/lib/news-permissions.ts

    Wie ein Artikel aufgelöst wird

    Die Artikelseite sucht in news eine Zeile, die alle vier Filter erfüllt: blogUsername == normalizeBlogHandle(username), slug, locale und status == 'published'. Passt keine Zeile, ruft sie notFound() auf und die Metadaten fallen auf noindex zurück. Handles werden mit führendem @ gespeichert, daher sucht /en/alice/hello nach blogUsername: '@alice'.

    blogUsername wird nur beim Anlegen gesetzt und nur, wenn der Session-Nutzer einen Benutzernamen hat. Artikel, die geschrieben wurden, bevor der Autor einen Benutzernamen gewählt hat, bekommen nie ein Handle und lassen sich daher nicht unter /{username}/{slug} aufrufen. Für diesen Fall zeigt die Leiste in /my-news einen Hinweis zum Festlegen des Benutzernamens.

    Statische Routen wie /store, /news oder /about haben Vorrang vor dem dynamischen Segment [username]. Ein Benutzername, der einer statischen Route entspricht, kann keine Profil-URL besitzen.

    Berechtigungen

    AktionRegel
    AnlegencanCreateNewsArticle: Rolle member oder höher, Plattform-Admin oder confidential
    Bearbeiten oder löschenPlattform-Admin oder der Autor des Artikels
    Sichtbarkeit site-wideNur Plattform-Admins. Mitglieder erreichen sie über die Freigabe einer Promotion
    Sichtbarkeit confidentialNur Nutzer mit vertraulichem Zugriff
    featuredWird beim Speichern für Nicht-Admins auf false gesetzt
    Eine Überarbeitung vorschlagenAngemeldeter Nutzer, der nicht der Autor ist, mit canProposeRevision, bei veröffentlichten Artikeln

    Schreiben, veröffentlichen, befördern

    1. 1

      Anlegen

      Ein Mitglied öffnet /news/create. Beim Speichern schreibt app/_actions/news.ts den Artikel über createNewsArticle() mit blogUsername und erfasst den ersten Versions-Commit (lib/versioning).

    2. 2

      Veröffentlichen und teilen

      Setze status: 'published'. Die Leiste in /my-news erzeugt den öffentlichen Link aus ROUTES.PUBLIC_PROFILE(handle) und bietet einen Button zum Kopieren des Links.

    3. 3

      Befördern (optional)

      features/news/components/news-promotion-panel.tsx ruft POST /api/news/promotion/submit mit { articleId } auf. Nur der Autor darf einreichen. Bewertung, Zahlung und Freigabe beschreibt News Kingdom.

    Jeder Artikelaufruf wird von recordArticlePageView() innerhalb von after() gezählt, sodass die Zählung das Rendern nie blockiert.