Zum Hauptinhalt springen
← Alle ManaScores
Ausgereift 19. März 2026 von Till Schneider

Presi: Production Readiness Audit

Präsentationstool mit Slides, Themes, Sharing - 6 Sprachen, Swagger API-Docs, DB-Indexes, 72 Tests, Rate Limiting, deployed auf mana.how

Gesamtscore

Gewichteter Durchschnitt aus 8 Kategorien

86 /100

Kategorie-Scores

Backend
90
Frontend
82
Database
85
Testing
82
Deployment
75
Doku
90
Security
85
UX
82

Metriken

7.086 Lines of Code
90 Source Files
0.7 MB (Source)
98 Commits
3 Contributors
2025-11-27 Erster Commit
18 API Endpoints
7 Backend Module
16 Web Routes
12 Stores
18 Komponenten
4 DB Tabellen
72 Tests
10 Test Files
6 Sprachen
48 TODOs/FIXMEs
675 Max File (LOC)
audit presi production-readiness

Zusammenfassung

Presi ist ein Präsentationstool mit Decks, Slides, Themes und Sharing. Beste i18n (6 Sprachen) und stärkste Svelte 5 Adoption (66 Runes-Usages). Swagger API-Docs, DB-Indexes auf allen Query-Pfaden, gehärtete DTO-Validation, 72 Tests und deployed auf mana.how.

Backend (90/100)

  • 7 Module: Deck, Slide, Theme, SharedDeck, Admin, Database, Health
  • 5 Controller mit DTOs für alle Entities (Deck, Slide, Share)
  • Globaler ThrottlerGuard via APP_GUARD (100 Requests/60s)
  • Swagger/OpenAPI-Dokumentation (/api/docs)
  • ParseUUIDPipe auf allen ID-Parametern
  • Admin-Endpoints mit ServiceAuthGuard (X-Service-Key)
  • GDPR Data Export & Deletion Endpoints
  • NestJS Exception Handling (NotFoundException, ForbiddenException)

Frontend (82/100)

  • 16 Routes, 18 Komponenten, 23 Stores
  • 6 Sprachen (DE, EN, IT, FR, ES + 1) - meiste aller Apps
  • 66 Svelte 5 Runes Usages (beste Adoption)
  • SvelteKit Error Boundary (+error.svelte)
  • Presentation Mode mit Keyboard Navigation, Fullscreen, Timer, Speaker Notes
  • PWA-Support via @vite-pwa/sveltekit
  • Mobile App Scaffolding vorhanden (Expo)

Database (85/100)

  • 4 normalisierte Tabellen mit Foreign Keys
  • 7 Indexes auf allen Query-Pfaden:
    • decks_user_id_idx, decks_user_updated_idx, decks_theme_id_idx
    • slides_deck_id_idx, slides_deck_order_idx
    • shared_decks_deck_id_idx
    • share_code UNIQUE
  • Cascade Deletes (Slides, SharedDecks bei Deck-Löschung)
  • JSONB Columns (SlideContent, ThemeColors, ThemeFonts)
  • Timestamps with Timezone
  • 2 Migrations vorhanden

Testing (82/100)

  • 10 Test-Dateien, 72 Tests
  • Service-Tests: Deck, Slide, Share, Theme, Admin (5 Specs)
  • Controller-Tests: Deck, Slide, Share, Theme, Admin (5 Specs)
  • Mock-Infrastruktur: Drizzle DB Mock, Service Mocks
  • Error Cases: NotFoundException, ForbiddenException, Ownership-Checks
  • Authorization Testing: verifyOwnership, ServiceAuthGuard
  • Jest-Konfiguration mit ts-jest

Deployment (75/100)

  • Multi-Stage Dockerfile mit node:20-alpine
  • docker-compose.macmini.yml Konfiguration (Backend + Web)
  • Health Checks (wget, 30s Interval)
  • Environment-Konfiguration für Production
  • Deployed auf presi.mana.how

Documentation (90/100)

  • Swagger/OpenAPI Docs unter /api/docs
  • ApiTags für alle 5 Controller (Decks, Slides, Share, Themes, Admin)
  • ApiBearerAuth für authentifizierte Endpoints
  • 232 Zeilen CLAUDE.md mit vollständiger API-Doku
  • Environment Variables für alle Apps

Security (85/100)

  • JwtAuthGuard auf allen User-Endpoints
  • ServiceAuthGuard für Admin-Endpoints (X-Service-Key)
  • Globaler ThrottlerGuard (Rate Limiting, 100 req/min)
  • ParseUUIDPipe auf allen ID-Parametern (verhindert invalid UUID queries)
  • Gehärtete DTO-Validation:
    • String-Längen-Limits (title: 200, description: 2000, body: 5000)
    • SlideContent: @IsIn für type, @IsUrl für imageUrl, @ArrayMaxSize(50) für bulletPoints
    • @IsInt + @Min(0) für order-Felder
    • @ArrayMaxSize(200) für Reorder-DTOs
  • CORS konfiguriert
  • GDPR Data Deletion Endpoint
  • Ownership-Verification in allen mutierenden Services

UX (82/100)

  • 6 Sprachen i18n (beste aller Apps)
  • Error Boundary für graceful Error Handling
  • PWA-Support
  • Keyboard Navigation in Presentation Mode (Pfeiltasten, A/D, F, ESC)
  • Fullscreen Presentation mit Timer und Speaker Notes
  • Share via Link mit optionaler Expiration

Top-3 Empfehlungen

  1. E2E Tests - Playwright für kritische User Flows
  2. CI Pipeline - GitHub Actions für PR Checks
  3. Pagination - Deck-Listing mit Limit/Offset für große Datasets