docs: update anleitungen with BlogWoman features and fixes

API_ANLEITUNG.md:
- Fix rate limiting section (was incorrectly stated as not implemented)
- Add comprehensive rate limit documentation with limits table
- Expand collections overview from 13 to 42+ collections
- Add BlogWoman APIs (Favorites, Series)

FRONTEND.md:
- Fix Globals section (SiteSettings/Navigations are now Collections)
- Add Favorites and Series APIs
- Update date

UNIVERSAL_FEATURES.md:
- Add Favorites Collection (affiliate products)
- Add Series Collection (YouTube series)
- Add 5 new BlogWoman blocks documentation
- Update files overview and multi-tenant config
- Add version 1.3 changelog entry

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Martin Porwoll 2026-01-08 15:05:23 +00:00
parent 3ccb8bd585
commit 49d317fc84
3 changed files with 408 additions and 14 deletions

View file

@ -863,32 +863,209 @@ export function NewsletterForm() {
## Rate Limiting
Aktuell gibt es kein Rate Limiting. Für Production-Umgebungen sollte ein Reverse Proxy (z.B. Caddy, nginx) mit Rate Limiting konfiguriert werden.
Das System verwendet einen zentralen Rate-Limiter mit Redis-Backend (Fallback auf In-Memory).
### Vordefinierte Limits
| Limiter | Limit | Fenster | Verwendung |
|---------|-------|---------|------------|
| `publicApiLimiter` | 60 Requests | 1 Minute | Öffentliche API-Endpunkte |
| `authLimiter` | 5 Requests | 15 Minuten | Login-Versuche |
| `emailLimiter` | 10 Requests | 1 Minute | E-Mail-Versand |
| `searchLimiter` | 30 Requests | 1 Minute | Suche & Posts-API |
| `formLimiter` | 5 Requests | 10 Minuten | Formular-Submissions, Newsletter |
### Response bei Rate-Limit
```json
{
"error": "Too many requests",
"retryAfter": 60
}
```
**HTTP Status:** 429 Too Many Requests
**Headers:**
- `X-RateLimit-Limit`: Maximale Requests
- `X-RateLimit-Remaining`: Verbleibende Requests
- `X-RateLimit-Reset`: Reset-Zeitpunkt (Unix Timestamp)
- `Retry-After`: Sekunden bis zum Reset
---
## Alle Collections Übersicht
### Core Collections
| Collection | Slug | Öffentlich | Beschreibung |
|------------|------|------------|--------------|
| Users | `users` | Nein | Benutzer-Verwaltung |
| Tenants | `tenants` | Nein | Mandanten |
| Media | `media` | Ja | Bilder und Dateien |
| Media | `media` | Ja | Bilder und Dateien (11 responsive Sizes) |
| Pages | `pages` | Ja | Seiten mit Blocks |
| Posts | `posts` | Ja | Blog-Artikel und News |
### Content Collections
| Collection | Slug | Öffentlich | Beschreibung |
|------------|------|------------|--------------|
| Posts | `posts` | Ja | Blog, News, Presse, Ankündigungen |
| Categories | `categories` | Ja | Kategorien für Posts |
| Social Links | `social-links` | Ja | Social Media Links |
| Tags | `tags` | Ja | Tags für Posts |
| Authors | `authors` | Ja | Autoren für Posts |
| Testimonials | `testimonials` | Ja | Kundenbewertungen |
| Newsletter Subscribers | `newsletter-subscribers` | Create: Ja | Newsletter-Anmeldungen |
| FAQs | `faqs` | Ja | Häufig gestellte Fragen |
| Social Links | `social-links` | Ja | Social Media Links |
### Team & Services
| Collection | Slug | Öffentlich | Beschreibung |
|------------|------|------------|--------------|
| Team | `team` | Ja | Team-Mitglieder |
| Service Categories | `service-categories` | Ja | Kategorien für Leistungen |
| Services | `services` | Ja | Leistungen/Dienstleistungen |
| Jobs | `jobs` | Ja | Stellenangebote |
### Portfolio & Media
| Collection | Slug | Öffentlich | Beschreibung |
|------------|------|------------|--------------|
| Portfolios | `portfolios` | Ja | Portfolio-Galerien |
| Portfolio Categories | `portfolio-categories` | Ja | Kategorien für Portfolios |
| Videos | `videos` | Ja | Video-Bibliothek (YouTube/Vimeo/Upload) |
| Video Categories | `video-categories` | Ja | Kategorien für Videos |
### Products (E-Commerce)
| Collection | Slug | Öffentlich | Beschreibung |
|------------|------|------------|--------------|
| Products | `products` | Ja | Produkte |
| Product Categories | `product-categories` | Ja | Produkt-Kategorien |
### Feature Collections
| Collection | Slug | Öffentlich | Beschreibung |
|------------|------|------------|--------------|
| Locations | `locations` | Ja | Standorte/Filialen |
| Partners | `partners` | Ja | Partner/Kunden (Logos) |
| Downloads | `downloads` | Ja | Download-Dateien |
| Events | `events` | Ja | Veranstaltungen |
| Timelines | `timelines` | Ja | Chronologische Events |
| Workflows | `workflows` | Ja | Prozess-Darstellungen |
### BlogWoman Collections (NEU)
| Collection | Slug | Öffentlich | Beschreibung |
|------------|------|------------|--------------|
| Favorites | `favorites` | Ja | Affiliate-Produkte mit Kategorien/Badges |
| Series | `series` | Ja | YouTube-Serien mit Branding |
### Formulare & Newsletter
| Collection | Slug | Öffentlich | Beschreibung |
|------------|------|------------|--------------|
| Forms | `forms` | Nein | Formular-Builder (Plugin) |
| Form Submissions | `form-submissions` | Nein | Formular-Einsendungen mit CRM-Workflow |
| Newsletter Subscribers | `newsletter-subscribers` | Create: Ja | Newsletter mit Double Opt-In |
### Consent & Privacy (DSGVO)
| Collection | Slug | Öffentlich | Beschreibung |
|------------|------|------------|--------------|
| Cookie Configurations | `cookie-configurations` | Ja (Tenant-isoliert) | Cookie-Banner Konfiguration |
| Cookie Inventory | `cookie-inventory` | Ja (Tenant-isoliert) | Cookie-Dokumentation |
| Consent Logs | `consent-logs` | Nein (API-Key) | WORM Audit-Trail |
| Privacy Policy Settings | `privacy-policy-settings` | Ja (Tenant-isoliert) | Datenschutzerklärungs-Konfiguration |
| Privacy Policy Settings | `privacy-policy-settings` | Ja (Tenant-isoliert) | Datenschutz-Konfiguration |
### Tenant-spezifische Collections
| Collection | Slug | Tenant | Beschreibung |
|------------|------|--------|--------------|
| Bookings | `bookings` | porwoll.de | Fotografie-Buchungen |
| Certifications | `certifications` | C2S | Zertifizierungen |
| Projects | `projects` | gunshin.de | Game-Development-Projekte |
### System Collections
| Collection | Slug | Öffentlich | Beschreibung |
|------------|------|------------|--------------|
| Site Settings | `site-settings` | Ja (Tenant-isoliert) | Website-Einstellungen |
| Navigations | `navigations` | Ja (Tenant-isoliert) | Navigationsmenüs |
| Email Logs | `email-logs` | Nein | E-Mail-Protokollierung |
| Audit Logs | `audit-logs` | Nein | Security Audit Trail |
| Redirects | `redirects` | Nein | URL-Weiterleitungen (Plugin) |
---
## BlogWoman APIs (NEU)
### Favorites API (Affiliate-Produkte)
```bash
# Alle Favorites eines Tenants
curl "https://pl.porwoll.tech/api/favorites?where[tenant][equals]=1"
# Nach Kategorie filtern
curl "https://pl.porwoll.tech/api/favorites?where[tenant][equals]=1&where[category][equals]=fashion"
# Nach Badge filtern
curl "https://pl.porwoll.tech/api/favorites?where[tenant][equals]=1&where[badge][equals]=bestseller"
# Nach Preisbereich filtern
curl "https://pl.porwoll.tech/api/favorites?where[tenant][equals]=1&where[priceRange][equals]=mid"
```
**Felder:**
| Feld | Typ | Beschreibung |
|------|-----|--------------|
| `title` | string | Produktname |
| `slug` | string | URL-Pfad |
| `description` | richtext | Beschreibung |
| `image` | relation | Produktbild |
| `affiliateUrl` | string | Affiliate-Link |
| `price` | string | Preis (Freitext) |
| `category` | select | fashion, beauty, travel, tech, home |
| `badge` | select | investment-piece, daily-driver, grfi-approved, new, bestseller |
| `priceRange` | select | budget, mid, premium, luxury |
| `isActive` | boolean | Sichtbarkeit |
### Series API (YouTube-Serien)
```bash
# Alle Serien eines Tenants
curl "https://pl.porwoll.tech/api/series?where[tenant][equals]=1"
# Nur aktive Serien
curl "https://pl.porwoll.tech/api/series?where[tenant][equals]=1&where[isActive][equals]=true"
# Einzelne Serie nach Slug
curl "https://pl.porwoll.tech/api/series?where[tenant][equals]=1&where[slug][equals]=grfi"
```
**Felder:**
| Feld | Typ | Beschreibung |
|------|-----|--------------|
| `title` | string | Serienname (lokalisiert) |
| `slug` | string | URL-Pfad |
| `description` | richtext | Beschreibung (lokalisiert) |
| `logo` | relation | Serien-Logo |
| `coverImage` | relation | Cover-Bild |
| `brandColor` | string | Hex-Farbcode |
| `youtubePlaylistId` | string | YouTube Playlist ID |
| `isActive` | boolean | Sichtbarkeit |
---
## Weitere Ressourcen
- **Admin Panel:** https://pl.porwoll.tech/admin
- **API-Dokumentation (Swagger):** https://pl.porwoll.tech/api/docs
- **OpenAPI JSON:** https://pl.porwoll.tech/api/openapi.json
- **Payload CMS Docs:** https://payloadcms.com/docs
- **GraphQL Playground:** https://pl.porwoll.tech/api/graphql (wenn aktiviert)
---
*Letzte Aktualisierung: 08.01.2026*

View file

@ -146,15 +146,24 @@ NEXT_PUBLIC_TENANT_SLUG=c2s
| Videos | `GET /api/videos` | Video-Bibliothek |
| Timelines | `GET /api/timelines` | Chronologische Events |
| Workflows | `GET /api/workflows` | Prozess-Darstellungen |
| Favorites | `GET /api/favorites` | Affiliate-Produkte (BlogWoman) |
| Series | `GET /api/series` | YouTube-Serien (BlogWoman) |
### Globals (SEO & Settings aus Production)
### Site Settings & Navigation (Tenant-isolierte Collections)
> **Hinweis:** SiteSettings und Navigations wurden zu tenant-spezifischen Collections umgewandelt.
| Collection | Endpoint | Beschreibung |
|------------|----------|--------------|
| Site Settings | `GET /api/site-settings?where[tenant][equals]=4` | Logo, Name, Kontakt, Adresse |
| Navigation | `GET /api/navigations?where[tenant][equals]=4` | Menü-Struktur |
| Privacy Policy | `GET /api/privacy-policy-settings?where[tenant][equals]=4` | Datenschutz |
### Globals (Systemweit)
| Global | Endpoint | Beschreibung |
|--------|----------|--------------|
| Site Settings | `GET /api/globals/site-settings` | Logo, Name, Kontakt |
| Navigation | `GET /api/globals/navigation` | Menü-Struktur |
| SEO Settings | `GET /api/globals/seo-settings` | Default SEO (Production) |
| Privacy Policy | `GET /api/globals/privacy-policy-settings` | Datenschutz |
### Spezielle Endpoints
@ -463,4 +472,4 @@ journalctl -u frontend-porwoll -f
---
*Letzte Aktualisierung: 18.12.2025*
*Letzte Aktualisierung: 08.01.2026*

View file

@ -1,6 +1,6 @@
# Universal Features - Dokumentation
*Letzte Aktualisierung: 18. Dezember 2025*
*Letzte Aktualisierung: 08. Januar 2026*
## Übersicht
@ -280,12 +280,83 @@ fetch('https://cms.c2sgmbh.de/api/workflows?tenant=4&type=project&locale=de')
---
### 9. Favorites Collection (BlogWoman)
**Pfad:** `src/collections/Favorites.ts`
**Slug:** `favorites`
**Admin-Gruppe:** Content
Affiliate-Produkte für Blogger/Influencer mit Kategorien und Badges.
#### API
```typescript
// Alle Favorites eines Tenants
fetch('https://cms.c2sgmbh.de/api/favorites?where[tenant][equals]=4&locale=de')
// Nach Kategorie filtern
fetch('https://cms.c2sgmbh.de/api/favorites?where[tenant][equals]=4&where[category][equals]=fashion')
```
#### Felder
| Feld | Typ | Beschreibung | Pflicht |
|------|-----|--------------|---------|
| `title` | Text | Produktname | Ja |
| `slug` | Text | URL-Pfad (auto) | Ja |
| `description` | RichText | Beschreibung (lokalisiert) | Nein |
| `image` | Upload | Produktbild | Nein |
| `affiliateUrl` | Text | Affiliate-Link | Ja |
| `price` | Text | Preis (Freitext) | Nein |
| `category` | Select | fashion, beauty, travel, tech, home | Nein |
| `badge` | Select | investment-piece, daily-driver, grfi-approved, new, bestseller | Nein |
| `priceRange` | Select | budget, mid, premium, luxury | Nein |
| `isActive` | Checkbox | Sichtbarkeit | Nein |
| `order` | Number | Sortierung | Nein |
---
### 10. Series Collection (BlogWoman)
**Pfad:** `src/collections/Series.ts`
**Slug:** `series`
**Admin-Gruppe:** Content
YouTube-Serien mit eigenem Branding für Content-Reihen.
#### API
```typescript
// Alle Serien eines Tenants
fetch('https://cms.c2sgmbh.de/api/series?where[tenant][equals]=4&locale=de')
// Einzelne Serie nach Slug
fetch('https://cms.c2sgmbh.de/api/series?where[tenant][equals]=4&where[slug][equals]=grfi')
```
#### Felder
| Feld | Typ | Beschreibung | Pflicht |
|------|-----|--------------|---------|
| `title` | Text | Serienname (lokalisiert) | Ja |
| `slug` | Text | URL-Pfad (auto) | Ja |
| `description` | RichText | Beschreibung (lokalisiert) | Nein |
| `logo` | Upload | Serien-Logo | Nein |
| `coverImage` | Upload | Cover-Bild für Hero | Nein |
| `brandColor` | Text | Hex-Farbcode (#RRGGBB) | Nein |
| `youtubePlaylistId` | Text | YouTube Playlist ID | Nein |
| `isActive` | Checkbox | Sichtbarkeit | Nein |
---
## Blocks
Alle Blocks können in der Pages Collection verwendet werden.
### Block-Übersicht
#### Content Blocks
| Block | Slug | Beschreibung |
|-------|------|--------------|
| Posts List | `posts-list-block` | Blog/News-Liste |
@ -297,6 +368,16 @@ Alle Blocks können in der Pages Collection verwendet werden.
| Team | `team-block` | Team-Mitglieder |
| Services | `services-block` | Leistungen |
#### BlogWoman Blocks (NEU)
| Block | Slug | Beschreibung |
|-------|------|--------------|
| Favorites | `favorites-block` | Affiliate-Produkte Grid/Liste/Karussell |
| Series | `series-block` | YouTube-Serien Übersicht |
| Series Detail | `series-detail-block` | Serien-Einzelseite mit Hero |
| Video Embed | `video-embed-block` | YouTube/Vimeo Embed mit Privacy Mode |
| Featured Content | `featured-content-block` | Kuratierte Mixed-Content Sammlung |
### 1. Posts List Block
**Slug:** `posts-list-block`
@ -416,6 +497,110 @@ Leistungen aus der Services Collection.
---
### 7. Favorites Block (BlogWoman)
**Slug:** `favorites-block`
Zeigt Affiliate-Produkte aus der Favorites Collection.
#### Konfigurationsoptionen
| Option | Typ | Beschreibung |
|--------|-----|--------------|
| `title` | Text | Überschrift |
| `subtitle` | Text | Untertitel |
| `displayMode` | Select | all / selected / byCategory |
| `selectedFavorites` | Relationship | Handverlesene Favorites |
| `filterCategory` | Select | Kategorie-Filter |
| `layout` | Select | grid / list / carousel |
| `columns` | Select | 2 / 3 / 4 Spalten |
| `limit` | Number | Anzahl Produkte |
| `showPrice` | Checkbox | Preis anzeigen |
| `showBadge` | Checkbox | Badge anzeigen |
---
### 8. Series Block (BlogWoman)
**Slug:** `series-block`
Übersicht aller YouTube-Serien mit Filteroptionen.
#### Konfigurationsoptionen
| Option | Typ | Beschreibung |
|--------|-----|--------------|
| `title` | Text | Überschrift |
| `subtitle` | Text | Untertitel |
| `displayMode` | Select | all / selected |
| `selectedSeries` | Relationship | Handverlesene Serien |
| `layout` | Select | grid / list / featured |
| `showDescription` | Checkbox | Beschreibung anzeigen |
---
### 9. Series Detail Block (BlogWoman)
**Slug:** `series-detail-block`
Hero-Bereich für eine einzelne Serie mit Branding.
#### Konfigurationsoptionen
| Option | Typ | Beschreibung |
|--------|-----|--------------|
| `series` | Relationship | Serien-Referenz |
| `layout` | Select | hero / compact / sidebar |
| `showLogo` | Checkbox | Logo anzeigen |
| `showPlaylistLink` | Checkbox | YouTube-Link anzeigen |
| `useBrandColor` | Checkbox | Markenfarbe verwenden |
---
### 10. Video Embed Block (BlogWoman)
**Slug:** `video-embed-block`
Datenschutzfreundliches Video-Embedding für YouTube/Vimeo.
#### Konfigurationsoptionen
| Option | Typ | Beschreibung |
|--------|-----|--------------|
| `videoUrl` | Text | YouTube/Vimeo URL |
| `title` | Text | Video-Titel |
| `aspectRatio` | Select | 16:9 / 4:3 / 1:1 / 9:16 |
| `privacyMode` | Checkbox | youtube-nocookie.com verwenden |
| `autoplay` | Checkbox | Automatisch abspielen |
| `showControls` | Checkbox | Player-Controls anzeigen |
| `thumbnailImage` | Upload | Custom Thumbnail |
---
### 11. Featured Content Block (BlogWoman)
**Slug:** `featured-content-block`
Kuratierte Sammlung aus verschiedenen Content-Typen.
#### Konfigurationsoptionen
| Option | Typ | Beschreibung |
|--------|-----|--------------|
| `title` | Text | Überschrift |
| `subtitle` | Text | Untertitel |
| `items` | Array | Gemischte Content-Items |
| `layout` | Select | grid / masonry / featured |
**Item-Typen:**
- `post` - Blog-Artikel
- `video` - Video
- `favorite` - Affiliate-Produkt
- `series` - YouTube-Serie
- `external` - Externer Link
---
## Multi-Tenant Konfiguration
Alle Collections sind für Multi-Tenant konfiguriert:
@ -433,6 +618,8 @@ multiTenantPlugin({
services: {},
timelines: {},
workflows: {},
favorites: {}, // BlogWoman
series: {}, // BlogWoman
// ... weitere Collections
},
})
@ -469,7 +656,9 @@ src/
│ ├── Services.ts
│ ├── ServiceCategories.ts
│ ├── Timelines.ts
│ └── Workflows.ts
│ ├── Workflows.ts
│ ├── Favorites.ts # BlogWoman
│ └── Series.ts # BlogWoman
├── blocks/
│ ├── PostsListBlock.ts
│ ├── TestimonialsBlock.ts
@ -479,6 +668,11 @@ src/
│ ├── FAQBlock.ts
│ ├── TeamBlock.ts
│ ├── ServicesBlock.ts
│ ├── FavoritesBlock.ts # BlogWoman
│ ├── SeriesBlock.ts # BlogWoman
│ ├── SeriesDetailBlock.ts # BlogWoman
│ ├── VideoEmbedBlock.ts # BlogWoman
│ ├── FeaturedContentBlock.ts # BlogWoman
│ └── index.ts
├── lib/
│ ├── tenantAccess.ts
@ -521,6 +715,20 @@ src/
## Changelog
### Version 1.3 (08.01.2026)
- **BlogWoman Collections hinzugefügt:**
- Favorites Collection (Affiliate-Produkte)
- Series Collection (YouTube-Serien)
- **BlogWoman Blocks hinzugefügt:**
- FavoritesBlock (Grid/Liste/Karussell)
- SeriesBlock (Serien-Übersicht)
- SeriesDetailBlock (Serien-Hero)
- VideoEmbedBlock (Privacy-Mode)
- FeaturedContentBlock (Mixed-Content)
- Dateien-Übersicht aktualisiert
- Multi-Tenant Konfiguration erweitert
### Version 1.2 (18.12.2025)
- Dokumentation auf Production-URLs aktualisiert
@ -547,4 +755,4 @@ src/
---
*Letzte Aktualisierung: 18. Dezember 2025*
*Letzte Aktualisierung: 08. Januar 2026*