# To-Do-Liste - Payload CMS Multi-Tenant Projekt ## Legende - [ ] Offen - [x] Erledigt - [~] In Bearbeitung - [!] Hohe Priorität - [?] Klärungsbedarf --- ## Phase 1: Grundlagen (Abgeschlossen) ### Infrastruktur - [x] Payload CMS 3.x Installation - [x] PostgreSQL-Datenbank eingerichtet - [x] PM2 Process Manager konfiguriert - [x] Caddy Reverse Proxy mit SSL - [x] Multi-Tenant Plugin aktiviert ### Basis-Collections - [x] Users Collection - [x] Media Collection - [x] Tenants Collection - [x] Pages Collection ### Globals - [x] SiteSettings - [x] Navigation --- ## Phase 2: Universal Features (Abgeschlossen) ### Collections - [x] Posts Collection (Blog, News, Presse, Ankündigungen) - [x] Feld `type` (blog, news, press, announcement) - [x] Feld `isFeatured` - [x] Feld `excerpt` - [x] Categories Collection - [x] Testimonials Collection - [x] Newsletter Subscribers Collection - [x] Double Opt-In Support - [x] DSGVO-konforme Felder (IP, Timestamps) - [x] Social Links Collection ### Blocks - [x] Hero Block - [x] Text Block - [x] Image Text Block - [x] Card Grid Block - [x] Quote Block - [x] CTA Block - [x] Contact Form Block - [x] Video Block - [x] Divider Block - [x] Timeline Block - [x] Posts List Block - [x] Testimonials Block - [x] Newsletter Block - [x] Process Steps Block ### Consent Management - [x] Cookie Configurations Collection - [x] Cookie Inventory Collection - [x] Consent Logs Collection - [x] Privacy Policy Settings Collection --- ## Phase 3: Offene Aufgaben ### Hohe Priorität - [ ] **[!] Tenant-Domains konfigurieren** - Domains in Tenants Collection eintragen - DNS-Einträge prüfen - Caddy-Konfiguration für alle Domains - [ ] **[!] E-Mail-Adapter einrichten** - SMTP-Konfiguration - Newsletter Double Opt-In E-Mails - Kontaktformular-Benachrichtigungen - [ ] **[!] Frontend-Komponenten entwickeln** - React/Next.js Komponenten für alle Blocks - Newsletter-Anmelde-Formular - Cookie-Banner implementieren ### Mittlere Priorität - [x] **Bild-Optimierung** (Erledigt: 30.11.2025) - [x] Sharp Plugin konfiguriert - [x] 11 Responsive Image Sizes definiert (thumbnail, small, medium, large, xlarge, 2k, og + AVIF-Varianten) - [x] WebP/AVIF Format aktiviert - [x] Fokuspunkt-Support - [x] Zusätzliche Felder (caption, credit, tags) - Dokumentation: `docs/anleitungen/BILDOPTIMIERUNG.md` - [x] **SEO-Erweiterungen** (Erledigt: 30.11.2025) - [x] Sitemap-Generator (`/sitemap.xml`) - [x] robots.txt (`/robots.txt`) - [x] Structured Data (JSON-LD) Helpers - [x] SEO Settings Global im Admin-Panel - Dokumentation: `docs/anleitungen/SEO_ERWEITERUNG.md` - [x] **Suche implementieren** (Erledigt: 30.11.2025) - [x] Volltextsuche für Posts (`/api/search`) - [x] Filterbare Kategorie-Ansichten (`/api/posts?category=...`) - [x] Auto-Complete Funktion (`/api/search/suggestions`) - [x] Rate Limiting (30 Requests/Minute) - [x] TTL-Caching (60 Sekunden) - Dokumentation: `src/lib/search.ts` - [x] **Mehrsprachigkeit (i18n)** (Erledigt: 30.11.2025) - [x] Admin UI: Deutsch & Englisch (`@payloadcms/translations`) - [x] Content Localization: DE (default), EN mit Fallback - [x] Alle Collections lokalisiert (Pages, Posts, Categories, Testimonials) - [x] Alle 14 Blocks lokalisiert - [x] Alle Globals lokalisiert (SiteSettings, Navigation, SEOSettings) - [x] 36 `_locales` Tabellen in PostgreSQL - [x] Search API mit `locale` Parameter - [x] Frontend Locale Routing (`/[locale]/...`) - Hinweis: Datenbank wurde zurückgesetzt (war leer) ### Niedrige Priorität - [ ] **Analytics Integration** - Google Analytics 4 / Plausible - Event-Tracking für Newsletter - Conversion-Tracking - [ ] **Caching-Strategie** - Redis-Cache für API - CDN-Integration (Cloudflare) - Invalidierung bei Updates - [ ] **Backup-System** - Automatische Datenbank-Backups - Media-Backup zu S3/MinIO - Disaster Recovery Plan - [ ] **Monitoring & Logging** - Sentry Error Tracking - Prometheus Metrics - Grafana Dashboard --- ## Phase 4: Tenant-spezifische Features ### porwoll.de - [ ] Immobilien-Collection (falls benötigt) - [ ] Objektsuche - [ ] Kontaktformular mit Objekt-Referenz ### complexcaresolutions.de (C2S) - [ ] Team-Collection - [ ] Leistungs-Übersicht - [ ] Karriere-Seite mit Stellenangeboten ### gunshin.de - [ ] Portfolio-Collection - [ ] Projekt-Galerie - [ ] Referenzen-Slider ### zweitmein.ng - [ ] Produkt-Collection (falls E-Commerce) - [ ] FAQ-Collection - [ ] Preistabellen --- ## Technische Schulden - [ ] TypeScript Strict Mode aktivieren - [ ] Unit Tests für Access Control - [ ] E2E Tests für kritische Flows - [ ] API-Dokumentation automatisch generieren (OpenAPI) - [ ] Code-Review für Security-relevante Bereiche - [ ] Performance-Audit der Datenbank-Queries --- ## Dokumentation - [x] CLAUDE.md (Projekt-Übersicht) - [x] UNIVERSAL_FEATURES.md (Collections & Blocks) - [x] API_ANLEITUNG.md (REST API Guide) - [x] TODO.md (Diese Datei) - [x] BILDOPTIMIERUNG.md (Sharp & Image Sizes) - [x] SEO_ERWEITERUNG.md (SEO Features) - [ ] DEPLOYMENT.md (Deployment-Prozess) - [ ] FRONTEND_INTEGRATION.md (Next.js Guide) - [ ] SECURITY.md (Sicherheitsrichtlinien) --- ## 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 1. Tenant-Domains in DB eintragen 2. E-Mail-Adapter konfigurieren 3. Frontend-Entwicklung starten 4. Erste Inhalte einpflegen (DE + EN) 5. Admin-User für Tenants erstellen --- ## 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: 30.11.2025 (Suche + Mehrsprachigkeit implementiert)*