cms.c2sgmbh/docs/PROJECT_STATUS.md
2026-02-17 21:06:27 +00:00

17 KiB

Projekt Status - Februar 2026

Stand: 17. Februar 2026

Zusammenfassung

Die komplette Entwicklungsinfrastruktur ist eingerichtet und funktionsfähig:

  • Payload CMS Multi-Tenant (Dev + Prod) - v3.76.1 stabil
  • Multi-Frontend Development Environment
  • AI-gestützte Entwicklungstools
  • Reverse Proxy Stack (Caddy + Nginx)
  • Analytics (Umami)
  • Community Management System (YouTube, Facebook, Instagram)
  • YouTube Operations Hub (Multi-Kanal-Verwaltung)
  • Multi-Server Orchestration (SSH, Contracts, CI/CD, Plesk Production)
  • 2 Production-Sites live: blogwoman.de + porwoll.de

Abgeschlossen

Infrastruktur VLAN 181 (Development)

LXC Hostname IP Service Status
699 sv-caddy 10.10.181.99 Caddy Reverse Proxy Running
700 sv-payload 10.10.181.100 Payload CMS + Redis Running
701 sv-postgres 10.10.181.101 PostgreSQL 17 + Redis Cmd Running
702 sv-dev-payload 10.10.181.102 Payload Experimental ⏸️ Stopped
703 sv-analytics 10.10.181.103 Umami Analytics Running
704 sv-frontend 10.10.181.104 Multi-Project Next.js Running

Hetzner 3 (CMS Production)

  • Debian 13 Installation
  • PostgreSQL 17 mit payload_db und umami_db
  • Redis Cache
  • Payload CMS Production (cms.c2sgmbh.de)
  • Umami Analytics Production (analytics.c2sgmbh.de)
  • Nginx Reverse Proxy mit Let's Encrypt
  • PM2 Process Management
  • Claude Code CLI
  • Backup-Scripts (täglich)
  • CVE-2025-55182 Hotfix

Hetzner 1 + 2 (Frontend Production)

  • Hetzner 1 (78.46.87.137): blogwoman.de — Plesk, nginx-only, Passenger 6.1.0, Node 22
  • Hetzner 2 (94.130.141.114): porwoll.de — Plesk, nginx-only, Passenger 6.1.0, Node 22
  • GitHub Webhooks für Auto-Deploy bei Push auf main
  • SSH-Zugriff von sv-payload (root, key: plesk_deploy)
  • Env-Vars pro Domain (Tenant-spezifisch)

Caddy Reverse Proxy (sv-caddy)

  • Caddy 2.9.x mit Cloudflare DNS Plugin
  • Wildcard SSL für *.porwoll.tech
  • Cloudflare DNS-Challenge
  • Routing für alle Services
  • Security Headers

Payload CMS

  • Multi-Tenant Plugin
  • Redis Caching
  • Package-Versionen synchronisiert:
    • Next.js 16.2.0-canary.41
    • React 19.2.3
    • Payload 3.76.1
  • GitHub Repository (complexcaresolutions/cms.c2sgmbh)
  • YouTube Analytics Dashboard (4-Tab-Dashboard mit Kanal-Auswahl)
  • Admin-Nav Sidebar Refactoring (nativer Payload-Stil)
  • Globaler TypeScript-Typecheck (pnpm typecheck) wieder fehlerfrei
  • CI/CD Pipeline (GitHub Actions):
    • CI: ESLint, TypeScript, Tests, Build, E2E
    • Security: Gitleaks, pnpm audit, CodeQL
    • Staging: Auto-Deploy auf develop-Push
    • Production: Manuelles Deploy mit Backup + Rollback

Community Management System

  • YouTube Integration:
    • YouTubeChannels Collection (Multi-Kanal-Verwaltung)
    • YouTubeContent Collection (Videos + Shorts)
    • YtSeries Collection (Serien mit Branding)
    • YtNotifications Collection (Handlungsbedarf)
    • YouTube Operations Dashboard
    • Automatische Kommentar-Synchronisation
  • Meta Integration (Facebook + Instagram):
    • SocialAccounts Collection (OAuth-Verbindungen)
    • Meta OAuth Flow mit Long-Lived Token (60 Tage)
    • FacebookSyncService + InstagramSyncService
    • Kommentar-Synchronisation über UnifiedSyncService
    • Community Inbox mit Plattform-Filter (YouTube + Facebook + Instagram)
    • Community Analytics Dashboard
  • Community Reports:
    • Tägliche/wöchentliche E-Mail-Reports
    • Konfigurierbare Report-Settings
    • Cron-basierter Versand

Monitoring & Alerting Dashboard

  • System-Überwachung:
    • CPU, RAM, Disk-Auslastung (Node.js os-Modul)
    • PM2 Prozess-Status (Payload + Queue-Worker)
    • Load Average, Uptime
  • Service-Status:
    • PostgreSQL, PgBouncer, Redis, SMTP, OAuth-Tokens, BullMQ Queues, Cron-Jobs
  • Performance-Tracking:
    • Response-Zeiten (Avg, P95, P99), Error-Rate, Requests/Minute
    • In-Memory Ring-Buffer (10.000 Einträge)
  • Alerting:
    • Konfigurierbare Regeln (MonitoringAlertRules Collection)
    • Multi-Channel: Email, Slack, Discord
    • Cooldown-basierte Deduplizierung
  • Structured Logging:
    • MonitoringLogs Collection mit Level/Source-Filter
    • Fire-and-forget Logger mit Payload-Fallback
  • Dashboard UI:
    • 5-Tab-Dashboard unter /admin/monitoring
    • SSE-basierte Echtzeit-Updates
    • Trend-Charts, Gauge-Widgets, Service-Karten
  • Data Retention:
    • Snapshots: 7 Tage, Logs: 30 Tage, Alert-History: 90 Tage

sv-frontend (Multi-Project)

  • Node.js 22.x + pnpm
  • AI-Tools installiert:
    • Claude Code 2.0.72
    • Codex CLI 0.73.0
    • Gemini CLI 0.21.2
  • 9 Frontend-Projekte initialisiert
  • Systemd Services (Ports 3000-3008)
  • SSH-Zugriff mit Key
  • VS Code Remote-SSH kompatibel

Multi-Server Orchestration (Phase 1-8)

  • SSH-Infrastruktur: sv-payload → sv-frontend, Hetzner 1/2 (root)
  • payload-contracts Repo: Shared types, API client, block registry
    • Type-Extraction aus CMS payload-types.ts
    • createPayloadClient() mit Tenant-Isolation
    • createBlockRenderer() mit discriminated unions
  • Work-Order-System: Git-basierte Koordination CMS → Frontends
    • Template + Scripts (create-work-order.sh, execute-work-order.sh)
  • blogwoman.de Migration: Contracts-Client + Bridge-Pattern
  • porwoll.de Migration: Direkte Contracts-Types, 9 Blocks
  • Claude Code auf sv-frontend: v2.1.37, CLAUDE.md in allen Repos
  • Plesk Production Deployment:
    • Hetzner 1 (78.46.87.137): blogwoman.de — nginx-only + Passenger
    • Hetzner 2 (94.130.141.114): porwoll.de — nginx-only + Passenger
    • GitHub Webhooks für Auto-Deploy (Push main → Plesk Git Pull → Build)
  • CI/CD GitHub Actions:
    • CI: Lint + Build auf push develop/main
    • Staging Deploy: SSH via UDM Pro SE Port-Forward (37.24.237.181:2204)
    • Production Deploy: Plesk Git-Integration (Webhook)

GitHub Repositories

Organisation: complexcaresolutions (Public Frontend-Repos)

  • cms.c2sgmbh (Payload CMS) — Internal
  • payload-contracts (Shared Types + API Client) — Internal
  • frontend.porwoll.de — Live auf porwoll.de
  • frontend.blogwoman.de — Live auf blogwoman.de
  • frontend.caroline-porwoll.com
  • frontend.caroline-porwoll.de
  • frontend.complexcaresolutions.de
  • frontend.gunshin.de
  • frontend.sensualmoment.de
  • frontend.zweitmeinu.ng
  • frontend.zytoskandal.de

⚠️ Kritische Aufgaben

Priorität Aufgabe Status
Meta (Facebook/Instagram) Kommentar-Sync Erledigt
YouTube Thumbnail-Download für Offline-Anzeige Erledigt
Monitoring & Alerting Dashboard Erledigt

🔜 Nächste Schritte

Erledigt

  1. Meta (Facebook/Instagram) Kommentar-Synchronisation
  2. YouTube Thumbnail-Download
  3. Monitoring & Alerting Dashboard
  4. Multi-Server Orchestration (8 Phasen)
  5. porwoll.de Frontend (Live auf Plesk)
  6. blogwoman.de Frontend (Live auf Plesk)
  7. CI/CD Pipelines (GitHub Actions + Plesk Webhooks)

Kurzfristig

  1. Kontaktformular: Multi-Tenant Refactoring + Production Deployment
  2. porwoll.de: Fehlende Blocks implementieren (~6 Blocks via Work Orders)
  3. blogwoman.de: Types-Bridge durch direkte Contracts-Imports ersetzen
  4. blogwoman.de: YouTube-Serien-Integration vervollständigen

Mittelfristig (März/April 2026)

  1. complexcaresolutions.de Frontend starten
  2. caroline-porwoll.com/de Frontend starten
  3. Cookie-Banner implementieren (DSGVO)
  4. Weitere Frontends auf Plesk deployen

Langfristig (Q2 2026)

  1. Alle 9 Frontends entwickeln und deployen
  2. AI-gestützte Kommentar-Moderation
  3. Performance-Optimierung (ISR, Edge Caching)

📊 Service-URLs

Development (porwoll.tech)

Service URL Status
Portal https://porwoll.tech
Payload CMS https://pl.porwoll.tech
Redis Commander https://redis.porwoll.tech
Umami Analytics https://umami.porwoll.tech
Frontend porwoll.de https://porwoll-dev.porwoll.tech
(8 weitere) https://*-dev.porwoll.tech ⏸️ On-Demand

Production (Hetzner)

Service URL Server Status
Payload CMS https://cms.c2sgmbh.de Hetzner 3
Umami Analytics https://analytics.c2sgmbh.de Hetzner 3
blogwoman.de https://blogwoman.de Hetzner 1
porwoll.de https://porwoll.de Hetzner 2

🔧 Quick Commands

sv-frontend

# SSH Zugang
ssh frontend@10.10.181.104

# Service starten/stoppen
systemctl start frontend-porwoll
systemctl stop frontend-porwoll

# AI-Tools
claude  # Claude Code
codex   # Codex CLI
gemini  # Gemini CLI

Hetzner 3 (CMS Production)

# SSH Zugang
ssh payload@162.55.85.18

# Deploy
~/deploy.sh

# Logs
pm2 logs payload

Hetzner 1 + 2 (Frontend Production)

# SSH Zugang (von sv-payload)
ssh hetzner1    # 78.46.87.137 - blogwoman.de
ssh hetzner2    # 94.130.141.114 - porwoll.de

# Logs
ssh hetzner1 "passenger-status"
ssh hetzner2 "passenger-status"

# Git-Status prüfen
ssh hetzner1 "cd /var/www/vhosts/blogwoman.de/httpdocs && git log --oneline -3"
ssh hetzner2 "cd /var/www/vhosts/porwoll.de/httpdocs && git log --oneline -3"

📝 Änderungsprotokoll

17.02.2026

  • Kontaktformular Multi-Tenant Refactoring:
    • forms + form-submissions tenant-scoped via multiTenantPlugin (customTenantField)
    • ContactFormBlock refaktoriert: Formular-Referenz statt hardcoded recipientEmail
    • setSubmissionTenant Hook: Tenant auto-propagation Form → Submission
    • sendFormNotification Hook: E-Mail-Benachrichtigung via Tenant-SMTP
    • FormSubmissionsOverrides: Tenant-Feld, Status-Workflow, Notizen, Antwort-Tracking
    • Migration: 20260217_120000_add_tenant_to_forms.ts
    • Production (porwoll.de): Formular erstellt, Block verknüpft, E2E getestet (inkl. E-Mail-Empfang)
    • Plesk Hetzner 2: NEXT_PUBLIC_TENANT_ID von 1 auf 4 korrigiert (war Ursache für site-wide 404s)
  • Globaler Typecheck stabilisiert (Commit 4386ac5):
    • Payload-Typen neu generiert (src/payload-types.ts) und Typkonflikte über API-Routen, Integrationen, Monitoring und Reporting bereinigt
    • community-interactions Sync-Pfade (YouTube/Facebook/Instagram) auf Pflichtfelder und kompatible Literal-Typen angepasst
    • Monitoring- und Alerting-Typen konsolidiert (u. a. Cooldown-Keying im AlertEvaluator)
    • RulesEngine-Notification-Payload auf aktuelles yt-notifications Schema korrigiert (recipient, relatedVideo, read)
    • Verifikation: pnpm typecheck erfolgreich (0 TypeScript-Fehler)

15.02.2026

  • Multi-Server Orchestration (Phase 1-8) abgeschlossen:
    • SSH-Infrastruktur: sv-payload → sv-frontend (key: frontend_deploy), Hetzner 1/2 (key: plesk_deploy)
    • payload-contracts Repo: Shared types, API client, block registry (Git-Dependency)
    • Work-Order-System: create-work-order.sh + execute-work-order.sh für CMS→Frontend-Koordination
    • blogwoman.de: Migration auf Contracts-Client (Bridge-Pattern), live auf Hetzner 1
    • porwoll.de: Direkte Contracts-Types, 9 Blocks, live auf Hetzner 2
    • Plesk Production: nginx-only + Passenger 6.1.0, GitHub Webhooks (Auto-Deploy)
    • CI/CD: Lint+Build CI, Staging-Deploy via SSH (UDM Pro SE Port-Forward 37.24.237.181:2204)
    • Claude Code v2.1.37 auf sv-frontend mit CLAUDE.md in allen Repos
  • Monitoring & Alerting Dashboard implementiert:
    • 4 neue Collections: MonitoringSnapshots, MonitoringLogs, MonitoringAlertRules, MonitoringAlertHistory
    • Backend-Services: MonitoringService, PerformanceTracker, MonitoringLogger, AlertEvaluator, SnapshotCollector
    • 8 REST-Endpoints unter /api/monitoring/* + SSE-Stream
    • 5-Tab Admin Dashboard (System Health, Services, Performance, Alerts, Logs)
    • Data Retention Policies (7d/30d/90d)
    • 31 Tests für Monitoring-Module (Types, Service, Tracker, Logger, Evaluator)
    • Feature-Branch: feature/monitoring-dashboard

14.02.2026

  • YouTube Thumbnail-Download implementiert:
    • downloadAndUploadImage() Utility für Bild-Download → Payload Media
    • afterChange Hook auf YouTubeContent: Auto-Download bei leerem Thumbnail
    • afterChange Hook auf YouTubeChannels: Auto-Download Kanalbild
    • Bulk-Endpoint: POST /api/youtube/thumbnails/bulk (Super-Admin)
    • channelThumbnailUrl Feld zu YouTubeChannels hinzugefügt
  • Meta Kommentar-Sync abgeschlossen:
    • /api/community/sync verwendet jetzt UnifiedSyncService (alle Plattformen)
    • Vorher: Nur YouTube-Sync über Legacy-Service
    • Optionale Plattform-Filterung im Request-Body
  • CI/CD Pipeline fertiggestellt:
    • ESLint, TypeScript, Tests, Build, E2E in CI
    • Staging Auto-Deploy bei Push auf develop
    • Production Deploy mit Backup + Auto-Rollback
    • Security Scanning (Gitleaks, CodeQL, pnpm audit)
  • CLAUDE.md Dokumentation erweitert:
    • Community Management System vollständig dokumentiert
    • 14 API-Endpoints, Architektur-Diagramm, Meta-Integration
    • CI/CD Pipeline dokumentiert

13.02.2026

  • Payload CMS 3.69.0 → 3.76.1 Upgrade:
    • Login-Bug (#15243) mit hasMany Relationships ist in 3.76.1 behoben
    • Custom Admin Views funktionieren wieder (path-to-regexp Bug gefixt)
  • Next.js 15.5.9 → 16.2.0-canary.41 Upgrade
  • YouTube Analytics Dashboard implementiert:
    • 4-Tab-Dashboard (Übersicht, Videos, Audience, Engagement)
    • Kanal-Auswahl für Multi-Channel-Support
    • Tab-Switch-Crash und Channel-Selector Bugs gefixt
  • Admin-Nav Sidebar Refactoring:
    • Sidebar-Navigation auf nativen Payload-Stil umgestellt
    • Einheitliche Nav-Groups für alle Custom Views
  • tsx als explizite devDependency hinzugefügt (Queue-Worker Abhängigkeit)
  • Dokumentation konsolidiert:
    • Alle Versionsnummern aktualisiert
    • BUG_REPORT_CUSTOM_VIEWS.md entfernt (obsolet)
    • .env.example auf PostgreSQL korrigiert
    • README.md projektspezifisch ersetzt

17.01.2026

  • Dokumentation bereinigt:
    • docs/anleitungen/TODO.md gelöscht (redundant mit PROJECT_STATUS.md)
    • docs/STAGING-DEPLOYMENT.md auf Quick Reference reduziert
  • Payload 3.72.0 Login-Bug identifiziert:
    • Bug: Login schlägt fehl bei Usern mit hasMany Relationships (tenants, youtubeChannels)
    • GitHub Issue erstellt: #15243
    • Empfehlung: Bei 3.69.0 bleiben bis Fix verfügbar

09.01.2026

  • YtSeries Collection implementiert:
    • YouTube-Serien mit eigenem Branding (Logo, Farben)
    • Relationship zu YouTubeChannels
    • YouTube-Playlist-Integration
  • Community Management Phase 2:
    • Meta (Facebook/Instagram) OAuth-Integration
    • MetaAccounts Collection für Kontoverwaltung
    • Geplant: Kommentar-Synchronisation für Meta-Plattformen

05.01.2026

  • Community Management Phase 1:
    • YouTubeChannels Collection (Multi-Kanal-Verwaltung)
    • YouTubeContent Collection (Videos + Shorts)
    • YtNotifications Collection (Handlungsbedarf-System)
    • YouTube Operations Dashboard
    • Kommentar-Synchronisation via YouTube Data API
    • Community Reports (E-Mail)

29.12.2025

  • Dokumentation konsolidiert und aktualisiert:
    • CLAUDE.md: Collections (40+) und Blocks (37) vollständig dokumentiert
    • CLAUDE.md: Neue Collections (Products, Tags, Authors, Locations, Partners, Jobs, Downloads, Events)
    • CLAUDE.md: Neue Blocks (ImageSlider, Blogging, Team-Filter, Feature-Blocks, Interactive-Blocks)
    • CLAUDE.md: Globals-Abschnitt korrigiert (SiteSettings/Navigations sind jetzt Collections)
    • docs/INFRASTRUCTURE.md, docs/DEPLOYMENT.md aktualisiert
    • docs/anleitungen/*.md auf aktuelle URLs korrigiert

27.12.2025

  • Payload CMS Update 3.68.4 → 3.69.0
  • Bug-Fixes Admin Panel:
    • Login Redirect Loop behoben (formatAdminURL Fix)
    • Speichern-Button für User-Account repariert (Access Control)
    • Einstellungen-Gruppe in Navigation sichtbar (SEOSettings Access)
  • Datenbank-Schema aktualisiert (site_settings_id, navigations_id)
  • Nicht benötigte Dateien entfernt (custom login page, migrations_backup)
  • ImportMap regeneriert

18.12.2025

  • sv-frontend (LXC 704) komplett eingerichtet
  • 9 GitHub Repositories erstellt
  • Alle Next.js Projekte initialisiert
  • Systemd Services für alle Frontends
  • Caddy Routing für *-dev.porwoll.tech
  • AI-Tools (Claude Code, Codex, Gemini) installiert
  • Infrastruktur-Dokumentation aktualisiert

12.12.2025

  • sv-caddy mit Cloudflare DNS-Challenge
  • Wildcard SSL für porwoll.tech
  • Redis Commander auf sv-postgres
  • pgAdmin4 entfernt (MIME-Type Probleme)

11.12.2025

  • Hetzner 3 Production Setup
  • Payload CMS Migration
  • Umami Analytics Production
  • Redis Caching (Dev + Prod)
  • Package-Versionen synchronisiert

26.11.2025

  • Initial Payload CMS Setup
  • Multi-Tenant Plugin
  • PostgreSQL auf sv-postgres
  • Erste Tenants angelegt