diff --git a/apps/calendar/apps/backend/Dockerfile b/apps/calendar/apps/backend/Dockerfile index ae9edfa88..3bf5ad37b 100644 --- a/apps/calendar/apps/backend/Dockerfile +++ b/apps/calendar/apps/backend/Dockerfile @@ -19,6 +19,7 @@ COPY packages/shared-errors ./packages/shared-errors COPY packages/shared-nestjs-auth ./packages/shared-nestjs-auth COPY packages/shared-nestjs-health ./packages/shared-nestjs-health COPY packages/shared-nestjs-metrics ./packages/shared-nestjs-metrics +COPY packages/shared-error-tracking ./packages/shared-error-tracking COPY packages/shared-nestjs-setup ./packages/shared-nestjs-setup COPY packages/shared-tsconfig ./packages/shared-tsconfig @@ -40,6 +41,8 @@ WORKDIR /app/packages/shared-nestjs-health RUN pnpm build WORKDIR /app/packages/shared-nestjs-metrics +COPY packages/shared-error-tracking ./packages/shared-error-tracking + RUN pnpm build WORKDIR /app/packages/shared-nestjs-setup diff --git a/apps/contacts/apps/backend/Dockerfile b/apps/contacts/apps/backend/Dockerfile index 78446c41f..771f5cbef 100644 --- a/apps/contacts/apps/backend/Dockerfile +++ b/apps/contacts/apps/backend/Dockerfile @@ -17,6 +17,7 @@ COPY packages/shared-errors ./packages/shared-errors COPY packages/shared-nestjs-auth ./packages/shared-nestjs-auth COPY packages/shared-nestjs-health ./packages/shared-nestjs-health COPY packages/shared-nestjs-metrics ./packages/shared-nestjs-metrics +COPY packages/shared-error-tracking ./packages/shared-error-tracking COPY packages/shared-nestjs-setup ./packages/shared-nestjs-setup COPY packages/shared-storage ./packages/shared-storage COPY packages/shared-tsconfig ./packages/shared-tsconfig @@ -38,6 +39,8 @@ WORKDIR /app/packages/shared-nestjs-health RUN pnpm build WORKDIR /app/packages/shared-nestjs-metrics +COPY packages/shared-error-tracking ./packages/shared-error-tracking + RUN pnpm build WORKDIR /app/packages/shared-nestjs-setup diff --git a/apps/manacore/apps/landing/src/content/audits/2026-03-19-chat.md b/apps/manacore/apps/landing/src/content/audits/2026-03-19-chat.md index 2d03f9e4e..3aee8d219 100644 --- a/apps/manacore/apps/landing/src/content/audits/2026-03-19-chat.md +++ b/apps/manacore/apps/landing/src/content/audits/2026-03-19-chat.md @@ -1,19 +1,19 @@ --- title: 'Chat: Production Readiness Audit' -description: 'AI-Chat mit 9 Backend-Modulen, 9 KI-Modellen (Ollama + OpenRouter), 5 Sprachen, deployed auf mana.how - aber keine Tests' +description: 'AI-Chat mit 9 Backend-Modulen, 9 KI-Modellen (Ollama + OpenRouter), 5 Sprachen, deployed auf mana.how - mit Rate Limiting, DTOs, 78 Tests und DB-Indexes' date: 2026-03-19 app: 'chat' author: 'Till Schneider' tags: ['audit', 'chat', 'production-readiness', 'ai'] -score: 74 +score: 82 scores: - backend: 88 + backend: 90 frontend: 82 - database: 85 - testing: 0 + database: 95 + testing: 60 deployment: 92 documentation: 85 - security: 72 + security: 82 ux: 80 status: 'production' stats: @@ -21,23 +21,27 @@ stats: webRoutes: 24 components: 17 dbTables: 7 - testFiles: 0 - testCount: 0 + testFiles: 2 + testCount: 78 languages: 5 --- ## Zusammenfassung -Chat ist die **feature-reichste AI-App** im Monorepo mit 9 KI-Modellen (7 lokale Ollama + 2 Cloud OpenRouter), deployed auf mana.how. Vollständige Multi-Plattform (Web, Mobile, Landing). Größte Schwäche: keine Tests. +Chat ist die **feature-reichste AI-App** im Monorepo mit 9 KI-Modellen (7 lokale Ollama + 2 Cloud OpenRouter), deployed auf mana.how. Vollständige Multi-Plattform (Web, Mobile, Landing). Seit dem letzten Audit: Rate Limiting, Input-Validierung, DB-Indexes und 78 Tests hinzugefügt. -## Backend (88/100) +## Backend (90/100) - 9 Module: Chat, Conversation, Template, Space, Document, Model, Admin, Database, Health - 7 Controller mit CRUD - ManaCoreModule Integration (Auth + Credits) - MetricsModule für Monitoring - Health Checks konfiguriert -- **Lücke:** Kein Rate Limiting, nur 2 DTOs +- ThrottlerModule (100 req/60s) für Rate Limiting +- DTOs mit class-validator für Conversation, Template und Chat-Completion (@MaxLength, @IsOptional) +- Space-Mitgliedschaft wird bei getSpaceMembers geprüft +- inviteUserToSpace prüft Owner/Admin-Berechtigung +- GDPR-Delete umfasst jetzt Templates + UsageLogs ## Frontend (82/100) @@ -45,11 +49,31 @@ Chat ist die **feature-reichste AI-App** im Monorepo mit 9 KI-Modellen (7 lokale - 5 Sprachen (DE, EN, IT, FR, ES) - Mobile App (Expo SDK 52) vorhanden - Landing Page (Astro) vorhanden +- XSS-Fix: JSON.stringify für Env-Var-Injection in hooks.server.ts - **Lücke:** Keine PWA, kein Error Boundary -## Testing (0/100) +## Database (95/100) -**Keine Tests.** Kritische Lücke für eine deployed App. +- 7 Tabellen mit vollständigen Indexes auf allen Tabellen +- Unique Constraint auf spaceMembers(spaceId, userId) verhindert Duplikate +- Indexes auf userId, conversationId, spaceId für alle relevanten Tabellen +- **Lücke:** Keine Volltextsuche-Indexes + +## Testing (60/100) + +- 2 Service-Specs: ConversationService (37 Tests), SpaceService (41 Tests) +- Mock Factories mit createMockConversation, createMockMessage, createMockSpace, etc. +- Jest Config vorhanden +- **Lücke:** Keine Controller-Tests, keine Frontend-Tests, keine E2E Tests + +## Security (82/100) + +- Auth Guards auf allen Endpoints (ManaCoreModule) +- ThrottlerModule Rate Limiting (100 req/60s) +- @MaxLength(50000) auf Chat-Content +- Input-Validierung via DTOs +- Space-Berechtigungsprüfungen (Member, Owner/Admin) +- **Lücke:** Keine File-Size Validation ## Deployment (92/100) @@ -59,6 +83,6 @@ Chat ist die **feature-reichste AI-App** im Monorepo mit 9 KI-Modellen (7 lokale ## Top-3 Empfehlungen -1. **Tests schreiben** - Chat/Conversation Service Specs (kritisch für deployed App) -2. **Rate Limiting** - ThrottlerModule besonders für AI-Endpoints -3. **PWA aktivieren** - Dependencies vorhanden +1. **Test-Coverage erhöhen** - Controller-Tests und Frontend-Tests hinzufügen +2. **PWA aktivieren** - Dependencies vorhanden +3. **Streaming-Timeouts** - Timeout-Handling für AI-Streaming-Endpoints diff --git a/apps/manacore/apps/landing/src/content/audits/2026-03-19-mukke.md b/apps/manacore/apps/landing/src/content/audits/2026-03-19-mukke.md index 5660aa1ca..0b9c4db1c 100644 --- a/apps/manacore/apps/landing/src/content/audits/2026-03-19-mukke.md +++ b/apps/manacore/apps/landing/src/content/audits/2026-03-19-mukke.md @@ -1,19 +1,19 @@ --- title: 'Mukke: Production Readiness Audit' -description: 'Bewertung der Musik-App - vollständiges Backend mit Library/Playlist/Export, Audio-Editor Web-App, aber neue App ohne Produktions-Erfahrung' +description: 'Musik-App mit Library/Playlist/Export, Audio-Editor, Rate Limiting, Transaktionen, DB-Indexes und 113 Tests - bereit für Beta-Deployment' date: 2026-03-19 app: 'mukke' author: 'Till Schneider' tags: ['audit', 'mukke', 'production-readiness'] -score: 71 +score: 80 scores: - backend: 85 + backend: 90 frontend: 78 - database: 82 - testing: 45 + database: 90 + testing: 65 deployment: 85 documentation: 80 - security: 68 + security: 78 ux: 60 status: 'beta' stats: @@ -21,30 +21,32 @@ stats: webRoutes: 16 components: 10 dbTables: 7 - testFiles: 3 - testCount: 35 + testFiles: 6 + testCount: 113 languages: 1 --- ## Zusammenfassung -Mukke ist eine **feature-reiche Musik-App** mit vollständigem Backend (Library, Playlists, Projects, Beats, Markers, Lyrics, Export) und einer Web-App mit Audio-Editor basierend auf wavesurfer.js. Solide Basis, aber noch nicht in Produktion deployed. Hauptlücken: nur 1 Sprache, keine Rate Limiting, Mobile archiviert. +Mukke ist eine **feature-reiche Musik-App** mit vollständigem Backend (Library, Playlists, Projects, Beats, Markers, Lyrics, Export) und einer Web-App mit Audio-Editor basierend auf wavesurfer.js. Seit dem letzten Audit: Rate Limiting, DB-Indexes, Transaktionen, Input-Validierung, JWT-Auth-Fix und 78 neue Tests hinzugefügt. Verbleibende Lücken: nur 1 Sprache, kein Web-Testing, Mobile archiviert. -## Backend (85/100) +## Backend (90/100) **Stärken:** - 11 Module: Song, Playlist, Project, Beat, Marker, Lyrics, Export, Library, STT, Database, Health - 8 Controller mit vollständigem CRUD -- DTOs für alle Ressourcen (SongUploadDto, MarkerDto, PlaylistDto, etc.) +- DTOs für alle Ressourcen mit class-validator (@MaxLength, @Min, @Max, @IsOptional) +- ThrottlerModule (100 req/60s) für Rate Limiting - Export-Service: LRC, SRT, JSON Formate - S3 Presigned URLs für Uploads/Downloads - BPM Detection, Waveform Data +- Transaktionen für Multi-Step-Operationen (Playlist-Reorder, Song-Delete mit S3-Cleanup) **Lücken:** -- Kein Rate Limiting (ThrottlerModule fehlt) - Keine Admin-Endpoints +- Kein globaler Error-Filter ## Frontend (78/100) @@ -62,11 +64,13 @@ Mukke ist eine **feature-reiche Musik-App** mit vollständigem Backend (Library, - Kein Error Boundary - Keine Skeleton Loading States -## Database (82/100) +## Database (90/100) **Stärken:** -- 7 Tabellen: songs, playlists, playlist_songs, projects, beats, markers, lyrics +- 7 Tabellen mit vollständigen Indexes auf allen Tabellen +- Indexes auf userId, playlistId, projectId, songId für alle relevanten Tabellen +- Composite Indexes für häufige Abfragen (userId + playlistId, etc.) - Proper JSONB für Metadata (waveform, tags) - Drizzle ORM mit Type Safety - Seed-Daten vorhanden @@ -76,20 +80,20 @@ Mukke ist eine **feature-reiche Musik-App** mit vollständigem Backend (Library, - Keine Volltextsuche-Indexes - lyrics/lyric_lines Schema könnte optimiert werden -## Testing (45/100) +## Testing (65/100) **Stärken:** -- 3 Service-Specs: song, playlist, library (678 LOC) +- 6 Service-Specs: song, playlist, library, beat, marker, project (113 Tests total) - Jest Config mit 80% Threshold -- Mock Factories vorhanden +- Mock Factories für alle Entities (createMockSong, createMockPlaylist, createMockBeat, createMockMarker, createMockProject) +- Gute Abdeckung der Service-Layer-Logik **Lücken:** - Keine Controller-Tests - Keine Frontend-Tests - Keine E2E Tests -- Coverage deutlich unter Threshold ## Deployment (85/100) @@ -106,18 +110,19 @@ Mukke ist eine **feature-reiche Musik-App** mit vollständigem Backend (Library, - Kein docker-compose.macmini.yml Eintrag - Kein CI/CD Pipeline -## Security (68/100) +## Security (78/100) **Stärken:** -- JwtAuthGuard auf allen Endpoints +- JwtAuthGuard auf allen Endpoints (korrekter Import aus @manacore/shared-nestjs-auth) - CurrentUser Decorator - ParseUUIDPipe für Input Validation +- ThrottlerModule Rate Limiting (100 req/60s) +- Input-Validierung via DTOs (@MaxLength, @Min, @Max) - CORS konfiguriert **Lücken:** -- **Kein Rate Limiting** - kritisch für Upload-Endpoints - Keine GDPR-Endpoints (Admin) - Keine File-Size Validation im Backend @@ -138,6 +143,6 @@ Mukke ist eine **feature-reiche Musik-App** mit vollständigem Backend (Library, ## Top-3 Empfehlungen -1. **Rate Limiting hinzufügen** - ThrottlerModule besonders für Upload-Endpoints kritisch -2. **i18n einrichten** - Mindestens DE + EN wie alle anderen Apps -3. **Production Deployment** - docker-compose.macmini.yml Eintrag + CI/CD Job +1. **i18n einrichten** - Mindestens DE + EN wie alle anderen Apps +2. **Production Deployment** - docker-compose.macmini.yml Eintrag + CI/CD Job +3. **Frontend-Tests** - Vitest für Web-App-Stores und kritische Komponenten diff --git a/apps/manacore/apps/landing/src/content/audits/2026-03-19-picture.md b/apps/manacore/apps/landing/src/content/audits/2026-03-19-picture.md index a7f7f30de..214846cb2 100644 --- a/apps/manacore/apps/landing/src/content/audits/2026-03-19-picture.md +++ b/apps/manacore/apps/landing/src/content/audits/2026-03-19-picture.md @@ -1,19 +1,19 @@ --- title: 'Picture: Production Readiness Audit' -description: 'AI-Bildgenerierung mit 11 Modulen, Replicate Integration, Credit-System, 5 Sprachen - deployed aber ohne Rate Limiting' +description: 'AI-Bildgenerierung mit 11 Modulen, Replicate Integration, Credit-System, 5 Sprachen - mit Rate Limiting, Webhook-Security, Transaktionen und 70 Tests' date: 2026-03-19 app: 'picture' author: 'Till Schneider' tags: ['audit', 'picture', 'production-readiness', 'ai'] -score: 72 +score: 81 scores: - backend: 85 + backend: 90 frontend: 80 - database: 85 - testing: 15 + database: 92 + testing: 55 deployment: 75 documentation: 78 - security: 62 + security: 80 ux: 78 status: 'production' stats: @@ -21,22 +21,26 @@ stats: webRoutes: 19 components: 25 dbTables: 10 - testFiles: 2 - testCount: 5 + testFiles: 4 + testCount: 70 languages: 5 --- ## Zusammenfassung -Picture ist die **AI-Bildgenerations-App** mit Replicate Integration, Boards, Explore-Feed und Credit-System. Deployed auf mana.how mit 5 Sprachen, aber kritische Sicherheitslücke: kein Rate Limiting. +Picture ist die **AI-Bildgenerations-App** mit Replicate Integration, Boards, Explore-Feed und Credit-System. Deployed auf mana.how mit 5 Sprachen. Seit dem letzten Audit: Rate Limiting, Webhook-Security, DB-Indexes mit FK-Constraints, Transaktionen und 70 Tests hinzugefügt. -## Backend (85/100) +## Backend (90/100) - 11 Module: Generate, Image, Board, BoardItem, Model, Tag, Upload, Explore, Profile, Batch, Admin - Replicate API Integration für AI-Bildgenerierung - CreditClientService für Monetarisierung - S3 Storage (MinIO/Hetzner) -- **Lücke:** Kein Rate Limiting (kritisch für AI-Endpoints) +- ThrottlerModule (100 req/60s) für Rate Limiting +- Webhook X-Webhook-Secret Validierung für Replicate Callbacks +- @Min/@Max Validierung auf Dimensions, Steps, Guidance Scale in GenerateDto +- duplicateBoard und processCompletedGeneration in Transaktionen +- **Lücke:** Keine Timeouts auf externe API-Calls ## Frontend (80/100) @@ -44,21 +48,40 @@ Picture ist die **AI-Bildgenerations-App** mit Replicate Integration, Boards, Ex - Canvas-Editor, Boards, Explore, Archive - 5 Sprachen (DE, EN, IT, FR, ES) - Mobile App (Expo) vorhanden -- **Lücke:** Kein PWA +- **Lücke:** Kein PWA, kein Error Boundary -## Testing (15/100) +## Database (92/100) -- Nur 2 Test-Files mit ~5 Tests -- Minimale Coverage +- 10 Tabellen mit vollständigen Indexes auf allen Tabellen +- Foreign Key Constraints mit CASCADE auf allen Relationen +- Indexes auf userId, boardId, modelId, tagId für alle relevanten Tabellen +- Composite Indexes für häufige Abfragen +- **Lücke:** Keine Volltextsuche-Indexes -## Security (62/100) +## Testing (55/100) -- Auth Guards ✓ (12 Usages) -- **KEIN Rate Limiting** - kritisch für kostenpflichtige AI-Generation -- Keine File-Size Validation +- 4 Test-Files: ImageService (40 Tests), BoardService (30 Tests) + 2 bestehende +- Mock Factories vorhanden +- Jest Config mit Pfad-Aliasing +- **Lücke:** Keine Controller-Tests, keine Frontend-Tests, keine E2E Tests + +## Security (80/100) + +- Auth Guards auf allen Endpoints (ManaCoreModule) +- ThrottlerModule Rate Limiting (100 req/60s) +- Webhook-Secret Validierung für Replicate Callbacks +- Input-Validierung via DTOs (@Min/@Max auf numerischen Werten) +- **Lücke:** Keine SSRF-Protection auf URLs, keine File-Size Validation + +## Deployment (75/100) + +- Deployed auf mana.how +- Docker Multi-Stage Build (Backend) +- Health Checks konfiguriert +- **Lücke:** Kein Web Dockerfile ## Top-3 Empfehlungen -1. **Rate Limiting SOFORT** - ThrottlerModule, besonders für /generate Endpoint -2. **Test-Suite aufbauen** - Generate/Image Service Specs -3. **Web Dockerfile** - Nur Backend containerisiert +1. **Test-Coverage erhöhen** - Controller-Tests und Frontend-Tests hinzufügen +2. **Web Dockerfile** - Nur Backend containerisiert +3. **Timeouts auf externe APIs** - Replicate API Calls brauchen Timeout-Handling diff --git a/apps/todo/apps/backend/Dockerfile b/apps/todo/apps/backend/Dockerfile index d95d5a002..24f3cc581 100644 --- a/apps/todo/apps/backend/Dockerfile +++ b/apps/todo/apps/backend/Dockerfile @@ -19,6 +19,8 @@ COPY packages/shared-errors ./packages/shared-errors COPY packages/shared-nestjs-auth ./packages/shared-nestjs-auth COPY packages/shared-nestjs-health ./packages/shared-nestjs-health COPY packages/shared-nestjs-metrics ./packages/shared-nestjs-metrics +COPY packages/shared-nestjs-setup ./packages/shared-nestjs-setup +COPY packages/shared-error-tracking ./packages/shared-error-tracking COPY packages/shared-tsconfig ./packages/shared-tsconfig # Copy todo shared package and backend @@ -39,6 +41,9 @@ WORKDIR /app/packages/shared-nestjs-health RUN pnpm build WORKDIR /app/packages/shared-nestjs-metrics +COPY packages/shared-nestjs-setup ./packages/shared-nestjs-setup +COPY packages/shared-error-tracking ./packages/shared-error-tracking + RUN pnpm build WORKDIR /app/packages/credit-operations