mirror of
https://github.com/complexcaresolutions/cms.c2sgmbh.git
synced 2026-03-17 20:54:11 +00:00
- 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>
550 lines
14 KiB
Markdown
550 lines
14 KiB
Markdown
# 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
|
|
|
|
```typescript
|
|
// 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 |
|
|
|
|
```typescript
|
|
// 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/Aktuelles
|
|
- `press` - Pressemitteilung
|
|
- `announcement` - 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` | 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
|
|
|
|
1. User meldet sich an → Status: `pending`, Token generiert
|
|
2. E-Mail mit Bestätigungs-Link wird automatisch gesendet
|
|
3. User klickt Link → Status: `confirmed`
|
|
4. Willkommens-E-Mail wird gesendet
|
|
5. Abmeldung jederzeit über Link möglich
|
|
|
|
#### Status-Werte
|
|
|
|
- `pending` - Ausstehend (Double Opt-In)
|
|
- `confirmed` - Bestätigt
|
|
- `unsubscribed` - Abgemeldet
|
|
- `bounced` - 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` | 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
|
|
|
|
```typescript
|
|
// Timeline laden
|
|
fetch('https://cms.c2sgmbh.de/api/timelines?tenant=4&slug=company-history&locale=de')
|
|
```
|
|
|
|
#### Timeline-Typen
|
|
|
|
- `history` - Unternehmensgeschichte
|
|
- `milestones` - Projektmeilensteine
|
|
- `releases` - Produkt-Releases
|
|
- `career` - Karriere/Lebenslauf
|
|
- `events` - Ereignisse
|
|
- `process` - 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
|
|
|
|
```typescript
|
|
// Workflow laden
|
|
fetch('https://cms.c2sgmbh.de/api/workflows?tenant=4&type=project&locale=de')
|
|
```
|
|
|
|
#### Workflow-Typen
|
|
|
|
- `project` - Projektabläufe
|
|
- `business` - Geschäftsprozesse
|
|
- `approval` - Genehmigungs-Workflows
|
|
- `onboarding` - Mitarbeiter-/Kundeneinführung
|
|
- `support` - Support/Service-Prozesse
|
|
- `development` - 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 Grid
|
|
- `list` - Listenansicht
|
|
- `featured` - Featured + Grid
|
|
- `compact` - Kompakt (für Sidebar)
|
|
- `masonry` - Masonry-Layout
|
|
|
|
---
|
|
|
|
### 2. Testimonials Block
|
|
|
|
**Slug:** `testimonials-block`
|
|
|
|
Zeigt Kundenstimmen aus der Testimonials Collection.
|
|
|
|
#### Layout-Optionen
|
|
|
|
- `slider` - Karussell
|
|
- `grid` - Karten im Grid
|
|
- `single` - Einzeln (Featured)
|
|
- `masonry` - Masonry-Layout
|
|
- `list` - Listenansicht
|
|
|
|
---
|
|
|
|
### 3. Newsletter Block
|
|
|
|
**Slug:** `newsletter-block`
|
|
|
|
Anmeldeformular für Newsletter mit DSGVO-Hinweis.
|
|
|
|
#### Layout-Optionen
|
|
|
|
- `inline` - Eingabe + Button nebeneinander
|
|
- `stacked` - Untereinander
|
|
- `with-image` - Mit Bild (50/50)
|
|
- `minimal` - Nur Input
|
|
- `card` - 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 Grid
|
|
- `list` - Listenansicht
|
|
- `carousel` - Karussell
|
|
- `compact` - Kompakt
|
|
|
|
---
|
|
|
|
### 6. Services Block
|
|
|
|
**Slug:** `services-block`
|
|
|
|
Leistungen aus der Services Collection.
|
|
|
|
#### Layout-Optionen
|
|
|
|
- `grid` - Karten im Grid
|
|
- `list` - Listenansicht mit Details
|
|
- `icons` - Icon-Grid
|
|
- `tabs` - Tab-Navigation
|
|
|
|
---
|
|
|
|
## Multi-Tenant Konfiguration
|
|
|
|
Alle Collections sind für Multi-Tenant konfiguriert:
|
|
|
|
```typescript
|
|
// 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`, `excerpt` erweitert
|
|
- 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*
|