- README with project overview - TDD (Technical Design Document) - AI Council Review with critical analysis - User Stories (27 stories, 120 SP) - Architecture documentation Stack: NestJS + React + PostgreSQL + Redis Server: waldseilgarten (85.199.86.188)
371 lines
7.8 KiB
Markdown
371 lines
7.8 KiB
Markdown
# AI Council Review
|
|
# Waldseilgarten Herrenberg CRM
|
|
|
|
**Sitzung:** 2026-03-14
|
|
**Reviewer:** AI Council (interne Rollen)
|
|
**Dokument:** TDD v1.0
|
|
|
|
---
|
|
|
|
## 🎭 Rollenverteilung
|
|
|
|
| Rolle | Persönlichkeit | Aufgabe |
|
|
|-------|----------------|---------|
|
|
| **🦅 Architekt** | Visionär, großes Bild | Gesamtstruktur, Skalierung |
|
|
| **🔍 Skeptiker** | Kritisch, Detailorientiert | Schwachstellen finden |
|
|
| **⚡ Pragmatiker** | Praktisch, erfahren | Umsetzbarkeit prüfen |
|
|
| **🛡️ Security-Experte** | Paranoid, gründlich | Sicherheitsrisiken |
|
|
| **💰 Product-Manager** | Nutzerfokus, ROI | Geschäftswert |
|
|
|
|
---
|
|
|
|
## 1. Executive Summary
|
|
|
|
**Gesamturteil:** ✅ **GO für Phase 1** mit kleineren Anpassungen
|
|
|
|
Der vorgeschlagene Stack (NestJS + React) ist solide und passt zum Skill-Level der vorhandenen Entwicklung. Die modulare Architektur ermöglicht iteratives Vorgehen.
|
|
|
|
**Kritische Punkte:**
|
|
- SeaDrive-Integration als Optional markieren (hohe Komplexität)
|
|
- IMAP-Worker früh testen (potenzielles Risiko)
|
|
- Google Calendar OAuth gut dokumentieren
|
|
|
|
---
|
|
|
|
## 2. Detaillierte Reviews
|
|
|
|
### 🦅 Architektur-Review
|
|
|
|
**Stärken:**
|
|
- ✅ Klare Modularität durch NestJS
|
|
- ✅ API-First Ansatz
|
|
- ✅ TypeScript durchgehend
|
|
- ✅ Container-Setup solide
|
|
|
|
**Empfehlungen:**
|
|
1. **CQRS für Reports erwägen**
|
|
- Aktuell: Direkte DB-Queries
|
|
- Besser: Read-Models für komplexe Reports
|
|
- Grund: Performance bei großen Datenmengen
|
|
|
|
2. **Event-Driven Architecture**
|
|
- Statt: Direkte Service-Aufrufe
|
|
- Besser: Events für Cross-Cutting Concerns
|
|
- Beispiel: `ProjectCreatedEvent` → EmailNotification
|
|
|
|
3. **Caching-Strategie definieren**
|
|
- Redis für Sessions ✅
|
|
- Zusätzlich: Query-Result-Caching
|
|
- TTL-Strategie dokumentieren
|
|
|
|
**Bewertung:** 8/10
|
|
|
|
---
|
|
|
|
### 🔍 Skeptiker-Review
|
|
|
|
**Probleme identifiziert:**
|
|
|
|
#### 1. **IMAP-Integration unterschätzt?**
|
|
```
|
|
Problem: IMAP ist komplexer als gedacht
|
|
- Verschiedene Server-Implementierungen
|
|
- Connection-Handling bei Timeouts
|
|
- Sync-Strategie (Delta vs. Full)
|
|
|
|
Empfehlung:
|
|
- Proof-of-Concept in Woche 1
|
|
- Library: imapflow (moderner als node-imap)
|
|
- Fallback: Manuelle E-Mail-Erfassung
|
|
```
|
|
|
|
#### 2. **SeaDrive = Hohe Komplexität**
|
|
```
|
|
Problem: SeaDrive/Seafile Integration
|
|
- FUSE-Filesystem im Container
|
|
- Rechte-Management komplex
|
|
- Sync-Konflikte
|
|
|
|
Empfehlung:
|
|
- Als "Phase 2+" markieren
|
|
- Alternative: S3-kompatible API
|
|
- Oder: Seafile REST API direkt nutzen
|
|
```
|
|
|
|
#### 3. **Fehlende Rate-Limiting**
|
|
```
|
|
Problem: Keine API-Rate-Limits definiert
|
|
- Login-Endpunkte vulnerable
|
|
- Upload-Endpunkten ohne Limits
|
|
|
|
Empfehlung:
|
|
- nestjs-rate-limiter hinzufügen
|
|
- Spezifische Limits pro Endpoint:
|
|
- /auth/login: 5/min pro IP
|
|
- /upload: 10/min pro User
|
|
```
|
|
|
|
#### 4. **Fehlende Input-Validierung Details**
|
|
```
|
|
Problem: "class-validator" erwähnt, aber keine Details
|
|
- Welche Decorators?
|
|
- Custom Validators?
|
|
|
|
Empfehlung:
|
|
- @IsEmail() für E-Mails
|
|
- @Length() für Passwörter (min 8)
|
|
- @Matches() für komplexe Regeln
|
|
- Sanitization (XSS-Prevention)
|
|
```
|
|
|
|
**Bewertung:** 6/10 (wichtige Details fehlen)
|
|
|
|
---
|
|
|
|
### ⚡ Pragmatiker-Review
|
|
|
|
**Umsetzbarkeit:** ✅ Gut
|
|
|
|
**Zeitschätzungen:**
|
|
|
|
| Phase | TDD-Schätzung | Realistisch | Risiko |
|
|
|-------|---------------|-------------|--------|
|
|
| Phase 1 | 2-3 Wochen | 3-4 Wochen | Mittel |
|
|
| Phase 2 | 1 Woche | 1-2 Wochen | Niedrig |
|
|
| Phase 3 | 1 Woche | 1 Woche | Niedrig |
|
|
| Phase 4 | 2 Wochen | 3-4 Wochen | Hoch |
|
|
| Phase 5 | 4-5 Wochen | 6-8 Wochen | Mittel |
|
|
|
|
**Gesamt:** 11 Wochen → **Realistisch: 14-18 Wochen**
|
|
|
|
**Empfehlungen:**
|
|
|
|
1. **MVP reduzieren**
|
|
```
|
|
Statt:
|
|
- Multi-Tenant
|
|
- SSO
|
|
- 2FA
|
|
|
|
Zuerst:
|
|
- Single-Tenant
|
|
- Lokale Auth
|
|
- Einfaches Passwort
|
|
```
|
|
|
|
2. **Feature-Flags nutzen**
|
|
```typescript
|
|
// Statt: Code auskommentieren
|
|
if (config.features.emailIntegration) {
|
|
// IMAP-Feature
|
|
}
|
|
```
|
|
|
|
3. **Vorhandenen Code nutzen**
|
|
- Backend ist bereits teilweise implementiert
|
|
- Frontend existiert bereits
|
|
- Fokus: Integration & Bugfixing
|
|
|
|
**Bewertung:** 7/10
|
|
|
|
---
|
|
|
|
### 🛡️ Security-Review
|
|
|
|
**Kritisch:**
|
|
|
|
#### 1. **JWT-Secret in .env**
|
|
```
|
|
Problem: JWT_SECRET in docker-compose.yml sichtbar
|
|
Risiko: Bei Repo-Leak kompromittiert
|
|
|
|
Empfehlung:
|
|
- Docker Secrets oder
|
|
- Environment-Injection bei Deployment
|
|
- Regelmäßige Rotation (alle 90 Tage)
|
|
```
|
|
|
|
#### 2. **Fehlende SQL-Injection Tests**
|
|
```
|
|
Problem: TypeORM schützt, aber keine expliziten Tests
|
|
|
|
Empfehlung:
|
|
- Test-Cases für:
|
|
- ' OR '1'='1
|
|
- UNION SELECT
|
|
- Time-based Blind SQLi
|
|
```
|
|
|
|
#### 3. **File Upload Security**
|
|
```
|
|
Problem: Upload-Endpunkte ohne Details
|
|
Risiken:
|
|
- MIME-Type spoofing
|
|
- Path traversal
|
|
- Malware-Upload
|
|
|
|
Empfehlung:
|
|
- Magic-Bytes-Check (nicht nur Extension)
|
|
- ClamAV-Integration
|
|
- Upload-Verzeichnis außerhalb Webroot
|
|
- Dateigrößen-Limit (10MB)
|
|
```
|
|
|
|
#### 4. **CORS zu offen?**
|
|
```yaml
|
|
# Aktuell:
|
|
CORS_ORIGINS: "*"
|
|
|
|
# Besser:
|
|
CORS_ORIGINS: "https://waldseilgarten-herrenberg.de"
|
|
```
|
|
|
|
#### 5. **Fehlende Audit-Logs**
|
|
```
|
|
Problem: Wer hat wann was gemacht?
|
|
|
|
Empfehlung:
|
|
- Audit-Log Tabelle
|
|
- Loggen: Login, Daten-Änderungen, Löschungen
|
|
- Unveränderlich speichern
|
|
```
|
|
|
|
**Bewertung:** 5/10 (mehrere kritische Lücken)
|
|
|
|
---
|
|
|
|
### 💰 Product-Manager-Review
|
|
|
|
**Geschäftswert:** ✅ Hoch
|
|
|
|
**Nutzer-Jobs:**
|
|
|
|
| Job | Wichtigkeit | Erfüllung im TDD |
|
|
|-----|-------------|------------------|
|
|
| Kunden finden | Kritisch | ✅ Gut |
|
|
| Projekte verfolgen | Kritisch | ✅ Gut |
|
|
| Dokumente ablegen | Wichtig | ✅ Gut |
|
|
| E-Mails zuordnen | Wichtig | ⚠️ Komplex |
|
|
| Termine syncen | Nice-to-have | ⚠️ Optional |
|
|
|
|
**Konkurrenz-Analyse:**
|
|
- HubSpot: Zu teuer, zu komplex
|
|
- Pipedrive: Gut, aber nicht self-hosted
|
|
- **Dieses CRM:** Perfekte Nische
|
|
|
|
**Empfehlungen:**
|
|
|
|
1. **Onboarding-Flow**
|
|
```
|
|
Fehlt im TDD:
|
|
- Erstkonfiguration Wizard
|
|
- Beispieldaten generieren
|
|
- Tutorial/Tour
|
|
```
|
|
|
|
2. **Mobile-First nicht vergessen**
|
|
```
|
|
TDD erwähnt PWA, aber:
|
|
- Keine Mobile-Optimierung Details
|
|
- Touch-Gestures?
|
|
- Offline-Modus?
|
|
```
|
|
|
|
3. **Export-Funktion**
|
|
```
|
|
Kritisch für Kunden:
|
|
- "Meine Daten gehören mir"
|
|
- CSV/Excel Export
|
|
- JSON-Export für Migration
|
|
```
|
|
|
|
**Bewertung:** 7/10
|
|
|
|
---
|
|
|
|
## 3. Konsens-Empfehlungen
|
|
|
|
### ✅ Beibehalten
|
|
- NestJS + React Stack
|
|
- PostgreSQL + Redis
|
|
- Modulare Architektur
|
|
- Docker/Podman Setup
|
|
|
|
### 🔄 Anpassen
|
|
|
|
#### 1. **SeaDrive → Optional**
|
|
```
|
|
Statt: Pflicht-Feature
|
|
Besser: Phase 2+ mit Fallback
|
|
```
|
|
|
|
#### 2. **IMAP zuerst testen**
|
|
```
|
|
Aktion: Proof-of-Concept in Woche 1
|
|
Falls zu komplex: Manuelle Erfassung
|
|
```
|
|
|
|
#### 3. **Security Hardening**
|
|
```
|
|
Muss:
|
|
- Rate-Limiting
|
|
- JWT-Secret-Management
|
|
- File-Upload Security
|
|
- Audit-Logging
|
|
```
|
|
|
|
#### 4. **Zeitplan realistisch**
|
|
```
|
|
Statt: 11 Wochen
|
|
Realistisch: 14-18 Wochen
|
|
```
|
|
|
|
### ❌ Hinzufügen
|
|
|
|
| Feature | Priorität | Aufwand |
|
|
|---------|-----------|---------|
|
|
| Rate-Limiting | Kritisch | Klein |
|
|
| Audit-Logging | Hoch | Mittel |
|
|
| Feature-Flags | Hoch | Klein |
|
|
| Data-Export | Hoch | Klein |
|
|
| API-Doku (Swagger) | Mittel | Klein |
|
|
|
|
---
|
|
|
|
## 4. Final Voting
|
|
|
|
| Rolle | Score | Verdict |
|
|
|-------|-------|---------|
|
|
| 🦅 Architekt | 8/10 | ✅ GO |
|
|
| 🔍 Skeptiker | 6/10 | ⚠️ GO mit Bedenken |
|
|
| ⚡ Pragmatiker | 7/10 | ✅ GO |
|
|
| 🛡️ Security | 5/10 | ⚠️ GO nach Hardening |
|
|
| 💰 Product | 7/10 | ✅ GO |
|
|
|
|
### **Endergebnis: 6.6/10** → ✅ **GO mit Anpassungen**
|
|
|
|
---
|
|
|
|
## 5. Action Items
|
|
|
|
| # | Aufgabe | Verantwortlich | Deadline |
|
|
|---|---------|----------------|----------|
|
|
| 1 | Rate-Limiting implementieren | Backend | Phase 1 |
|
|
| 2 | IMAP Proof-of-Concept | Backend | Woche 1 |
|
|
| 3 | Security-Checkliste erstellen | Security | Vor Deployment |
|
|
| 4 | SeaDrive als Optional markieren | PM | Dokumentation |
|
|
| 5 | Zeitplan anpassen (14-18 Wochen) | PM | Roadmap |
|
|
| 6 | Feature-Flags Setup | Architekt | Phase 1 |
|
|
|
|
---
|
|
|
|
## 6. Follow-Up Review
|
|
|
|
**Termin:** Nach Phase 1 Completion
|
|
**Ziel:** Validierung der Annahmen, Anpassung für Phasen 2-5
|
|
|
|
---
|
|
|
|
**Review abgeschlossen:** 2026-03-14
|
|
**Nächster Schritt:** TDD anpassen basierend auf Empfehlungen
|