---
title: "Mitglieder-Blogs"
description: "Jedes Mitglied mit Benutzernamen bekommt einen persönlichen Publikationsbereich unter /{username}/{slug}. Rollenbasiertes Schreiben, der Arbeitsbereich /my-news, Autorenlisten, Überarbeitungsvorschläge und bezahlte Promotion in den Haupt-Feed über News Kingdom. Migrationshinweis zu den abgeschafften URLs /blog/{username}."
locale: "de"
---
# Mitglieder-Blogs

> **Info**
> **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](/docs/architecture/news-kingdom.md).

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

### For founders

## 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](/docs/architecture/news-kingdom.md)** — Bewertung, bezahlte Promotion und Freigabe in Telegram für den Haupt-Feed.

  
- **[Öffentliches Profil](/docs/features/public-profile.md)** — Die Seite `/{username}` neben den Artikeln des Mitglieds.

  
- **[Reservierung von Benutzernamen](/docs/features/username-reservation.md)** — Handles bestimmen die Blog-URLs, deshalb sind reservierte Namen wichtig.

  
- **[Abonnements](/docs/features/subscriptions.md)** — 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

| Bereich | Pfad |
|---------|------|
| Einen neuen Artikel schreiben | `/news/create` |
| Verwalten, teilen und befördern | `/my-news` |
| Öffentlicher Artikel | `/{username}/{slug}` |
| Alle Artikel eines Autors | `/news/author/{username}` |

### For developers

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

| Bereich | Pfad |
|---------|------|
| Artikelseite | `app/[locale]/[username]/[slug]/page.tsx` |
| Profilseite | `app/[locale]/[username]/page.tsx` |
| Autorenliste | `app/[locale]/news/author/[username]/page.tsx` (bis zu 50 veröffentlichte, über `getMyArticles`) |
| Editor für Mitglieder | `app/[locale]/(protected)/news/create/page.tsx` (`ArticleEditor audience="member"`) |
| Arbeitsbereich für Mitglieder | `app/[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 | `lib/blog/blog-path.ts` (`normalizeBlogHandle`, `profileArticlePathname`, `profileArticleHref`) |
| Absolute URL | `lib/site-branding.ts` `localeBlogArticleUrl(locale, username, slug)` |
| Speicher-Action | `app/_actions/news.ts` |
| Berechtigungen | `features/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'`.

> **Warning**
> `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

| Aktion | Regel |
|--------|------|
| Anlegen | `canCreateNewsArticle`: Rolle `member` oder höher, Plattform-Admin oder `confidential` |
| Bearbeiten oder löschen | Plattform-Admin oder der Autor des Artikels |
| Sichtbarkeit `site-wide` | Nur Plattform-Admins. Mitglieder erreichen sie über die Freigabe einer Promotion |
| Sichtbarkeit `confidential` | Nur Nutzer mit vertraulichem Zugriff |
| `featured` | Wird beim Speichern für Nicht-Admins auf `false` gesetzt |
| Eine Überarbeitung vorschlagen | Angemeldeter Nutzer, der nicht der Autor ist, mit `canProposeRevision`, bei veröffentlichten Artikeln |

## Schreiben, veröffentlichen, befördern

**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`).

**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.

**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](/docs/architecture/news-kingdom.md).

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

## 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

  
- [architecture/news-kingdom](/docs/architecture/news-kingdom.md) — Nächster Schritt: was passiert, nachdem ein Autor eine Promotion auf die Startseite beantragt hat.

  
- [features/news](/docs/features/news.md) — Voraussetzung: das News-Modul, das Mitgliederartikel speichert und darstellt.

  
- [features/public-profile](/docs/features/public-profile.md) — Gleicher Ablauf: die Seite /{username}, die das Handle des Mitglieds teilt.

  
- [features/username-reservation](/docs/features/username-reservation.md) — Abhängigkeit: wie Handles gewählt und geschützt werden, die über die Blog-URLs entscheiden.
