- Add Production API endpoints for frontend integration - Add Newsletter API documentation with Double Opt-In flow - Add FAQs, Team, Services, Timelines, Workflows collections - Add FAQ, Team, Services blocks documentation - Update all URLs to production (cms.c2sgmbh.de) - Add Block overview table - Add Tenant-IDs reference - Update file structure overview - Add changelog entries for v1.1 and v1.2 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
14 KiB
Universal Features - Dokumentation
Letzte Aktualisierung: 18. Dezember 2025
Übersicht
Die Universal Features erweitern das Payload CMS um wiederverwendbare Collections und Blocks für Blog, News, Testimonials, Newsletter, FAQ, Team und Prozess-Darstellungen. Alle Features sind Multi-Tenant-fähig.
Wichtig: Frontends verwenden die Production-API (cms.c2sgmbh.de).
API-Endpoints für Frontend
Collections
| Collection | Endpoint | Beschreibung |
|---|---|---|
| Posts | GET /api/posts |
Blog, News, Presse |
| Testimonials | GET /api/testimonials |
Kundenbewertungen |
| FAQs | GET /api/faqs |
FAQ-Einträge |
| Team | GET /api/team |
Team-Mitglieder |
| Services | GET /api/services |
Leistungen |
| Timelines | GET /api/timelines |
Chronologische Events |
| Workflows | GET /api/workflows |
Prozess-Darstellungen |
Beispiel: Posts laden
// Featured Blog-Posts für Tenant C2S laden
const posts = await fetch(
'https://cms.c2sgmbh.de/api/posts?where[tenant][equals]=4&where[type][equals]=blog&where[isFeatured][equals]=true&locale=de&limit=6'
).then(r => r.json())
Newsletter API
| Endpoint | Methode | Beschreibung |
|---|---|---|
/api/newsletter/subscribe |
POST | Newsletter-Anmeldung |
/api/newsletter/confirm |
GET/POST | Double Opt-In Bestätigung |
/api/newsletter/unsubscribe |
GET/POST | Abmeldung |
// Newsletter-Anmeldung
const response = await fetch('https://cms.c2sgmbh.de/api/newsletter/subscribe', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
email: 'user@example.com',
firstName: 'Max',
tenantId: 4,
source: 'footer'
})
})
Collections
1. Posts Collection
Pfad: src/collections/Posts.ts
Slug: posts
Admin-Gruppe: Content
Die Posts Collection dient zur Verwaltung von Blog-Artikeln, News, Pressemitteilungen und Ankündigungen.
Felder
| Feld | Typ | Beschreibung | Pflicht |
|---|---|---|---|
title |
Text | Titel des Beitrags | Ja |
slug |
Text | URL-Pfad (unique) | Ja |
type |
Select | Art des Beitrags | Ja |
isFeatured |
Checkbox | Hervorgehobener Beitrag | Nein |
excerpt |
Textarea | Kurzfassung (max. 300 Zeichen) | Nein |
featuredImage |
Upload | Beitragsbild | Nein |
content |
RichText | Hauptinhalt | Ja |
categories |
Relationship | Kategorien (hasMany) | Nein |
author |
Text | Autorname | Nein |
status |
Select | draft/published/archived | Nein |
publishedAt |
Date | Veröffentlichungsdatum | Nein |
meta |
Group | SEO-Einstellungen | Nein |
Post-Typen
blog- Blog-Artikel (Standard)news- News/Aktuellespress- Pressemitteilungannouncement- Ankündigung
2. Testimonials Collection
Pfad: src/collections/Testimonials.ts
Slug: testimonials
Admin-Gruppe: Content
Kundenstimmen und Bewertungen für Referenz-Seiten.
Felder
| Feld | Typ | Beschreibung | Pflicht |
|---|---|---|---|
quote |
Textarea | Zitat/Bewertungstext | Ja |
author |
Text | Name des Kunden | Ja |
role |
Text | Position/Rolle | Nein |
company |
Text | Unternehmen | Nein |
image |
Upload | Portrait-Foto | Nein |
rating |
Number | Bewertung 1-5 Sterne | Nein |
source |
Text | Quelle (z.B. "Google Reviews") | Nein |
sourceUrl |
Text | Link zur Original-Bewertung | Nein |
date |
Date | Datum der Bewertung | Nein |
isActive |
Checkbox | Sichtbarkeit | Nein |
order |
Number | Sortierung | Nein |
3. Newsletter Subscribers Collection
Pfad: src/collections/NewsletterSubscribers.ts
Slug: newsletter-subscribers
Admin-Gruppe: Marketing
DSGVO-konforme Speicherung von Newsletter-Anmeldungen mit Double Opt-In.
Felder
| Feld | Typ | Beschreibung | Pflicht |
|---|---|---|---|
email |
E-Mail-Adresse | Ja | |
firstName |
Text | Vorname | Nein |
lastName |
Text | Nachname | Nein |
status |
Select | Anmeldestatus | Ja |
interests |
Select (hasMany) | Interessengebiete | Nein |
source |
Text | Anmeldequelle | Nein |
subscribedAt |
Date | Anmeldedatum (auto) | Nein |
confirmedAt |
Date | Bestätigungsdatum (auto) | Nein |
unsubscribedAt |
Date | Abmeldedatum (auto) | Nein |
confirmationToken |
Text | Token für Double Opt-In (auto) | Nein |
ipAddress |
Text | IP-Adresse (DSGVO) | Nein |
userAgent |
Text | Browser-Info | Nein |
Double Opt-In Flow
- User meldet sich an → Status:
pending, Token generiert - E-Mail mit Bestätigungs-Link wird automatisch gesendet
- User klickt Link → Status:
confirmed - Willkommens-E-Mail wird gesendet
- Abmeldung jederzeit über Link möglich
Status-Werte
pending- Ausstehend (Double Opt-In)confirmed- Bestätigtunsubscribed- Abgemeldetbounced- E-Mail nicht zustellbar
4. FAQs Collection
Pfad: src/collections/FAQs.ts
Slug: faqs
Admin-Gruppe: Content
Häufig gestellte Fragen mit Kategorisierung.
Felder
| Feld | Typ | Beschreibung | Pflicht |
|---|---|---|---|
question |
Text | Frage | Ja |
answer |
RichText | Antwort | Ja |
category |
Text | Kategorie | Nein |
order |
Number | Sortierung | Nein |
isActive |
Checkbox | Sichtbarkeit | Nein |
5. Team Collection
Pfad: src/collections/Team.ts
Slug: team
Admin-Gruppe: Content
Team-Mitglieder und Mitarbeiter.
Felder
| Feld | Typ | Beschreibung | Pflicht |
|---|---|---|---|
name |
Text | Name | Ja |
role |
Text | Position/Rolle | Nein |
image |
Upload | Portrait-Foto | Nein |
bio |
Textarea | Kurzbiografie | Nein |
email |
E-Mail-Adresse | Nein | |
phone |
Text | Telefon | Nein |
socialLinks |
Array | Social Media Links | Nein |
order |
Number | Sortierung | Nein |
isActive |
Checkbox | Sichtbarkeit | Nein |
6. Services Collection
Pfad: src/collections/Services.ts
Slug: services
Admin-Gruppe: Content
Leistungen und Dienstleistungen.
Felder
| Feld | Typ | Beschreibung | Pflicht |
|---|---|---|---|
title |
Text | Leistungsname | Ja |
slug |
Text | URL-Pfad | Ja |
excerpt |
Textarea | Kurzbeschreibung | Nein |
content |
RichText | Detailbeschreibung | Nein |
icon |
Text | Icon-Name | Nein |
image |
Upload | Bild | Nein |
category |
Relationship | Service-Kategorie | Nein |
order |
Number | Sortierung | Nein |
7. Timelines Collection
Pfad: src/collections/Timelines.ts
Slug: timelines
Admin-Gruppe: Content
Chronologische Events für Geschichte, Meilensteine, Releases.
API
// Timeline laden
fetch('https://cms.c2sgmbh.de/api/timelines?tenant=4&slug=company-history&locale=de')
Timeline-Typen
history- Unternehmensgeschichtemilestones- Projektmeilensteinereleases- Produkt-Releasescareer- Karriere/Lebenslaufevents- Ereignisseprocess- Prozess/Ablauf
8. Workflows Collection
Pfad: src/collections/Workflows.ts
Slug: workflows
Admin-Gruppe: Content
Komplexe Prozesse mit Phasen, Abhängigkeiten und Status-Tracking.
API
// Workflow laden
fetch('https://cms.c2sgmbh.de/api/workflows?tenant=4&type=project&locale=de')
Workflow-Typen
project- Projektabläufebusiness- Geschäftsprozesseapproval- Genehmigungs-Workflowsonboarding- Mitarbeiter-/Kundeneinführungsupport- Support/Service-Prozessedevelopment- Entwicklungsprozesse
Blocks
Alle Blocks können in der Pages Collection verwendet werden.
Block-Übersicht
| Block | Slug | Beschreibung |
|---|---|---|
| Posts List | posts-list-block |
Blog/News-Liste |
| Testimonials | testimonials-block |
Kundenstimmen |
| Newsletter | newsletter-block |
Anmeldeformular |
| Process Steps | process-steps-block |
Prozess-Schritte |
| Timeline | timeline-block |
Chronologie |
| FAQ | faq-block |
FAQ-Akkordeon |
| Team | team-block |
Team-Mitglieder |
| Services | services-block |
Leistungen |
1. Posts List Block
Slug: posts-list-block
Zeigt eine Liste von Blog-Artikeln, News oder anderen Post-Typen an.
Konfigurationsoptionen
| Option | Typ | Standard | Beschreibung |
|---|---|---|---|
title |
Text | - | Überschrift |
subtitle |
Text | - | Untertitel |
postType |
Select | blog | Beitragstyp-Filter |
layout |
Select | grid | Darstellung |
columns |
Select | 3 | Spaltenanzahl (bei Grid) |
limit |
Number | 6 | Anzahl Beiträge |
showFeaturedOnly |
Checkbox | false | Nur hervorgehobene |
filterByCategory |
Relationship | - | Kategorie-Filter |
showExcerpt |
Checkbox | true | Kurzfassung anzeigen |
showDate |
Checkbox | true | Datum anzeigen |
showAuthor |
Checkbox | false | Autor anzeigen |
showCategory |
Checkbox | true | Kategorie anzeigen |
showPagination |
Checkbox | false | Pagination |
showReadMore |
Checkbox | true | "Alle anzeigen" Link |
backgroundColor |
Select | white | Hintergrundfarbe |
Layout-Optionen
grid- Karten im Gridlist- Listenansichtfeatured- Featured + Gridcompact- Kompakt (für Sidebar)masonry- Masonry-Layout
2. Testimonials Block
Slug: testimonials-block
Zeigt Kundenstimmen aus der Testimonials Collection.
Layout-Optionen
slider- Karussellgrid- Karten im Gridsingle- Einzeln (Featured)masonry- Masonry-Layoutlist- Listenansicht
3. Newsletter Block
Slug: newsletter-block
Anmeldeformular für Newsletter mit DSGVO-Hinweis.
Layout-Optionen
inline- Eingabe + Button nebeneinanderstacked- Untereinanderwith-image- Mit Bild (50/50)minimal- Nur Inputcard- Karten-Design
4. FAQ Block
Slug: faq-block
FAQ-Akkordeon mit Schema.org Markup.
Konfigurationsoptionen
| Option | Typ | Beschreibung |
|---|---|---|
title |
Text | Überschrift |
subtitle |
Text | Untertitel |
displayMode |
Select | all / selected / byCategory |
selectedFaqs |
Relationship | Handverlesene FAQs |
filterCategory |
Text | Kategorie-Filter |
layout |
Select | accordion / list / grid |
expandFirst |
Checkbox | Erste FAQ offen |
showSchema |
Checkbox | JSON-LD generieren |
5. Team Block
Slug: team-block
Team-Mitglieder aus der Team Collection.
Layout-Optionen
grid- Karten im Gridlist- Listenansichtcarousel- Karussellcompact- Kompakt
6. Services Block
Slug: services-block
Leistungen aus der Services Collection.
Layout-Optionen
grid- Karten im Gridlist- Listenansicht mit Detailsicons- Icon-Gridtabs- Tab-Navigation
Multi-Tenant Konfiguration
Alle Collections sind für Multi-Tenant konfiguriert:
// payload.config.ts
multiTenantPlugin({
tenantsSlug: 'tenants',
collections: {
posts: {},
testimonials: {},
'newsletter-subscribers': {},
faqs: {},
team: {},
services: {},
timelines: {},
workflows: {},
// ... weitere Collections
},
})
Tenant-Zuordnung
Jedes Dokument enthält ein tenant-Feld. Die Access-Control sorgt für Isolation:
- Authentifizierte Admins: Sehen alle Dokumente
- Anonyme Requests: Nur Dokumente des passenden Tenants
Tenant-IDs
| ID | Name | Slug |
|---|---|---|
| 1 | porwoll.de | porwoll |
| 4 | Complex Care Solutions GmbH | c2s |
| 5 | Gunshin | gunshin |
Dateien-Übersicht
src/
├── collections/
│ ├── Posts.ts
│ ├── Categories.ts
│ ├── Testimonials.ts
│ ├── NewsletterSubscribers.ts
│ ├── FAQs.ts
│ ├── Team.ts
│ ├── Services.ts
│ ├── ServiceCategories.ts
│ ├── Timelines.ts
│ └── Workflows.ts
├── blocks/
│ ├── PostsListBlock.ts
│ ├── TestimonialsBlock.ts
│ ├── NewsletterBlock.ts
│ ├── ProcessStepsBlock.ts
│ ├── TimelineBlock.ts
│ ├── FAQBlock.ts
│ ├── TeamBlock.ts
│ ├── ServicesBlock.ts
│ └── index.ts
├── lib/
│ ├── tenantAccess.ts
│ └── email/
│ ├── newsletter-service.ts
│ └── newsletter-templates.ts
├── hooks/
│ └── sendNewsletterConfirmation.ts
└── app/(payload)/api/newsletter/
├── subscribe/route.ts
├── confirm/route.ts
└── unsubscribe/route.ts
URLs
Production (für Frontends)
| Resource | URL |
|---|---|
| Posts API | https://cms.c2sgmbh.de/api/posts |
| Testimonials API | https://cms.c2sgmbh.de/api/testimonials |
| FAQs API | https://cms.c2sgmbh.de/api/faqs |
| Team API | https://cms.c2sgmbh.de/api/team |
| Services API | https://cms.c2sgmbh.de/api/services |
| Timelines API | https://cms.c2sgmbh.de/api/timelines |
| Workflows API | https://cms.c2sgmbh.de/api/workflows |
| Newsletter Subscribe | https://cms.c2sgmbh.de/api/newsletter/subscribe |
Development
| Resource | URL |
|---|---|
| API Base | https://pl.porwoll.tech/api |
| Admin Panel | https://pl.porwoll.tech/admin |
Changelog
Version 1.2 (18.12.2025)
- Dokumentation auf Production-URLs aktualisiert
- API-Endpoints für Frontend hinzugefügt
- Newsletter Double Opt-In Flow dokumentiert
- Timelines und Workflows Collections hinzugefügt
- FAQ, Team, Services Blocks dokumentiert
Version 1.1 (14.12.2025)
- Timelines Collection für chronologische Darstellungen
- Workflows Collection für Prozesse
- FAQs Collection mit Kategorisierung
- Team Collection mit Social Links
- Services Collection mit Kategorien
Version 1.0 (30.11.2025)
- Posts Collection um
type,isFeatured,excerpterweitert - Testimonials Collection erstellt
- NewsletterSubscribers Collection erstellt (DSGVO-konform)
- 5 neue Blocks für Pages implementiert
- Multi-Tenant Integration für alle Collections
Letzte Aktualisierung: 18. Dezember 2025