mirror of
https://github.com/complexcaresolutions/cms.c2sgmbh.git
synced 2026-03-17 22:04:10 +00:00
- CLAUDE.md: Update Payload version 3.68.4 → 3.69.0, update date - PROJECT_STATUS.md: Add changelog entry for 27.12.2025, update version - INFRASTRUCTURE.md: Update Payload version - TODO.md: Add detailed changelog entry for bug fixes and updates - BUG_REPORT_CUSTOM_VIEWS.md: Update versions, add note that bug persists 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
325 lines
11 KiB
Markdown
325 lines
11 KiB
Markdown
# To-Do-Liste - Payload CMS Multi-Tenant Projekt
|
|
|
|
> **Server:** sv-payload (LXC 700) - 10.10.181.100
|
|
> **Frontend-Tasks:** Siehe `FRONTEND.md` (sv-frontend, LXC 704)
|
|
|
|
---
|
|
|
|
## Zusammenfassung: Offene Tasks (Payload-Server)
|
|
|
|
### Hohe Priorität
|
|
| Status | Task | Bereich |
|
|
|--------|------|---------|
|
|
| [ ] | SMTP-Credentials in `.env` konfigurieren | E-Mail |
|
|
|
|
### Mittlere Priorität
|
|
| Status | Task | Bereich |
|
|
|--------|------|---------|
|
|
| [ ] | Media-Backup zu S3/MinIO | Backup |
|
|
| [ ] | CDN-Integration (Cloudflare) | Caching |
|
|
| [x] | CI/CD Pipeline erweitern (Lint/Test/Build) | DevOps |
|
|
| [x] | Security Scanning (CodeQL, Dependency Audit) | DevOps |
|
|
| [x] | Staging-Deployment | DevOps |
|
|
| [x] | Memory-Problem lösen (Swap) | Infrastruktur |
|
|
| [ ] | PM2 Cluster Mode testen | Infrastruktur |
|
|
| [ ] | Payload/Next Releases auf Next.js 16 Support beobachten *(siehe `framework-monitoring.md`)* | Tech Debt |
|
|
|
|
### Niedrige Priorität
|
|
| Status | Task | Bereich |
|
|
|--------|------|---------|
|
|
| [ ] | Monitoring: Sentry, Prometheus, Grafana | Monitoring |
|
|
| [x] | AuditLogs Retention (90 Tage Cron) | Data Retention |
|
|
| [x] | Email-Log Cleanup Cron | Data Retention |
|
|
| [x] | Media-Orphan-Cleanup | Data Retention |
|
|
| [x] | Consent-Logs Archivierung | Data Retention |
|
|
| [ ] | Dashboard-Widget für Email-Status | Admin UX |
|
|
| [ ] | TypeScript Strict Mode | Tech Debt |
|
|
| [x] | E2E Tests für kritische Flows | Testing |
|
|
|
|
### Dokumentation
|
|
| Status | Task |
|
|
|--------|------|
|
|
| [x] | DEPLOYMENT.md erstellen |
|
|
|
|
---
|
|
|
|
## Legende
|
|
|
|
- [ ] Offen
|
|
- [x] Erledigt
|
|
- [~] In Bearbeitung
|
|
- [!] Hohe Priorität
|
|
- [→] Ausgelagert (siehe FRONTEND.md)
|
|
|
|
---
|
|
|
|
## Offene Aufgaben
|
|
|
|
### Hohe Priorität
|
|
|
|
- [ ] **SMTP-Credentials in `.env` konfigurieren**
|
|
- Echte SMTP-Zugangsdaten für Produktion hinterlegen
|
|
|
|
### Mittlere Priorität
|
|
|
|
#### Analytics Integration
|
|
- [ ] **Umami Analytics (cookieless, ohne Consent)**
|
|
- [ ] Umami-Server auf sv-analytics (10.10.181.103) einrichten
|
|
- [ ] Website-IDs für alle 4 Tenants in Umami erstellen
|
|
- [ ] `src/config/analytics.ts` mit Website-IDs anlegen
|
|
- [ ] `src/components/analytics/UmamiScript.tsx` implementieren
|
|
- [ ] Umami Script in Root Layout einbinden (Multi-Tenant)
|
|
- [ ] `src/hooks/useAnalytics.ts` Hook für Custom Events
|
|
- [ ] `src/lib/analytics.server.ts` für Server-Side Events
|
|
- [ ] Event-Tracking in Newsletter-Formular integrieren
|
|
- [ ] Event-Tracking in CTA-Buttons integrieren
|
|
- [ ] TrackedButton & TrackedDownload Komponenten erstellen
|
|
|
|
- [ ] **Google Ads Conversion (mit Consent)**
|
|
- [ ] `src/components/analytics/GoogleConsentMode.tsx` implementieren
|
|
- [ ] Google Consent Mode v2 mit Orestbida Cookie-Banner integrieren
|
|
- [ ] `src/hooks/useGclid.ts` Hook für GCLID-Erfassung
|
|
- [ ] `src/lib/google-ads.ts` Client-Side Conversion Tracking
|
|
- [ ] `src/lib/google-ads.server.ts` Server-Side Conversion API
|
|
- [ ] Enhanced Conversions mit gehashten E-Mails
|
|
|
|
- [ ] **Cookie Inventory**
|
|
- [ ] Google Ads Cookies (_gcl_au, _gcl_aw, IDE) zur Cookie Inventory Collection hinzufügen
|
|
|
|
- [ ] **Environment Variables**
|
|
- [ ] NEXT_PUBLIC_UMAMI_HOST in .env.local
|
|
- [ ] NEXT_PUBLIC_GOOGLE_ADS_ID in .env.local (pro Tenant)
|
|
- [ ] UMAMI_HOST, UMAMI_WEBSITE_ID in Backend .env
|
|
- [ ] Google Ads API Credentials in Backend .env
|
|
|
|
- [ ] **CDN-Integration (Cloudflare)**
|
|
|
|
- [~] **Backup-System**
|
|
- [ ] Media-Backup zu S3/MinIO
|
|
- [ ] Disaster Recovery Plan
|
|
|
|
### Niedrige Priorität
|
|
|
|
- [ ] **Monitoring & Logging**
|
|
- Sentry Error Tracking
|
|
- Prometheus Metrics
|
|
- Grafana Dashboard
|
|
|
|
---
|
|
|
|
## Build & Infrastructure
|
|
|
|
- [x] **Memory-Problem lösen** *(erledigt: 4GB Swap via ZFS ZVOL auf Proxmox Host)*
|
|
- [x] Swap auf Server aktivieren (4GB)
|
|
- [x] Container Swap-Limit konfiguriert (`pct set 700 -swap 4096`)
|
|
|
|
- [ ] **PM2 Cluster Mode**
|
|
- [ ] Multi-Instanz Konfiguration testen
|
|
- [ ] Shared State via Redis sicherstellen
|
|
|
|
---
|
|
|
|
## Testing & CI/CD
|
|
|
|
- [x] **CI/CD Pipeline** *(erledigt: `.github/workflows/ci.yml`)*
|
|
- [x] Automatisches Lint/Test/Build Workflow
|
|
- [x] Staging-Deployment *(erledigt: `.github/workflows/deploy-staging.yml`)*
|
|
|
|
- [x] **E2E Tests für kritische Flows** *(erledigt: `tests/e2e/`)*
|
|
|
|
---
|
|
|
|
## Data Retention
|
|
|
|
- [x] **Automatische Datenbereinigung** *(erledigt: `src/lib/retention/`)*
|
|
- [x] Cron-Job für Email-Log Cleanup (90 Tage default)
|
|
- [x] AuditLogs Retention Policy (90 Tage)
|
|
- [x] Consent-Logs Archivierung (3 Jahre, expiresAt-basiert)
|
|
- [x] Media-Orphan-Cleanup (30 Tage Mindestalter)
|
|
|
|
---
|
|
|
|
## Tenant-spezifische Features
|
|
|
|
> **Hinweis:** Backend-Collections hier, Frontend-Komponenten in `FRONTEND.md`
|
|
|
|
### porwoll.de
|
|
- [ ] Immobilien-Collection (falls benötigt) *(Backend)*
|
|
- [→] Objektsuche *(Frontend)*
|
|
- [→] Kontaktformular mit Objekt-Referenz *(Frontend)*
|
|
|
|
### complexcaresolutions.de (C2S)
|
|
- [→] Leistungs-Übersicht *(Frontend)*
|
|
- [→] Karriere-Seite mit Stellenangeboten *(Frontend)*
|
|
|
|
### gunshin.de / Fotografin-Portfolio
|
|
- [→] Projekt-Galerie Frontend *(Frontend)*
|
|
- [→] Referenzen-Slider *(Frontend)*
|
|
|
|
### zweitmein.ng
|
|
- [ ] Produkt-Collection (falls E-Commerce) *(Backend)*
|
|
- [→] Preistabellen *(Frontend)*
|
|
|
|
---
|
|
|
|
## Technische Schulden
|
|
|
|
- [ ] TypeScript Strict Mode aktivieren
|
|
- [x] E2E Tests für kritische Flows
|
|
- [x] Code-Review für Security-relevante Bereiche *(erledigt: 17.12.2025)*
|
|
- [ ] Performance-Audit der Datenbank-Queries
|
|
|
|
---
|
|
|
|
## Dokumentation
|
|
|
|
- [x] DEPLOYMENT.md (Deployment-Prozess) *(erledigt: 18.12.2025)*
|
|
|
|
---
|
|
|
|
## Regelmäßige Wartung
|
|
|
|
### Wöchentlich
|
|
- [ ] PM2 Logs prüfen
|
|
- [ ] Datenbank-Größe überwachen
|
|
- [ ] Media-Storage prüfen
|
|
|
|
### Monatlich
|
|
- [ ] Dependencies aktualisieren (`pnpm update`)
|
|
- [ ] Sicherheitsupdates prüfen (`pnpm audit`)
|
|
- [ ] Backup-Restore testen
|
|
|
|
### Quartalsweise
|
|
- [ ] Performance-Review
|
|
- [ ] Security-Audit
|
|
- [ ] Dokumentation aktualisieren
|
|
|
|
---
|
|
|
|
## Notizen
|
|
|
|
### Bekannte Probleme
|
|
|
|
1. **Tenant-Isolation bei localhost:** API gibt 403 zurück, wenn kein Tenant zur Domain passt. Das ist gewolltes Verhalten für Multi-Tenant-Sicherheit.
|
|
|
|
2. **GraphQL Playground deaktiviert:** Route wurde entfernt. Bei Bedarf wieder aktivieren.
|
|
|
|
3. **PM2 Cluster Mode:** Aktuell 1 Instanz. Für Skalierung `instances: "max"` setzen.
|
|
|
|
### Nächste Schritte (Priorisiert)
|
|
|
|
1. **[MITTEL]** Media-Backup zu S3 einrichten
|
|
2. **[NIEDRIG]** Monitoring (Sentry/Prometheus)
|
|
3. **[NIEDRIG]** Analytics Integration (Umami)
|
|
|
|
---
|
|
|
|
## Kontakte & Ressourcen
|
|
|
|
- **Payload CMS Docs:** https://payloadcms.com/docs
|
|
- **GitHub Issues:** https://github.com/payloadcms/payload/issues
|
|
- **Discord Community:** https://discord.com/invite/payload
|
|
|
|
---
|
|
|
|
*Letzte Aktualisierung: 27.12.2025*
|
|
|
|
---
|
|
|
|
## Changelog
|
|
|
|
### 27.12.2025
|
|
- **Payload CMS Update 3.68.4 → 3.69.0:**
|
|
- Login Redirect Loop behoben (formatAdminURL generiert keine absoluten URLs mehr)
|
|
- Update aller @payloadcms/* Pakete
|
|
- **Admin Panel Bug-Fixes:**
|
|
- Speichern-Button für User-Account repariert: `canUpdateOwnAccount` Access Control in Users.ts
|
|
- Einstellungen-Gruppe in Navigation sichtbar: Explizite `read`/`update` Access Controls in SEOSettings.ts
|
|
- **Datenbank-Schema aktualisiert:**
|
|
- `site_settings_id` und `navigations_id` Spalten zu `payload_locked_documents_rels` hinzugefügt
|
|
- **Code-Cleanup:**
|
|
- Custom Login Page entfernt (verursachte Rendering-Fehler)
|
|
- migrations_backup Ordner entfernt
|
|
- Unbenutzte Dateien entfernt (cache-keys.ts, my-route)
|
|
- ImportMap regeneriert
|
|
- **Git Remote aktualisiert:** `github.com/complexcaresolutions/cms.c2sgmbh.git`
|
|
|
|
### 18.12.2025
|
|
- **Dokumentation konsolidiert:**
|
|
- CLAUDE.md: Tech-Stack auf aktuelle Versionen aktualisiert (Payload 3.68.4, Next.js 15.5.9, React 19.2.3)
|
|
- CLAUDE.md: Architektur-Diagramm erweitert (sv-caddy, sv-frontend hinzugefügt)
|
|
- CLAUDE.md: Videos/VideoCategories Collections hinzugefügt
|
|
- docs/INFRASTRUCTURE.md: Komplett aktualisiert mit neuer Infrastruktur
|
|
- docs/PROJECT_STATUS.md: Neues Statusdokument behalten
|
|
- Obsolete Dateien entfernt: INFRASTRUCTURE_COMPLETE_DECEMBER_2025.md, TECHSTACK_COMPLETE_DECEMBER_2025.md
|
|
|
|
### 17.12.2025
|
|
- **Security Code-Review abgeschlossen:**
|
|
- **IP Header Spoofing behoben:** `X-Forwarded-For`/`X-Real-IP` werden nur bei `TRUST_PROXY=true` vertraut
|
|
- **CSRF Secret-Fallback behoben:** Server startet nicht ohne `CSRF_SECRET` oder `PAYLOAD_SECRET` in Production
|
|
- **IP-Allowlist Warnungen:** Startup-Warnungen wenn Allowlists leer und `allowAllIfEmpty=true`
|
|
- Neue Umgebungsvariable: `TRUST_PROXY=true` (Pflicht hinter Reverse-Proxy)
|
|
- Dateien: `src/lib/security/rate-limiter.ts`, `src/lib/security/ip-allowlist.ts`, `src/lib/security/csrf.ts`
|
|
- Unit Tests und Integration Tests aktualisiert (177 Tests passed)
|
|
- CLAUDE.md Dokumentation aktualisiert
|
|
|
|
### 16.12.2025
|
|
- **CI/CD Pipeline stabilisiert:**
|
|
- Job-Level Timeouts (30 Minuten) für Tests und E2E hinzugefügt
|
|
- Step-Level Timeouts: Unit Tests (10min), Integration Tests (15min), E2E Tests (15min)
|
|
- Vitest testTimeout (30s) und hookTimeout (30s) konfiguriert
|
|
- Verhindert 6-Stunden-Hänger bei fehlgeschlagenen DB-Verbindungen
|
|
- drizzle-kit als Dev-Dependency hinzugefügt (früherer Commit)
|
|
- drizzle-kit push statt Migrations für CI (früherer Commit)
|
|
|
|
### 15.12.2025
|
|
- **Data Retention System implementiert:**
|
|
- Automatische Datenbereinigung für DSGVO-Compliance
|
|
- Email-Logs Cleanup (90 Tage default)
|
|
- AuditLogs Retention (90 Tage default)
|
|
- Consent-Logs Archivierung (3 Jahre, expiresAt-basiert)
|
|
- Media-Orphan-Cleanup (unreferenzierte Dateien)
|
|
- Scheduler: Täglich um 03:00 Uhr via BullMQ
|
|
- API-Endpoint `/api/retention` für manuellen Trigger
|
|
- Dateien: `src/lib/retention/`, `src/lib/queue/workers/retention-worker.ts`
|
|
- **E2E Tests stabilisiert:**
|
|
- Rate-Limit Handling (429) zu allen API-Tests hinzugefügt
|
|
- `networkidle` durch `domcontentloaded` + explizite Waits ersetzt
|
|
- Status-Code-Erwartungen für protected APIs erweitert
|
|
- 105 Tests passed, 7 skipped (vorher 28 failures)
|
|
- **Security Scanning Pipeline repariert:**
|
|
- CodeQL im GitHub Repository aktiviert (Advanced Setup)
|
|
- Gitleaks durch GitHub Native Secret Scanning ersetzt (423 Patterns)
|
|
- CodeQL Action v3 → v4 aktualisiert
|
|
- 0 Security Vulnerabilities gefunden
|
|
|
|
### 14.12.2025
|
|
- **Tenant-spezifische Collections implementiert:**
|
|
- Bookings Collection für porwoll.de (Fotografie-Buchungen)
|
|
- Certifications Collection für C2S (Zertifizierungen)
|
|
- Projects Collection für gunshin.de (Game-Development-Projekte)
|
|
- BeforeAfterBlock für porwoll.de (Vorher/Nachher Bildvergleich)
|
|
- Migration: `20251214_010000_tenant_specific_collections.ts`
|
|
- 28 neue Datenbank-Tabellen erstellt
|
|
- **TODO.md bereinigt:** Alle erledigten Tasks entfernt
|
|
|
|
### 12.12.2025
|
|
- **PgBouncer Connection Pooling eingerichtet**
|
|
- **Unit Tests für Access Control implementiert**
|
|
- **Rate-Limits auf Redis migriert**
|
|
|
|
### 11.12.2025
|
|
- **Automatisierte Datenbank-Backups eingerichtet**
|
|
- **Offsite-Backup zu Hetzner Object Storage**
|
|
- **Dokumentierter Restore-Prozess**
|
|
|
|
### 10.12.2025
|
|
- **Newsletter Double Opt-In implementiert**
|
|
- **OpenAPI-Dokumentation hinzugefügt**
|
|
- **Audit-Fixes durchgeführt**
|
|
|
|
### 09.12.2025
|
|
- **Full-Text-Search aktiviert**
|
|
- **BullMQ Queue-System implementiert**
|
|
- **PDF-Queue-System implementiert**
|
|
- **Index-Audit durchgeführt**
|