---
title: 'Zitare: Production Readiness Audit'
description: 'Bewertung der Zitat-App - schlankes Backend, deployed auf mana.how, aber keine Tests und fehlende Dokumentation'
date: 2026-03-19
app: 'zitare'
author: 'Till Schneider'
tags: ['audit', 'zitare', 'production-readiness']
score: 62
scores:
  backend: 72
  frontend: 78
  database: 75
  testing: 0
  deployment: 92
  documentation: 20
  security: 70
  ux: 75
status: 'beta'
stats:
  backendModules: 5
  webRoutes: 13
  components: 2
  dbTables: 2
  testFiles: 0
  testCount: 0
  languages: 2
---

## Zusammenfassung

Zitare ist die **einzige App neben Calendar die produktiv deployed** ist (zitare.mana.how). Schlankes Backend mit Favorites + Lists, solide Web-App mit Svelte 5 und PWA. Aber: **Null Tests**, kein CLAUDE.md, und das einfachste Schema aller Apps. Die App profitiert von der statischen Quote-Content-Bibliothek (64 Zitate in 6 Sprachen).

## Backend (72/100)

**Stärken:**

- 5 Module: Favorite, List, Admin, Database, Health
- Saubere NestJS-Architektur
- Admin-Endpoints für GDPR (getUserData, deleteUserData)
- ServiceAuthGuard für Admin-Zugriff
- Conflict-Detection bei Favorites

**Lücken:**

- Nur 3 Controller (minimal)
- Keine Metrics/Monitoring
- Kein ThrottlerModule (Rate Limiting fehlt)

## Frontend (78/100)

**Stärken:**

- 13 Routes: Home, Categories, Favorites, Lists, Search, Settings, Feedback
- 7 Stores (Svelte 5 Runes) inkl. SSO-Support
- QuoteCard Komponente mit Share, Favorite Toggle
- Kategorie-Gradients (10 Farben)
- Token Auto-Refresh auf 401

**Lücken:**

- Nur 2 eigene Komponenten (sehr wenige)
- Kein Error Boundary
- Keine Skeleton Loading States

## Database (75/100)

**Stärken:**

- 2 Tabellen: favorites, user_lists
- Unique Constraint auf (user_id, quote_id)
- JSONB für flexible quote_ids in Listen
- Drizzle ORM konfiguriert

**Lücken:**

- Kein Seed-Script
- Nur 2 Tabellen - sehr minimal
- Keine Indexes auf user_id (Performance bei Scale)

## Testing (0/100)

**Keine Tests vorhanden.** Weder Unit, Integration noch E2E Tests. Kein Jest Config. Größte Schwachstelle der App.

## Deployment (92/100)

**Stärken:**

- **Produktiv deployed** auf zitare.mana.how
- Multi-Stage Dockerfiles (Backend + Web)
- Health Checks (30s Interval, 3 Retries)
- docker-compose.macmini.yml vollständig konfiguriert
- Backend + Web Services mit Dependency Chain
- CORS für Production Domain

**Lücken:**

- Kein automatischer CI/CD Job (manuelles Deployment)

## Documentation (20/100)

**Kritische Lücke:** Kein `apps/zitare/CLAUDE.md` vorhanden. Keine API-Dokumentation. Kein README. Nur die Monorepo-Root-Doku referenziert Zitare.

## Security (70/100)

**Stärken:**

- JwtAuthGuard auf User-Endpoints
- ServiceAuthGuard auf Admin-Endpoints (X-Service-Key)
- GDPR-compliant: User Data Export + Deletion
- CORS konfiguriert für Production

**Lücken:**

- Kein Rate Limiting
- Keine Input-Sanitization über DTOs hinaus

## UX (75/100)

**Stärken:**

- 2 Sprachen (DE, EN) mit svelte-i18n
- PWA konfiguriert (@vite-pwa/sveltekit)
- Offline Fallback Page
- Dark/Light Theme
- 64 kuratierte Zitate in 6 Sprachen
- Kategorie-basierte Navigation

**Lücken:**

- Keine Offline-Sync für Favorites
- Keine Push-Notifications ("Zitat des Tages")
- Mobile App fehlt
- Landing Page fehlt

## Top-3 Empfehlungen

1. **Tests schreiben** - Mindestens FavoriteService + ListService Specs (schnell machbar, ~100 Zeilen pro Service)
2. **CLAUDE.md erstellen** - API-Endpoints, Schema, Commands dokumentieren
3. **Rate Limiting** - ThrottlerModule hinzufügen, besonders für POST-Endpoints
