mirror of
https://github.com/complexcaresolutions/cms.c2sgmbh.git
synced 2026-03-17 20:54:11 +00:00
- Add E-Mail system documentation (tenant-specific SMTP, API endpoint) - Add Redis caching section - Add complete Collections and Globals overview - Update project structure with new directories - Mark Portfolio collections and Email system as completed - Update environment variables documentation 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
302 lines
9.5 KiB
Markdown
302 lines
9.5 KiB
Markdown
# 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
|
|
- [x] Git & GitHub Repository Setup (05.12.2025)
|
|
- [x] GitHub CLI Installation
|
|
- [x] Repository erstellt: https://github.com/c2s-admin/cms.c2sgmbh.git
|
|
- [x] GitHub Authentifizierung konfiguriert
|
|
- [x] .gitignore für sensible Dateien
|
|
- [x] Git Remote (HTTPS) konfiguriert
|
|
|
|
### Basis-Collections
|
|
- [x] Users Collection
|
|
- [x] isSuperAdmin Feld hinzugefügt (05.12.2025)
|
|
- [x] Migration erstellt: 20251202_081830_add_is_super_admin_to_users
|
|
- [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
|
|
|
|
- [x] **E-Mail-System** (Erledigt: 06.12.2025)
|
|
- [x] Multi-Tenant Email Adapter für Payload CMS
|
|
- [x] Tenant-spezifische SMTP-Konfiguration in Tenants Collection
|
|
- [x] EmailLogs Collection für Protokollierung aller E-Mails
|
|
- [x] REST-Endpoint `/api/send-email` mit:
|
|
- [x] Authentifizierung & Tenant-Zugriffskontrolle
|
|
- [x] Rate-Limiting (10 E-Mails/Minute pro User)
|
|
- [x] Form-Submission Notifications
|
|
- [x] Cache-Invalidierung bei Config-Änderungen
|
|
- [x] SMTP-Passwort-Schutz (nie in API-Responses)
|
|
- [ ] SMTP-Credentials in `.env` konfigurieren (TODO)
|
|
- [ ] Newsletter Double Opt-In E-Mails (TODO)
|
|
|
|
- [ ] **[!] 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**
|
|
- **1. 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
|
|
- **2. 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
|
|
- **3. Cookie Inventory**
|
|
- [ ] Google Ads Cookies (_gcl_au, _gcl_aw, IDE) zur Cookie Inventory Collection hinzufügen
|
|
- **4. 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
|
|
- Dokumentation: `docs/anleitungen/ANALYTICS_IMPLEMENTATION_GUIDE.md`
|
|
|
|
- [x] **Redis Caching** (Erledigt: 05.12.2025)
|
|
- [x] Redis-Cache für API-Responses
|
|
- [x] TTL-basierte Invalidierung
|
|
- [x] Pattern-basierte Cache-Invalidierung
|
|
- [ ] CDN-Integration (Cloudflare) (TODO)
|
|
|
|
- [~] **Backup-System**
|
|
- [x] Manuelle Datenbank-Backups (pg_dump)
|
|
- [x] SQL-Dateien in .gitignore
|
|
- [x] Backup via Git (temporär für Migration)
|
|
- [ ] Automatische Datenbank-Backups (Cron)
|
|
- [ ] Media-Backup zu S3/MinIO
|
|
- [ ] Disaster Recovery Plan
|
|
- [ ] Backup-Rotation (30 Tage Retention)
|
|
|
|
- [ ] **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 / Fotografin-Portfolio
|
|
- [x] Portfolio-Categories Collection (Erledigt: 06.12.2025)
|
|
- [x] Name, Slug, Beschreibung (lokalisiert)
|
|
- [x] Cover-Bild, Reihenfolge, Aktiv-Status
|
|
- [x] Portfolios Collection (Erledigt: 06.12.2025)
|
|
- [x] Titel, Beschreibung, Excerpt (lokalisiert)
|
|
- [x] Kategorie-Beziehung
|
|
- [x] Cover-Bild + Galerie-Bilder mit Captions
|
|
- [x] Projekt-Details (Kunde, Ort, Datum, Ausrüstung)
|
|
- [x] Status (draft/published/archived)
|
|
- [x] isFeatured, SEO-Felder
|
|
- [ ] Projekt-Galerie Frontend
|
|
- [ ] 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)
|
|
- [x] ANALYTICS_IMPLEMENTATION_GUIDE.md (Umami & Google Ads)
|
|
- [x] Techstack_Dokumentation_12_2025.md (Infrastruktur & Deployment)
|
|
- [ ] 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: 07.12.2025 (E-Mail-System, Portfolio-Collections, Redis Caching)*
|