docs: update CLAUDE.md and TODO.md with recent features

- 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>
This commit is contained in:
Martin Porwoll 2025-12-07 20:22:05 +00:00
parent 19fcb4d837
commit 966af755b4
2 changed files with 151 additions and 19 deletions

128
CLAUDE.md
View file

@ -38,10 +38,25 @@ Internet → 37.24.237.181 → Caddy (443) → Payload (3000)
/home/payload/payload-cms/ # Projektroot /home/payload/payload-cms/ # Projektroot
├── src/ ├── src/
│ ├── payload.config.ts # Haupt-Konfiguration │ ├── payload.config.ts # Haupt-Konfiguration
│ └── collections/ │ ├── collections/ # Alle Collections
│ ├── Users.ts │ │ ├── Users.ts
│ ├── Media.ts │ │ ├── Media.ts
│ └── Tenants.ts │ │ ├── Tenants.ts
│ │ ├── Posts.ts
│ │ ├── Categories.ts
│ │ ├── Portfolios.ts
│ │ ├── PortfolioCategories.ts
│ │ ├── EmailLogs.ts
│ │ └── ...
│ ├── lib/
│ │ ├── email/ # E-Mail-System
│ │ │ ├── tenant-email-service.ts
│ │ │ └── payload-email-adapter.ts
│ │ ├── search.ts # Volltextsuche
│ │ └── redis.ts # Redis Cache Client
│ └── hooks/ # Collection Hooks
│ ├── sendFormNotification.ts
│ └── invalidateEmailCache.ts
├── .env # Umgebungsvariablen ├── .env # Umgebungsvariablen
├── ecosystem.config.cjs # PM2 Config ├── ecosystem.config.cjs # PM2 Config
└── .next/ # Build Output └── .next/ # Build Output
@ -56,6 +71,18 @@ PAYLOAD_PUBLIC_SERVER_URL=https://pl.c2sgmbh.de
NEXT_PUBLIC_SERVER_URL=https://pl.c2sgmbh.de NEXT_PUBLIC_SERVER_URL=https://pl.c2sgmbh.de
NODE_ENV=production NODE_ENV=production
PORT=3000 PORT=3000
# E-Mail (Global Fallback)
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_SECURE=false
SMTP_USER=user@example.com
SMTP_PASS=secret
SMTP_FROM_ADDRESS=noreply@c2sgmbh.de
SMTP_FROM_NAME=Payload CMS
# Redis Cache
REDIS_URL=redis://localhost:6379
``` ```
## Multi-Tenant Plugin ## Multi-Tenant Plugin
@ -145,15 +172,102 @@ PGPASSWORD=Finden55 psql -h 10.10.181.101 -U payload -d payload_db -c "\dt *_loc
- **Admin Panel:** https://pl.c2sgmbh.de/admin - **Admin Panel:** https://pl.c2sgmbh.de/admin
- **API:** https://pl.c2sgmbh.de/api - **API:** https://pl.c2sgmbh.de/api
- **E-Mail API:** https://pl.c2sgmbh.de/api/send-email (POST, Auth erforderlich)
## E-Mail-System
Multi-Tenant E-Mail-System mit tenant-spezifischer SMTP-Konfiguration:
**Architektur:**
- Globaler SMTP als Fallback (via .env)
- Tenant-spezifische SMTP in Tenants Collection
- Transporter-Caching mit automatischer Invalidierung
- EmailLogs Collection für Audit-Trail
**Tenant E-Mail-Konfiguration:**
```
Tenants → email → fromAddress, fromName, replyTo
→ email → useCustomSmtp (Checkbox)
→ email → smtp → host, port, secure, user, pass
```
**API-Endpoint `/api/send-email`:**
```bash
curl -X POST https://pl.c2sgmbh.de/api/send-email \
-H "Content-Type: application/json" \
-H "Cookie: payload-token=..." \
-d '{
"to": "empfaenger@example.com",
"subject": "Betreff",
"html": "<p>Inhalt</p>",
"tenantId": 1
}'
```
**Sicherheit:**
- Authentifizierung erforderlich
- Tenant-Zugriffskontrolle (User muss Tenant-Mitglied sein)
- Rate-Limiting: 10 E-Mails/Minute pro User
- SMTP-Passwort nie in API-Responses
## Redis Caching
Redis wird für API-Response-Caching und E-Mail-Transporter-Caching verwendet:
```typescript
import { redis } from '@/lib/redis'
// Cache setzen (TTL in Sekunden)
await redis.set('key', JSON.stringify(data), 'EX', 60)
// Cache lesen
const cached = await redis.get('key')
// Pattern-basierte Invalidierung
await redis.keys('posts:*').then(keys => keys.length && redis.del(...keys))
```
## Datenbank-Direktzugriff ## Datenbank-Direktzugriff
````bash ```bash
PGPASSWORD=Finden55 psql -h 10.10.181.101 -U payload -d payload_db PGPASSWORD=Finden55 psql -h 10.10.181.101 -U payload -d payload_db
# Nützliche Queries # Nützliche Queries
SELECT * FROM tenants; SELECT * FROM tenants;
SELECT * FROM users_tenants; SELECT * FROM users_tenants;
SELECT * FROM email_logs ORDER BY created_at DESC LIMIT 10;
\dt -- Alle Tabellen \dt -- Alle Tabellen
```All ```
````
## Collections Übersicht
| Collection | Slug | Beschreibung |
|------------|------|--------------|
| Users | users | Benutzer mit isSuperAdmin Flag |
| Tenants | tenants | Mandanten mit E-Mail-Konfiguration |
| Media | media | Medien mit 11 responsive Image Sizes |
| Pages | pages | Seiten mit Blocks |
| Posts | posts | Blog/News/Presse mit Kategorien |
| Categories | categories | Kategorien für Posts |
| Portfolios | portfolios | Portfolio-Galerien (Fotografie) |
| PortfolioCategories | portfolio-categories | Kategorien für Portfolios |
| Testimonials | testimonials | Kundenbewertungen |
| NewsletterSubscribers | newsletter-subscribers | Newsletter mit Double Opt-In |
| SocialLinks | social-links | Social Media Links |
| Forms | forms | Formular-Builder |
| FormSubmissions | form-submissions | Formular-Einsendungen |
| EmailLogs | email-logs | E-Mail-Protokollierung |
| CookieConfigurations | cookie-configurations | Cookie-Banner Konfiguration |
| CookieInventory | cookie-inventory | Cookie-Inventar |
| ConsentLogs | consent-logs | Consent-Protokollierung |
## Globals
| Global | Slug | Beschreibung |
|--------|------|--------------|
| SiteSettings | site-settings | Allgemeine Website-Einstellungen |
| Navigation | navigation | Navigationsmenü |
| SEOSettings | seo-settings | SEO-Einstellungen |
| PrivacyPolicySettings | privacy-policy-settings | Datenschutz-Einstellungen |
*Letzte Aktualisierung: 07.12.2025*

View file

@ -86,10 +86,18 @@
- DNS-Einträge prüfen - DNS-Einträge prüfen
- Caddy-Konfiguration für alle Domains - Caddy-Konfiguration für alle Domains
- [ ] **[!] E-Mail-Adapter einrichten** - [x] **E-Mail-System** (Erledigt: 06.12.2025)
- SMTP-Konfiguration - [x] Multi-Tenant Email Adapter für Payload CMS
- Newsletter Double Opt-In E-Mails - [x] Tenant-spezifische SMTP-Konfiguration in Tenants Collection
- Kontaktformular-Benachrichtigungen - [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** - [ ] **[!] Frontend-Komponenten entwickeln**
- React/Next.js Komponenten für alle Blocks - React/Next.js Komponenten für alle Blocks
@ -162,10 +170,11 @@
- [ ] Google Ads API Credentials in Backend .env - [ ] Google Ads API Credentials in Backend .env
- Dokumentation: `docs/anleitungen/ANALYTICS_IMPLEMENTATION_GUIDE.md` - Dokumentation: `docs/anleitungen/ANALYTICS_IMPLEMENTATION_GUIDE.md`
- [ ] **Caching-Strategie** - [x] **Redis Caching** (Erledigt: 05.12.2025)
- Redis-Cache für API - [x] Redis-Cache für API-Responses
- CDN-Integration (Cloudflare) - [x] TTL-basierte Invalidierung
- Invalidierung bei Updates - [x] Pattern-basierte Cache-Invalidierung
- [ ] CDN-Integration (Cloudflare) (TODO)
- [~] **Backup-System** - [~] **Backup-System**
- [x] Manuelle Datenbank-Backups (pg_dump) - [x] Manuelle Datenbank-Backups (pg_dump)
@ -195,9 +204,18 @@
- [ ] Leistungs-Übersicht - [ ] Leistungs-Übersicht
- [ ] Karriere-Seite mit Stellenangeboten - [ ] Karriere-Seite mit Stellenangeboten
### gunshin.de ### gunshin.de / Fotografin-Portfolio
- [ ] Portfolio-Collection - [x] Portfolio-Categories Collection (Erledigt: 06.12.2025)
- [ ] Projekt-Galerie - [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 - [ ] Referenzen-Slider
### zweitmein.ng ### zweitmein.ng
@ -281,4 +299,4 @@
--- ---
*Letzte Aktualisierung: 05.12.2025 (Git & GitHub Setup, isSuperAdmin Feld, Techstack-Dokumentation)* *Letzte Aktualisierung: 07.12.2025 (E-Mail-System, Portfolio-Collections, Redis Caching)*