From 8c9d01a1f649b04a3f5870824b7d0001cbd9f252 Mon Sep 17 00:00:00 2001 From: Till JS Date: Thu, 19 Mar 2026 10:20:18 +0100 Subject: [PATCH] feat(audits): add production readiness scoring system with 19 app audits - Add audits content collection to manacore landing (Astro schema with 8 category scores) - Create scoring methodology doc (docs/PROD_READINESS_SCORE.md) - Add audit list page with client-side filtering (status) and sorting (score/name/date) - Add audit detail page with score bars, metrics, and markdown content - Write audits for all 19 apps: calendar (76), contacts (80), todo (79), chat (74), picture (72), mukke (71), matrix (68), manacore (65), nutriphi (63), photos (62), zitare (62), context (60), skilltree (58), clock (58), storage (55), presi (55), planta (50), manadeck (48), questions (48), traces (35) - Default sort: score descending; filters: All/Production/Beta/Alpha - Deployed to Cloudflare Pages Co-Authored-By: Claude Opus 4.6 (1M context) --- .../src/content/audits/2026-03-19-calendar.md | 138 +++++++++ .../src/content/audits/2026-03-19-chat.md | 64 ++++ .../src/content/audits/2026-03-19-clock.md | 58 ++++ .../src/content/audits/2026-03-19-contacts.md | 60 ++++ .../src/content/audits/2026-03-19-context.md | 66 ++++ .../src/content/audits/2026-03-19-manacore.md | 63 ++++ .../src/content/audits/2026-03-19-manadeck.md | 61 ++++ .../src/content/audits/2026-03-19-matrix.md | 74 +++++ .../src/content/audits/2026-03-19-mukke.md | 143 +++++++++ .../src/content/audits/2026-03-19-nutriphi.md | 67 ++++ .../src/content/audits/2026-03-19-photos.md | 60 ++++ .../src/content/audits/2026-03-19-picture.md | 64 ++++ .../src/content/audits/2026-03-19-planta.md | 54 ++++ .../src/content/audits/2026-03-19-presi.md | 59 ++++ .../content/audits/2026-03-19-questions.md | 61 ++++ .../content/audits/2026-03-19-skilltree.md | 63 ++++ .../src/content/audits/2026-03-19-storage.md | 58 ++++ .../src/content/audits/2026-03-19-todo.md | 63 ++++ .../src/content/audits/2026-03-19-traces.md | 63 ++++ .../src/content/audits/2026-03-19-zitare.md | 139 +++++++++ .../apps/landing/src/content/config.ts | 41 +++ .../landing/src/pages/audits/[slug].astro | 238 +++++++++++++++ .../apps/landing/src/pages/audits/index.astro | 286 ++++++++++++++++++ docs/PROD_READINESS_SCORE.md | 80 +++++ 24 files changed, 2123 insertions(+) create mode 100644 apps/manacore/apps/landing/src/content/audits/2026-03-19-calendar.md create mode 100644 apps/manacore/apps/landing/src/content/audits/2026-03-19-chat.md create mode 100644 apps/manacore/apps/landing/src/content/audits/2026-03-19-clock.md create mode 100644 apps/manacore/apps/landing/src/content/audits/2026-03-19-contacts.md create mode 100644 apps/manacore/apps/landing/src/content/audits/2026-03-19-context.md create mode 100644 apps/manacore/apps/landing/src/content/audits/2026-03-19-manacore.md create mode 100644 apps/manacore/apps/landing/src/content/audits/2026-03-19-manadeck.md create mode 100644 apps/manacore/apps/landing/src/content/audits/2026-03-19-matrix.md create mode 100644 apps/manacore/apps/landing/src/content/audits/2026-03-19-mukke.md create mode 100644 apps/manacore/apps/landing/src/content/audits/2026-03-19-nutriphi.md create mode 100644 apps/manacore/apps/landing/src/content/audits/2026-03-19-photos.md create mode 100644 apps/manacore/apps/landing/src/content/audits/2026-03-19-picture.md create mode 100644 apps/manacore/apps/landing/src/content/audits/2026-03-19-planta.md create mode 100644 apps/manacore/apps/landing/src/content/audits/2026-03-19-presi.md create mode 100644 apps/manacore/apps/landing/src/content/audits/2026-03-19-questions.md create mode 100644 apps/manacore/apps/landing/src/content/audits/2026-03-19-skilltree.md create mode 100644 apps/manacore/apps/landing/src/content/audits/2026-03-19-storage.md create mode 100644 apps/manacore/apps/landing/src/content/audits/2026-03-19-todo.md create mode 100644 apps/manacore/apps/landing/src/content/audits/2026-03-19-traces.md create mode 100644 apps/manacore/apps/landing/src/content/audits/2026-03-19-zitare.md create mode 100644 apps/manacore/apps/landing/src/pages/audits/[slug].astro create mode 100644 apps/manacore/apps/landing/src/pages/audits/index.astro create mode 100644 docs/PROD_READINESS_SCORE.md diff --git a/apps/manacore/apps/landing/src/content/audits/2026-03-19-calendar.md b/apps/manacore/apps/landing/src/content/audits/2026-03-19-calendar.md new file mode 100644 index 000000000..5b8200cfc --- /dev/null +++ b/apps/manacore/apps/landing/src/content/audits/2026-03-19-calendar.md @@ -0,0 +1,138 @@ +--- +title: 'Calendar: Production Readiness Audit' +description: 'Umfassende Bewertung der Kalender-App - starkes Backend mit 13 Modulen, Svelte 5 Web-App, aber Lücken bei Tests und Mobile' +date: 2026-03-19 +app: 'calendar' +author: 'Till Schneider' +tags: ['audit', 'calendar', 'production-readiness'] +score: 76 +scores: + backend: 90 + frontend: 85 + database: 92 + testing: 52 + deployment: 88 + documentation: 95 + security: 82 + ux: 72 +status: 'production' +stats: + backendModules: 13 + webRoutes: 19 + components: 50 + dbTables: 9 + testFiles: 9 + testCount: 48 + languages: 5 +--- + +## Zusammenfassung + +Die Calendar-App ist die **ausgereifteste App im Monorepo**. Starkes NestJS Backend mit 13 Modulen und 16 Services, umfangreiche Svelte 5 Web-App mit 50 Komponenten, und die beste Dokumentation aller Apps. Hauptlücken: Test-Coverage noch ausbaubar, keine Mobile-App, PWA nicht konfiguriert. + +## Backend (90/100) + +**Stärken:** + +- 13 Module: Calendar, Event, Tags, TagGroups, Reminder, Share, Sync, Network, Email, Notification, Admin, Health, Database +- 16 Services mit sauberer Trennung +- 15 DTO-Klassen mit class-validator +- CalDAV/iCal Sync-Integration (tsdav, ical.js) +- RFC 5545 Recurrence Support +- Admin-Endpoints für GDPR +- Credit Operations Integration + +**Lücken:** + +- Keine Controller-Tests (nur Service-Tests) + +## Frontend (85/100) + +**Stärken:** + +- 19 Routes, 50 Komponenten, 24 Stores (Svelte 5 Runes) +- Alle Kalender-Ansichten: Week, Month, Day, Agenda +- Drag & Drop Composables +- 10 API-Client Module +- Skeleton Loading States +- Keyboard Navigation (useCalendarKeyboard) + +**Lücken:** + +- Kein globaler Error Boundary (+error.svelte) +- PWA Dependencies vorhanden aber nicht konfiguriert + +## Database (92/100) + +**Stärken:** + +- 9 Tabellen mit durchdachtem Schema +- Advisory Lock Migrations +- Drizzle ORM mit Type Safety +- JSONB für flexible Settings/Metadata +- Proper Indexes + +## Testing (52/100) + +**Stärken:** + +- 4 Backend Service-Specs + Mock Factories +- 5 Frontend Unit Tests (date helpers, event filtering) +- 5 Playwright E2E Tests (auth, views, CRUD, settings) +- Jest Config mit 80% Coverage Threshold + +**Lücken:** + +- Keine Controller-Tests +- Keine Integration-Tests +- Backend-Coverage unter 50% + +## Deployment (88/100) + +**Stärken:** + +- Multi-Stage Dockerfiles (Backend + Web) +- Health Checks konfiguriert +- docker-compose.macmini.yml Einträge +- Entrypoint Scripts mit DB-Wait-Logic + +**Lücken:** + +- Kein eigener CI/CD Job + +## Security (82/100) + +**Stärken:** + +- JwtAuthGuard auf allen Endpoints +- ThrottlerModule (100 req/min) +- ServiceAuthGuard für Admin +- CORS konfiguriert +- Encryption für CalDAV-Passwörter + +**Lücken:** + +- Kein Audit-Logging + +## UX (72/100) + +**Stärken:** + +- 5 Sprachen (DE, EN, FR, ES, IT) +- Keyboard Shortcuts +- Responsive Design +- Loading Skeletons +- Mini-Calendar Navigation + +**Lücken:** + +- PWA nicht aktiv +- Keine Offline-Sync +- Kein Error Boundary +- Mobile App fehlt komplett + +## Top-3 Empfehlungen + +1. **PWA aktivieren** - Dependencies sind da, nur Config fehlt. Service Worker + Manifest +2. **Test-Coverage auf 70% bringen** - Controller-Tests, Integration-Tests für Sharing/Recurrence +3. **Error Boundary** - `+error.svelte` in (app) Route Group hinzufügen 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 new file mode 100644 index 000000000..2d03f9e4e --- /dev/null +++ b/apps/manacore/apps/landing/src/content/audits/2026-03-19-chat.md @@ -0,0 +1,64 @@ +--- +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' +date: 2026-03-19 +app: 'chat' +author: 'Till Schneider' +tags: ['audit', 'chat', 'production-readiness', 'ai'] +score: 74 +scores: + backend: 88 + frontend: 82 + database: 85 + testing: 0 + deployment: 92 + documentation: 85 + security: 72 + ux: 80 +status: 'production' +stats: + backendModules: 9 + webRoutes: 24 + components: 17 + dbTables: 7 + testFiles: 0 + testCount: 0 + 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. + +## Backend (88/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 + +## Frontend (82/100) + +- 24 Web-Routes, 17 Komponenten, 10 Stores +- 5 Sprachen (DE, EN, IT, FR, ES) +- Mobile App (Expo SDK 52) vorhanden +- Landing Page (Astro) vorhanden +- **Lücke:** Keine PWA, kein Error Boundary + +## Testing (0/100) + +**Keine Tests.** Kritische Lücke für eine deployed App. + +## Deployment (92/100) + +- Deployed auf mana.how (Backend: Port 3030, Web: Port 5010) +- Docker Multi-Stage Builds +- Health Checks konfiguriert + +## 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 diff --git a/apps/manacore/apps/landing/src/content/audits/2026-03-19-clock.md b/apps/manacore/apps/landing/src/content/audits/2026-03-19-clock.md new file mode 100644 index 000000000..ff8eceb0f --- /dev/null +++ b/apps/manacore/apps/landing/src/content/audits/2026-03-19-clock.md @@ -0,0 +1,58 @@ +--- +title: 'Clock: Production Readiness Audit' +description: 'Uhr-App mit Alarmen, Timern und Weltzeiten - deployed aber ohne Dokumentation und Tests' +date: 2026-03-19 +app: 'clock' +author: 'Till Schneider' +tags: ['audit', 'clock', 'production-readiness'] +score: 58 +scores: + backend: 75 + frontend: 70 + database: 72 + testing: 0 + deployment: 88 + documentation: 10 + security: 60 + ux: 55 +status: 'beta' +stats: + backendModules: 7 + webRoutes: 17 + components: 7 + dbTables: 4 + testFiles: 0 + testCount: 0 + languages: 2 +--- + +## Zusammenfassung + +Clock ist eine **fokussierte Utility-App** mit Alarmen, Timern, Weltzeiten und Presets. Deployed auf mana.how, aber schwach dokumentiert und ohne Tests. + +## Backend (75/100) + +- 7 Module: Alarm, Timer, WorldClock, Preset, Admin, Database, Health +- 5 Controller, Scheduled Tasks (@nestjs/schedule) +- Metrics + Health Checks +- **Lücke:** Kein Rate Limiting, nur 1 DTO + +## Frontend (70/100) + +- 17 Routes, 7 Komponenten, 10 Stores +- 2 Sprachen (DE, EN) +- **Lücke:** Wenige Komponenten, kein PWA + +## Documentation (10/100) + +**Kein CLAUDE.md vorhanden.** Kritische Lücke. + +## Testing (0/100) + +**Keine Tests.** + +## Top-3 Empfehlungen + +1. **CLAUDE.md erstellen** - API-Endpoints, Schema, Commands dokumentieren +2. **Tests** - Alarm/Timer Service Specs +3. **Rate Limiting** hinzufügen diff --git a/apps/manacore/apps/landing/src/content/audits/2026-03-19-contacts.md b/apps/manacore/apps/landing/src/content/audits/2026-03-19-contacts.md new file mode 100644 index 000000000..b975b2fa0 --- /dev/null +++ b/apps/manacore/apps/landing/src/content/audits/2026-03-19-contacts.md @@ -0,0 +1,60 @@ +--- +title: 'Contacts: Production Readiness Audit' +description: 'Kontaktverwaltung mit 14 Backend-Modulen, Google OAuth Import, Duplikaterkennung - die vollständigste App neben Calendar' +date: 2026-03-19 +app: 'contacts' +author: 'Till Schneider' +tags: ['audit', 'contacts', 'production-readiness'] +score: 80 +scores: + backend: 92 + frontend: 85 + database: 88 + testing: 58 + deployment: 90 + documentation: 88 + security: 85 + ux: 65 +status: 'production' +stats: + backendModules: 14 + webRoutes: 20 + components: 36 + dbTables: 6 + testFiles: 5 + testCount: 62 + languages: 2 +--- + +## Zusammenfassung + +Contacts ist neben Calendar die **vollständigste App** mit 14 Backend-Modulen, Google OAuth Import, Duplikaterkennung, Batch-Operationen und S3 Photo-Storage. Deployed auf mana.how. + +## Backend (92/100) + +- 14 Module: Contact, Tag, Note, Activity, Photo, Import, Export, Google, Duplicates, Batch, Network, Admin, Database, Health +- 12 Controller, 4 DTOs, 27 Auth Guard Usages +- **Rate Limiting aktiv** (100 req/min) - einzige App neben Calendar +- S3 Storage Integration (MinIO/Hetzner) +- GDPR Admin-Endpoints + +## Frontend (85/100) + +- 20 Routes, 36 Komponenten (meiste aller Apps), 11 Stores +- **Lücke:** Nur 2 Sprachen (DE, EN) + +## Testing (58/100) + +- 5 Test-Files mit 62 Tests + Service-Specs +- Mock Factories vorhanden +- **Lücke:** Keine E2E Tests + +## Security (85/100) + +- Rate Limiting ✓, Auth Guards ✓, Google OAuth ✓, GDPR ✓, CORS ✓ + +## Top-3 Empfehlungen + +1. **i18n erweitern** - Mindestens FR, IT, ES wie Chat/Calendar +2. **E2E Tests** - Import/Export Flows, Duplikaterkennung +3. **PWA aktivieren** diff --git a/apps/manacore/apps/landing/src/content/audits/2026-03-19-context.md b/apps/manacore/apps/landing/src/content/audits/2026-03-19-context.md new file mode 100644 index 000000000..5ff268533 --- /dev/null +++ b/apps/manacore/apps/landing/src/content/audits/2026-03-19-context.md @@ -0,0 +1,66 @@ +--- +title: 'Context: Production Readiness Audit' +description: 'KI-Dokumentenverwaltung mit neuem NestJS Backend, 70 Tests - aber noch nicht containerisiert oder deployed' +date: 2026-03-19 +app: 'context' +author: 'Till Schneider' +tags: ['audit', 'context', 'production-readiness', 'ai'] +score: 60 +scores: + backend: 75 + frontend: 75 + database: 82 + testing: 55 + deployment: 25 + documentation: 85 + security: 68 + ux: 65 +status: 'beta' +stats: + backendModules: 5 + webRoutes: 15 + components: 10 + dbTables: 5 + testFiles: 4 + testCount: 70 + languages: 2 +--- + +## Zusammenfassung + +Context hat gerade ein **neues NestJS Backend** bekommen (Port 3020) mit AI-Generation, Token-Economy und 70 Unit Tests. Web-App von Supabase auf API-Client migriert. Aber noch nicht containerisiert. + +## Backend (75/100) + +- 5 Module: Space, Document, AI, Token, Database +- AI-Generation server-seitig (Azure OpenAI + Google Gemini) +- Token-Economy mit Balance, Stats, Transactions +- Rate Limiting konfiguriert (ThrottlerModule) +- **Lücke:** Keine DTOs (class-validator), kein Admin-Modul + +## Frontend (75/100) + +- 15 Routes, 10 Komponenten, 7 Stores +- 2 Sprachen (DE, EN) +- Svelte 5 Runes, API Client Pattern +- **Lücke:** Kein PWA, kein Error Boundary + +## Testing (55/100) + +- 4 Test-Suites, 70 Tests (Space, Document, Token, AI) +- Mock Factories + Mock DB Infra +- Jest mit 80% Coverage Threshold +- **Lücke:** Keine Controller-Tests, keine E2E Tests + +## Deployment (25/100) + +- **Nicht containerisiert** (kein Dockerfile) +- Nicht in docker-compose.macmini.yml +- Nicht deployed +- Env-Generation funktioniert ✓ + +## Top-3 Empfehlungen + +1. **Dockerfiles erstellen** - Backend + Web Multi-Stage Builds +2. **DTOs hinzufügen** - class-validator für alle Endpoints +3. **Production Deployment** - docker-compose.macmini.yml + Deploy-Script diff --git a/apps/manacore/apps/landing/src/content/audits/2026-03-19-manacore.md b/apps/manacore/apps/landing/src/content/audits/2026-03-19-manacore.md new file mode 100644 index 000000000..14ea0a4de --- /dev/null +++ b/apps/manacore/apps/landing/src/content/audits/2026-03-19-manacore.md @@ -0,0 +1,63 @@ +--- +title: 'ManaCore: Production Readiness Audit' +description: 'Multi-App Ecosystem Dashboard mit 33 Web-Routes, Mobile App, Landing Page - das Herzstück des Monorepos' +date: 2026-03-19 +app: 'manacore' +author: 'Till Schneider' +tags: ['audit', 'manacore', 'production-readiness', 'platform'] +score: 65 +scores: + backend: 20 + frontend: 82 + database: 55 + testing: 0 + deployment: 78 + documentation: 88 + security: 72 + ux: 75 +status: 'beta' +stats: + backendModules: 0 + webRoutes: 33 + components: 35 + dbTables: 5 + testFiles: 0 + testCount: 0 + languages: 2 +--- + +## Zusammenfassung + +ManaCore ist das **Herzstück des Monorepos** - das Multi-App Dashboard und die Landing Page. Kein eigenes NestJS Backend (nutzt Supabase direkt + mana-core-auth). Starkes Frontend, deployed auf Cloudflare Pages. + +## Backend (20/100) + +- **Kein NestJS Backend** - nutzt Supabase SSR direkt +- Server-Side Auth via @supabase/ssr Hooks +- API Routes in SvelteKit (+server.ts) +- **Lücke:** Kein dedizierter Backend-Service + +## Frontend (82/100) + +- 33 Web-Routes (meiste aller Apps) +- 35 Komponenten, 6 Stores +- Multi-Tenant: Dashboard, Organizations, Teams, Apps, Settings +- Mobile App (Expo) mit Drawer + Tabs Navigation +- **PWA aktiv** - Service Worker + Offline Page + +## Documentation (88/100) + +- 228 Zeilen CLAUDE.md - umfassend +- Landing Page mit Devlogs, Blueprints, Audits, Apps, Legal, Privacy + +## Deployment (78/100) + +- Landing deployed auf Cloudflare Pages +- Web Dockerfile vorhanden +- **Lücke:** Kein docker-compose.macmini.yml für Dashboard + +## Top-3 Empfehlungen + +1. **Tests** - Auth Flow E2E Tests, Multi-Tenant Routing Tests +2. **Dashboard Deployment** - Web-App auf mana.how deployen +3. **i18n erweitern** - Nur 2 Sprachen aktuell diff --git a/apps/manacore/apps/landing/src/content/audits/2026-03-19-manadeck.md b/apps/manacore/apps/landing/src/content/audits/2026-03-19-manadeck.md new file mode 100644 index 000000000..7e573ec71 --- /dev/null +++ b/apps/manacore/apps/landing/src/content/audits/2026-03-19-manadeck.md @@ -0,0 +1,61 @@ +--- +title: 'ManaDeck: Production Readiness Audit' +description: 'Kartenmanagement-App mit Cloud Run Deployment, 5 Sprachen - aber kein CLAUDE.md, keine DTOs, keine DB-Schemas' +date: 2026-03-19 +app: 'manadeck' +author: 'Till Schneider' +tags: ['audit', 'manadeck', 'production-readiness'] +score: 48 +scores: + backend: 50 + frontend: 65 + database: 30 + testing: 18 + deployment: 80 + documentation: 25 + security: 55 + ux: 68 +status: 'alpha' +stats: + backendModules: 2 + webRoutes: 19 + components: 5 + dbTables: 0 + testFiles: 1 + testCount: 8 + languages: 5 +--- + +## Zusammenfassung + +ManaDeck hat als einzige App ein **Cloud Run Deployment** (CI/CD via GitHub Actions), aber die Codebasis ist die schwächste: keine DB-Schemas (Supabase direkt), kein CLAUDE.md, keine DTOs. + +## Backend (50/100) + +- Nur 2 Module (minimal) +- 4 Controller, aber keine DTOs +- ManaCoreModule Integration +- **Lücke:** Keine lokale DB-Schemas, kein Rate Limiting + +## Frontend (65/100) + +- 19 Routes, aber nur 5 Komponenten +- 7 Stores, 5 Sprachen (DE, EN, IT, FR, ES) +- Mobile App (Expo) vorhanden +- Landing Page (Astro, Cloudflare) +- **Lücke:** Wenige Komponenten für viele Routes + +## Database (30/100) + +- **Keine Drizzle Schemas** - nutzt Supabase direkt +- Kein lokales DB-Management + +## Documentation (25/100) + +- **Kein CLAUDE.md** - nur verstreute READMEs und Guides + +## Top-3 Empfehlungen + +1. **CLAUDE.md erstellen** +2. **Drizzle Schema Migration** - Von Supabase auf lokale DB wie alle anderen Apps +3. **DTOs hinzufügen** diff --git a/apps/manacore/apps/landing/src/content/audits/2026-03-19-matrix.md b/apps/manacore/apps/landing/src/content/audits/2026-03-19-matrix.md new file mode 100644 index 000000000..b913a5a4e --- /dev/null +++ b/apps/manacore/apps/landing/src/content/audits/2026-03-19-matrix.md @@ -0,0 +1,74 @@ +--- +title: 'Matrix (Manalink): Production Readiness Audit' +description: 'Dezentraler Chat-Client mit E2EE, VoIP, voller PWA - deployed auf link.mana.how, die Privacy-First App' +date: 2026-03-19 +app: 'matrix' +author: 'Till Schneider' +tags: ['audit', 'matrix', 'production-readiness', 'privacy', 'e2ee'] +score: 68 +scores: + backend: 10 + frontend: 78 + database: 20 + testing: 12 + deployment: 92 + documentation: 92 + security: 88 + ux: 82 +status: 'production' +stats: + backendModules: 0 + webRoutes: 7 + components: 18 + dbTables: 0 + testFiles: 2 + testCount: 5 + languages: 2 +--- + +## Zusammenfassung + +Manalink ist der **dezentrale Chat-Client** auf Basis des Matrix-Protokolls. Kein eigenes Backend (nutzt Matrix Homeserver). Deployed auf link.mana.how mit voller PWA, E2EE und VoIP. + +## Backend (10/100) + +- **Kein eigenes Backend** - Client-Only Architektur +- Nutzt Matrix Homeserver (matrix.mana.how) als Backend +- Alle Logik client-seitig (matrix-js-sdk) + +## Frontend (78/100) + +- 7 Routes, 18 Komponenten, 3 Stores +- ChatWindow, RoomList, MessageInput, VoipCall, E2EEVerification +- **Volle PWA** - Installierbar, Offline-fähig, Push + +## Security (88/100) + +- **End-to-End Encryption** (matrix-sdk-crypto-wasm) +- Privacy-First: Alle Encryption client-seitig +- Client-seitiges Rate Limiting (8 Refs) +- **Stärkste Security aller Apps** + +## UX (82/100) + +- **Volle PWA** - Service Worker, Offline, Installierbar +- Smart Caching: NetworkFirst für API, CacheFirst für Media +- VoIP via WebRTC +- **Lücke:** Nur 2 Sprachen, Mobile minimal + +## Documentation (92/100) + +- 259 Zeilen CLAUDE.md (umfangreichste Doku) +- Matrix SDK Integration, PWA Caching, Crypto dokumentiert + +## Deployment (92/100) + +- Deployed auf link.mana.how +- Docker + docker-compose.macmini.yml +- Matrix Homeserver (Synapse) konfiguriert + +## Top-3 Empfehlungen + +1. **Tests** - E2EE Setup, Room Management, Message Sending +2. **i18n** - Über 2 Sprachen hinaus +3. **Mobile App** - Expo Implementation für nativen Push 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 new file mode 100644 index 000000000..5660aa1ca --- /dev/null +++ b/apps/manacore/apps/landing/src/content/audits/2026-03-19-mukke.md @@ -0,0 +1,143 @@ +--- +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' +date: 2026-03-19 +app: 'mukke' +author: 'Till Schneider' +tags: ['audit', 'mukke', 'production-readiness'] +score: 71 +scores: + backend: 85 + frontend: 78 + database: 82 + testing: 45 + deployment: 85 + documentation: 80 + security: 68 + ux: 60 +status: 'beta' +stats: + backendModules: 11 + webRoutes: 16 + components: 10 + dbTables: 7 + testFiles: 3 + testCount: 35 + 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. + +## Backend (85/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.) +- Export-Service: LRC, SRT, JSON Formate +- S3 Presigned URLs für Uploads/Downloads +- BPM Detection, Waveform Data + +**Lücken:** + +- Kein Rate Limiting (ThrottlerModule fehlt) +- Keine Admin-Endpoints + +## Frontend (78/100) + +**Stärken:** + +- 16 Routes: Dashboard, Library (Albums/Artists/Genres), Playlists, Projects, Editor, Search, Upload +- wavesurfer.js Audio-Visualisierung +- Svelte 5 Runes: 8 Stores (player, playlist, library, editor, etc.) +- FullPlayer, MiniPlayer, QueuePanel Komponenten +- Karaoke-Preview, MarkerTimeline + +**Lücken:** + +- Nur 10 Komponenten (relativ wenige für die Komplexität) +- Kein Error Boundary +- Keine Skeleton Loading States + +## Database (82/100) + +**Stärken:** + +- 7 Tabellen: songs, playlists, playlist_songs, projects, beats, markers, lyrics +- Proper JSONB für Metadata (waveform, tags) +- Drizzle ORM mit Type Safety +- Seed-Daten vorhanden + +**Lücken:** + +- Keine Volltextsuche-Indexes +- lyrics/lyric_lines Schema könnte optimiert werden + +## Testing (45/100) + +**Stärken:** + +- 3 Service-Specs: song, playlist, library (678 LOC) +- Jest Config mit 80% Threshold +- Mock Factories vorhanden + +**Lücken:** + +- Keine Controller-Tests +- Keine Frontend-Tests +- Keine E2E Tests +- Coverage deutlich unter Threshold + +## Deployment (85/100) + +**Stärken:** + +- Multi-Stage Dockerfiles (Backend + Web) +- Health Checks konfiguriert +- Entrypoint Scripts mit DB-Readiness Check +- S3 Storage Bucket konfiguriert (MinIO) + +**Lücken:** + +- Noch nicht in Produktion deployed +- Kein docker-compose.macmini.yml Eintrag +- Kein CI/CD Pipeline + +## Security (68/100) + +**Stärken:** + +- JwtAuthGuard auf allen Endpoints +- CurrentUser Decorator +- ParseUUIDPipe für Input Validation +- CORS konfiguriert + +**Lücken:** + +- **Kein Rate Limiting** - kritisch für Upload-Endpoints +- Keine GDPR-Endpoints (Admin) +- Keine File-Size Validation im Backend + +## UX (60/100) + +**Stärken:** + +- Audio-Player mit Queue, Shuffle, Repeat +- Waveform-Editor +- PWA Dependencies vorhanden + +**Lücken:** + +- **Nur Englisch** - kein i18n konfiguriert +- Keine Offline-Funktionalität +- Mobile App archiviert +- Keine Accessibility-Features dokumentiert + +## 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 diff --git a/apps/manacore/apps/landing/src/content/audits/2026-03-19-nutriphi.md b/apps/manacore/apps/landing/src/content/audits/2026-03-19-nutriphi.md new file mode 100644 index 000000000..1a007972d --- /dev/null +++ b/apps/manacore/apps/landing/src/content/audits/2026-03-19-nutriphi.md @@ -0,0 +1,67 @@ +--- +title: 'NutriPhi: Production Readiness Audit' +description: 'Ernährungstracking mit Gemini AI Food-Analyse, 8 Backend-Modulen und 1.457 Test-Zeilen - aber nicht deployed' +date: 2026-03-19 +app: 'nutriphi' +author: 'Till Schneider' +tags: ['audit', 'nutriphi', 'production-readiness', 'ai'] +score: 63 +scores: + backend: 78 + frontend: 62 + database: 80 + testing: 58 + deployment: 40 + documentation: 85 + security: 68 + ux: 55 +status: 'beta' +stats: + backendModules: 8 + webRoutes: 10 + components: 5 + dbTables: 6 + testFiles: 8 + testCount: 45 + languages: 2 +--- + +## Zusammenfassung + +NutriPhi ist ein **AI-gestütztes Ernährungstracking** mit Google Gemini für Food-Analyse. Solides Backend mit guter Doku und Tests, aber nicht deployed und schwache Web-UI. + +## Backend (78/100) + +- 8 Module: Analysis, Favorites, Goals, Meal, Recommendations, Stats, Utils, Database +- 6 Controller, Gemini AI Integration +- 18 Auth Guard Usages +- **Lücke:** Keine DTOs, kein Rate Limiting + +## Frontend (62/100) + +- Nur 10 Routes, 5 Komponenten, 2 Stores +- Minimal für die Feature-Komplexität +- **Lücke:** Wenig State Management, kein PWA + +## Testing (58/100) + +- 8 Test-Files, 1.457 LOC Tests (~45 Tests) +- Gute Coverage für Backend Services +- **Lücke:** Keine E2E Tests + +## Documentation (85/100) + +- 368 Zeilen CLAUDE.md - sehr umfassend +- Gemini Integration, Schema, API alles dokumentiert + +## Deployment (40/100) + +- Dockerfiles vorhanden, aber **nicht deployed** +- Kein docker-compose.macmini.yml Eintrag +- Landing Page auf Cloudflare Pages + +## Top-3 Empfehlungen + +1. **Production Deployment** - docker-compose.macmini.yml + Deploy +2. **Rate Limiting** - ThrottlerModule für AI-Endpoints +3. **Web-UI ausbauen** - Mehr Komponenten, Stores, Interaktivität diff --git a/apps/manacore/apps/landing/src/content/audits/2026-03-19-photos.md b/apps/manacore/apps/landing/src/content/audits/2026-03-19-photos.md new file mode 100644 index 000000000..9a260d698 --- /dev/null +++ b/apps/manacore/apps/landing/src/content/audits/2026-03-19-photos.md @@ -0,0 +1,60 @@ +--- +title: 'Photos: Production Readiness Audit' +description: 'Fotogalerie mit Alben, Tags, Favorites - deployed auf mana.how mit mana-media Integration, aber keine Tests' +date: 2026-03-19 +app: 'photos' +author: 'Till Schneider' +tags: ['audit', 'photos', 'production-readiness'] +score: 62 +scores: + backend: 82 + frontend: 65 + database: 72 + testing: 0 + deployment: 85 + documentation: 78 + security: 65 + ux: 55 +status: 'beta' +stats: + backendModules: 7 + webRoutes: 12 + components: 20 + dbTables: 5 + testFiles: 0 + testCount: 0 + languages: 3 +--- + +## Zusammenfassung + +Photos ist eine **Fotogalerie-App** mit Alben, Tags, Favorites und mana-media Proxy-Integration. Deployed auf mana.how (photos-api.mana.how, photos.mana.how). + +## Backend (82/100) + +- 7 Module: Album, Image, Favorite, Tag, Profile, Admin, Health +- 26 API-Endpoints (umfangreichste API) +- 3 DTOs, ServiceAuthGuard +- mana-media Integration für Medien-Storage +- **Lücke:** Kein Rate Limiting + +## Frontend (65/100) + +- 12 Routes, 20 Komponenten, 25 Stores (komplexer State) +- 3 Sprachen +- **Lücke:** Nur 2 direkte API-Calls (nutzt mana-media Proxy) + +## Testing (0/100) + +**Keine Tests.** + +## Deployment (85/100) + +- Deployed auf mana.how (Port 3039 Backend, 5019 Web) +- Dockerfiles + prod URLs dokumentiert + +## Top-3 Empfehlungen + +1. **Tests** - Album/Image Service Specs +2. **Rate Limiting** - Für Upload-Endpoints +3. **PWA** - Für Offline-Bildbetrachtung 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 new file mode 100644 index 000000000..a7f7f30de --- /dev/null +++ b/apps/manacore/apps/landing/src/content/audits/2026-03-19-picture.md @@ -0,0 +1,64 @@ +--- +title: 'Picture: Production Readiness Audit' +description: 'AI-Bildgenerierung mit 11 Modulen, Replicate Integration, Credit-System, 5 Sprachen - deployed aber ohne Rate Limiting' +date: 2026-03-19 +app: 'picture' +author: 'Till Schneider' +tags: ['audit', 'picture', 'production-readiness', 'ai'] +score: 72 +scores: + backend: 85 + frontend: 80 + database: 85 + testing: 15 + deployment: 75 + documentation: 78 + security: 62 + ux: 78 +status: 'production' +stats: + backendModules: 11 + webRoutes: 19 + components: 25 + dbTables: 10 + testFiles: 2 + testCount: 5 + 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. + +## Backend (85/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) + +## Frontend (80/100) + +- 19 Routes, 25 Komponenten, 27 Stores (komplexeste State-Verwaltung) +- Canvas-Editor, Boards, Explore, Archive +- 5 Sprachen (DE, EN, IT, FR, ES) +- Mobile App (Expo) vorhanden +- **Lücke:** Kein PWA + +## Testing (15/100) + +- Nur 2 Test-Files mit ~5 Tests +- Minimale Coverage + +## Security (62/100) + +- Auth Guards ✓ (12 Usages) +- **KEIN Rate Limiting** - kritisch für kostenpflichtige AI-Generation +- Keine File-Size Validation + +## 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 diff --git a/apps/manacore/apps/landing/src/content/audits/2026-03-19-planta.md b/apps/manacore/apps/landing/src/content/audits/2026-03-19-planta.md new file mode 100644 index 000000000..4f30de749 --- /dev/null +++ b/apps/manacore/apps/landing/src/content/audits/2026-03-19-planta.md @@ -0,0 +1,54 @@ +--- +title: 'Planta: Production Readiness Audit' +description: 'Pflanzentracker mit Gemini AI Analyse, Gießpläne - Early Stage ohne Tests und PWA' +date: 2026-03-19 +app: 'planta' +author: 'Till Schneider' +tags: ['audit', 'planta', 'production-readiness', 'ai'] +score: 50 +scores: + backend: 68 + frontend: 58 + database: 70 + testing: 0 + deployment: 45 + documentation: 62 + security: 55 + ux: 50 +status: 'alpha' +stats: + backendModules: 6 + webRoutes: 12 + components: 12 + dbTables: 4 + testFiles: 0 + testCount: 0 + languages: 3 +--- + +## Zusammenfassung + +Planta ist ein **Pflanzentracker** mit Gemini AI für Pflanzenerkennung/-analyse und Gießplänen. Frühe Phase mit funktionalem Backend aber ohne Tests. + +## Backend (68/100) + +- 6 Module: Plant, Photo, Analysis, WateringSchedule, Database, Health +- 4 Controller, 2 DTOs +- Gemini AI Integration +- **Lücke:** Kein Rate Limiting, wenig DTOs + +## Frontend (58/100) + +- 12 Routes, 12 Komponenten, 14 Stores +- 3 Sprachen +- **Lücke:** Kein PWA, kein Error Boundary + +## Testing (0/100) + +**Keine Tests.** + +## Top-3 Empfehlungen + +1. **Tests** - Plant/Analysis Service Specs +2. **Rate Limiting** - Für AI-Analyse Endpoints +3. **Deployment vorbereiten** diff --git a/apps/manacore/apps/landing/src/content/audits/2026-03-19-presi.md b/apps/manacore/apps/landing/src/content/audits/2026-03-19-presi.md new file mode 100644 index 000000000..c859fe3b0 --- /dev/null +++ b/apps/manacore/apps/landing/src/content/audits/2026-03-19-presi.md @@ -0,0 +1,59 @@ +--- +title: 'Presi: Production Readiness Audit' +description: 'Präsentationstool mit Slides, Themes, Sharing - 6 Sprachen, starke Frontend-Architektur, aber keine Tests' +date: 2026-03-19 +app: 'presi' +author: 'Till Schneider' +tags: ['audit', 'presi', 'production-readiness'] +score: 55 +scores: + backend: 65 + frontend: 75 + database: 70 + testing: 0 + deployment: 55 + documentation: 80 + security: 55 + ux: 68 +status: 'beta' +stats: + backendModules: 7 + webRoutes: 16 + components: 18 + dbTables: 4 + testFiles: 0 + testCount: 0 + languages: 6 +--- + +## 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), aber keine Tests. + +## Backend (65/100) + +- 7 Module: Deck, Slide, Theme, SharedDeck, Admin, Database, Health +- 5 Controller, aber nur 1 DTO +- 2 Migrations vorhanden +- **Lücke:** Kein Rate Limiting, minimale DTOs + +## Frontend (75/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) +- Mobile App Scaffolding vorhanden (Expo) + +## Testing (0/100) + +**Keine Tests.** + +## Documentation (80/100) + +- 232 Zeilen CLAUDE.md (zweitbeste Doku) + +## Top-3 Empfehlungen + +1. **Tests** - Deck/Slide Service Specs +2. **Rate Limiting** +3. **Production Deployment** diff --git a/apps/manacore/apps/landing/src/content/audits/2026-03-19-questions.md b/apps/manacore/apps/landing/src/content/audits/2026-03-19-questions.md new file mode 100644 index 000000000..6670bd775 --- /dev/null +++ b/apps/manacore/apps/landing/src/content/audits/2026-03-19-questions.md @@ -0,0 +1,61 @@ +--- +title: 'Questions: Production Readiness Audit' +description: 'AI Research Assistant mit 32 Endpoints, 11 DTOs, 95 Validatoren - feature-reichstes Backend, aber kein Docker' +date: 2026-03-19 +app: 'questions' +author: 'Till Schneider' +tags: ['audit', 'questions', 'production-readiness', 'ai'] +score: 48 +scores: + backend: 88 + frontend: 62 + database: 78 + testing: 0 + deployment: 10 + documentation: 72 + security: 55 + ux: 55 +status: 'alpha' +stats: + backendModules: 8 + webRoutes: 12 + components: 16 + dbTables: 5 + testFiles: 0 + testCount: 0 + languages: 3 +--- + +## Zusammenfassung + +Questions hat das **komplexeste Backend** aller Apps: 32 Endpoints, 11 DTOs (265 LOC), 95 Validation Decorators. Aber komplett ohne Docker/Deployment-Infrastruktur. + +## Backend (88/100) + +- 8 Module: Collection, Question, Research, Source, Answer, Admin, Database, Health +- 32 Endpoints (meiste aller Apps) +- 11 DTOs, 265 LOC (beste Validation) +- 95 class-validator Decorators +- AI Research mit mana-search + mana-llm Integration + +## Frontend (62/100) + +- 12 Routes, 16 Komponenten, 21 Stores +- 3 Sprachen +- **Lücke:** Kein PWA, wenig Komponenten + +## Deployment (10/100) + +- **Kein Dockerfile** - weder Backend noch Web +- Kein docker-compose Eintrag +- Nicht deployed + +## Testing (0/100) + +**Keine Tests** trotz komplexer Business-Logik. + +## Top-3 Empfehlungen + +1. **Docker-Support** - Backend + Web Dockerfiles erstellen +2. **Tests** - Research/Question Service Specs (kritisch bei AI-Logik) +3. **Rate Limiting** - ThrottlerModule für AI-Research Endpoints diff --git a/apps/manacore/apps/landing/src/content/audits/2026-03-19-skilltree.md b/apps/manacore/apps/landing/src/content/audits/2026-03-19-skilltree.md new file mode 100644 index 000000000..4602cd0e8 --- /dev/null +++ b/apps/manacore/apps/landing/src/content/audits/2026-03-19-skilltree.md @@ -0,0 +1,63 @@ +--- +title: 'Skilltree: Production Readiness Audit' +description: 'Gamifiziertes Skill-Tracking mit Offline-First IndexedDB, PWA, 4 Sprachen - solides MVP aber nicht deployed' +date: 2026-03-19 +app: 'skilltree' +author: 'Till Schneider' +tags: ['audit', 'skilltree', 'production-readiness'] +score: 58 +scores: + backend: 65 + frontend: 68 + database: 72 + testing: 28 + deployment: 55 + documentation: 62 + security: 65 + ux: 72 +status: 'beta' +stats: + backendModules: 4 + webRoutes: 6 + components: 7 + dbTables: 6 + testFiles: 2 + testCount: 12 + languages: 4 +--- + +## Zusammenfassung + +Skilltree ist ein **gamifiziertes Skill-Tracking** mit Offline-First Architektur (IndexedDB). Einzige App neben Matrix mit echtem PWA-Support und 4 Sprachen. + +## Backend (65/100) + +- 4 Module: Skill, Activity, Database, Health +- 3 DTOs, Rate Limiting konfiguriert +- **Lücke:** Minimal (4 Module) + +## Frontend (68/100) + +- 6 Routes, 7 Komponenten, 2 Stores +- Offline-First mit IndexedDB +- **PWA aktiv** - Service Worker + Offline Page +- 4 Sprachen (DE, EN, FR, ES) + +## Testing (28/100) + +- 2 Test-Files, 1.114 LOC (aber hauptsächlich Fixture-Daten) +- ~12 tatsächliche Tests +- **Lücke:** Keine Unit Tests für Services + +## UX (72/100) + +- PWA ✓, Offline-First ✓ +- 4 Sprachen ✓ +- Gamification mit Levels, Branches +- **Lücke:** Kein Error Boundary + +## Top-3 Empfehlungen + +1. **Production Deploy** - docker-compose.macmini.yml Eintrag +2. **Service-Tests** - Skill/Activity Service Specs +3. **Mehr Komponenten** - UI für Gamification erweitern diff --git a/apps/manacore/apps/landing/src/content/audits/2026-03-19-storage.md b/apps/manacore/apps/landing/src/content/audits/2026-03-19-storage.md new file mode 100644 index 000000000..5b65d52f8 --- /dev/null +++ b/apps/manacore/apps/landing/src/content/audits/2026-03-19-storage.md @@ -0,0 +1,58 @@ +--- +title: 'Storage: Production Readiness Audit' +description: 'Cloud Drive mit 10 Backend-Modulen, File/Folder/Share/Trash - feature-complete aber null Tests und nicht deployed' +date: 2026-03-19 +app: 'storage' +author: 'Till Schneider' +tags: ['audit', 'storage', 'production-readiness'] +score: 55 +scores: + backend: 85 + frontend: 70 + database: 82 + testing: 0 + deployment: 42 + documentation: 78 + security: 72 + ux: 55 +status: 'beta' +stats: + backendModules: 10 + webRoutes: 17 + components: 10 + dbTables: 7 + testFiles: 0 + testCount: 0 + languages: 2 +--- + +## Zusammenfassung + +Storage hat das **ausgereifteste Backend** (10 Module) mit vollständigem Cloud-Drive (Files, Folders, Shares, Trash, Tags, Versions, Search). Aber null Tests und nicht deployed. + +## Backend (85/100) + +- 10 Module: File, Folder, Share, Storage, Search, Tag, Trash, Admin, Database, Health +- 7 Controller, 4 DTOs (beste DTO-Coverage nach Todo) +- 22 Auth Guard Usages (höchste nach Contacts) +- S3 Storage Integration + +## Frontend (70/100) + +- 17 Routes, 10 Komponenten, 5 Stores +- **Lücke:** Wenig Komponenten, kein PWA + +## Testing (0/100) + +**Keine Tests.** Kritische Lücke für eine File-Management App. + +## Deployment (42/100) + +- Dockerfiles vorhanden +- Nicht deployed, kein docker-compose Eintrag + +## Top-3 Empfehlungen + +1. **Tests** - File/Folder/Share Service Specs (kritisch für Datenverlust-Prävention) +2. **Production Deployment** - docker-compose.macmini.yml +3. **PWA + Offline** - Für Cloud Drive essentiell diff --git a/apps/manacore/apps/landing/src/content/audits/2026-03-19-todo.md b/apps/manacore/apps/landing/src/content/audits/2026-03-19-todo.md new file mode 100644 index 000000000..d659d3142 --- /dev/null +++ b/apps/manacore/apps/landing/src/content/audits/2026-03-19-todo.md @@ -0,0 +1,63 @@ +--- +title: 'Todo: Production Readiness Audit' +description: 'Aufgabenverwaltung mit Kanban, Projekten, Labels, 19 DTOs und 39 Tests - deployed auf mana.how' +date: 2026-03-19 +app: 'todo' +author: 'Till Schneider' +tags: ['audit', 'todo', 'production-readiness'] +score: 79 +scores: + backend: 90 + frontend: 82 + database: 88 + testing: 60 + deployment: 90 + documentation: 90 + security: 82 + ux: 68 +status: 'production' +stats: + backendModules: 7 + webRoutes: 13 + components: 30 + dbTables: 8 + testFiles: 8 + testCount: 39 + languages: 2 +--- + +## Zusammenfassung + +Todo ist eine **feature-reiche Aufgabenverwaltung** mit Kanban-Boards, Projekten, Labels, Reminders und die App mit den **meisten DTOs** (19). Deployed auf mana.how mit solidem Testing. + +## Backend (90/100) + +- 7 Module: Project, Task, Label, Reminder, Kanban, Network, Admin +- 19 DTOs (beste Validation aller Apps) +- Rate Limiting (ThrottlerModule) +- MetricsModule, ManaCoreModule +- GDPR Admin-Endpoints + +## Frontend (82/100) + +- 13 Routes, 30 Komponenten, 13 Stores +- Kanban-Board, Spiral-View, Projekt-Views +- **Lücke:** Nur 2 Sprachen, kein PWA + +## Testing (60/100) + +- 8 Test-Files mit 39 Tests +- Backend + Frontend Tests vorhanden +- **Lücke:** Coverage noch unter 80% Threshold + +## Deployment (90/100) + +- Deployed auf mana.how (todo.mana.how) +- Multi-Stage Dockerfiles +- docker-compose.macmini.yml konfiguriert + +## Top-3 Empfehlungen + +1. **Test-Coverage auf 80% bringen** - Controller-Tests fehlen +2. **i18n erweitern** - Mindestens 5 Sprachen +3. **PWA aktivieren** diff --git a/apps/manacore/apps/landing/src/content/audits/2026-03-19-traces.md b/apps/manacore/apps/landing/src/content/audits/2026-03-19-traces.md new file mode 100644 index 000000000..b82f26fb2 --- /dev/null +++ b/apps/manacore/apps/landing/src/content/audits/2026-03-19-traces.md @@ -0,0 +1,63 @@ +--- +title: 'Traces: Production Readiness Audit' +description: 'GPS-Tracking mit AI City Guides - 7 Backend-Module, Expo Mobile App, aber kein Docker, keine Tests, kein i18n' +date: 2026-03-19 +app: 'traces' +author: 'Till Schneider' +tags: ['audit', 'traces', 'production-readiness', 'ai', 'mobile'] +score: 35 +scores: + backend: 72 + frontend: 10 + database: 70 + testing: 0 + deployment: 8 + documentation: 45 + security: 55 + ux: 35 +status: 'alpha' +stats: + backendModules: 7 + webRoutes: 0 + components: 18 + dbTables: 8 + testFiles: 0 + testCount: 0 + languages: 0 +--- + +## Zusammenfassung + +Traces ist eine **Mobile-First GPS-Tracking App** mit AI City Guides (mana-search + mana-llm). Nur Expo Mobile App, keine Web-App. Größte Infrastruktur-Lücken aller Apps. + +## Backend (72/100) + +- 7 Module: Location, City, Place, POI, Guide, Database, Health +- AI-Integration: mana-search für POI Discovery, mana-llm für Narrativ-Generierung +- Credit System (5 Base + 2 pro POI) +- 10 Auth Guard Usages +- **Lücke:** Kein Rate Limiting, keine DTOs + +## Frontend (10/100) + +- **Keine Web-App** - nur Mobile (Expo) +- 20 Mobile Screens, 18 Komponenten +- 5 Tabs: Tracking, Orte, Karte, Städte, Führungen + +## Deployment (8/100) + +- **Kein Docker** - weder Backend noch Web/Mobile +- Kein docker-compose Eintrag +- Nicht deployed + +## UX (35/100) + +- **Kein i18n** - Deutsch hardcoded +- Kein Offline-Support +- Keine Web-App + +## Top-3 Empfehlungen + +1. **Docker-Support** - Backend Dockerfile erstellen +2. **Tests** - Location/Guide Service Specs +3. **i18n** - Mindestens DE + EN diff --git a/apps/manacore/apps/landing/src/content/audits/2026-03-19-zitare.md b/apps/manacore/apps/landing/src/content/audits/2026-03-19-zitare.md new file mode 100644 index 000000000..1ecef2179 --- /dev/null +++ b/apps/manacore/apps/landing/src/content/audits/2026-03-19-zitare.md @@ -0,0 +1,139 @@ +--- +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 diff --git a/apps/manacore/apps/landing/src/content/config.ts b/apps/manacore/apps/landing/src/content/config.ts index a5a760985..31fa83046 100644 --- a/apps/manacore/apps/landing/src/content/config.ts +++ b/apps/manacore/apps/landing/src/content/config.ts @@ -181,6 +181,46 @@ const devlogCollection = defineCollection({ }), }); +const auditsCollection = defineCollection({ + type: 'content', + schema: z.object({ + title: z.string(), + description: z.string(), + date: z.date(), + app: z.string(), + author: z.string().default('Till Schneider'), + tags: z.array(z.string()).optional(), + // Overall score (0-100) + score: z.number().min(0).max(100), + // Category scores (0-100) + scores: z.object({ + backend: z.number().min(0).max(100), + frontend: z.number().min(0).max(100), + database: z.number().min(0).max(100), + testing: z.number().min(0).max(100), + deployment: z.number().min(0).max(100), + documentation: z.number().min(0).max(100), + security: z.number().min(0).max(100), + ux: z.number().min(0).max(100), + }), + // Readiness level + status: z.enum(['prototype', 'alpha', 'beta', 'production', 'mature']), + // Stats + stats: z + .object({ + backendModules: z.number().optional(), + webRoutes: z.number().optional(), + components: z.number().optional(), + dbTables: z.number().optional(), + testFiles: z.number().optional(), + testCount: z.number().optional(), + languages: z.number().optional(), + linesOfCode: z.number().optional(), + }) + .optional(), + }), +}); + const blueprintsCollection = defineCollection({ type: 'content', schema: z.object({ @@ -217,5 +257,6 @@ export const collections = { mission: missionCollection, context: contextCollection, devlog: devlogCollection, + audits: auditsCollection, blueprints: blueprintsCollection, }; diff --git a/apps/manacore/apps/landing/src/pages/audits/[slug].astro b/apps/manacore/apps/landing/src/pages/audits/[slug].astro new file mode 100644 index 000000000..cf336bd0e --- /dev/null +++ b/apps/manacore/apps/landing/src/pages/audits/[slug].astro @@ -0,0 +1,238 @@ +--- +import Layout from '../../layouts/Layout.astro'; +import Navbar from '../../components/navigation/Navbar.astro'; +import Footer from '../../components/navigation/Footer.astro'; +import Section from '../../components/content/Section.astro'; +import Container from '../../components/layout/Container.astro'; +import { getCollection } from 'astro:content'; + +export async function getStaticPaths() { + const audits = await getCollection('audits'); + return audits.map((audit) => ({ + params: { slug: audit.slug }, + props: { audit }, + })); +} + +const { audit } = Astro.props; +const { Content } = await audit.render(); + +const statusLabels: Record = { + prototype: 'Prototyp', + alpha: 'Alpha', + beta: 'Beta', + production: 'Production', + mature: 'Ausgereift', +}; + +const statusColors: Record = { + prototype: 'bg-red-500/10 text-red-500', + alpha: 'bg-orange-500/10 text-orange-500', + beta: 'bg-yellow-500/10 text-yellow-500', + production: 'bg-green-500/10 text-green-500', + mature: 'bg-emerald-500/10 text-emerald-500', +}; + +const categoryLabels: Record = { + backend: 'Backend', + frontend: 'Frontend', + database: 'Database', + testing: 'Testing', + deployment: 'Deployment', + documentation: 'Doku', + security: 'Security', + ux: 'UX', +}; + +function getScoreColor(score: number): string { + if (score >= 85) return 'text-emerald-500'; + if (score >= 70) return 'text-green-500'; + if (score >= 50) return 'text-yellow-500'; + if (score >= 30) return 'text-orange-500'; + return 'text-red-500'; +} + +function getBarColor(score: number): string { + if (score >= 85) return 'bg-emerald-500'; + if (score >= 70) return 'bg-green-500'; + if (score >= 50) return 'bg-yellow-500'; + if (score >= 30) return 'bg-orange-500'; + return 'bg-red-500'; +} +--- + + + + +
+ +
+ {/* Back link */} + + ← Alle Audits + + + {/* Header */} +
+
+ + {statusLabels[audit.data.status]} + + + { + audit.data.date.toLocaleDateString('de-DE', { + day: '2-digit', + month: 'long', + year: 'numeric', + }) + } + + + von {audit.data.author} + +
+ +

{audit.data.title}

+

{audit.data.description}

+
+ + {/* Overall Score */} +
+
+
+

Gesamtscore

+

Gewichteter Durchschnitt aus 8 Kategorien

+
+
+ + {audit.data.score} + + /100 +
+
+
+ + {/* Category Scores */} +
+

Kategorie-Scores

+
+ { + Object.entries(audit.data.scores).map(([key, value]) => ( +
+ + {categoryLabels[key] || key} + +
+
+
+ + {value} + +
+ )) + } +
+
+ + {/* Stats */} + { + audit.data.stats && ( +
+

Metriken

+
+ {audit.data.stats.backendModules !== undefined && ( +
+ + {audit.data.stats.backendModules} + + Backend Module +
+ )} + {audit.data.stats.webRoutes !== undefined && ( +
+ + {audit.data.stats.webRoutes} + + Web Routes +
+ )} + {audit.data.stats.components !== undefined && ( +
+ + {audit.data.stats.components} + + Komponenten +
+ )} + {audit.data.stats.dbTables !== undefined && ( +
+ + {audit.data.stats.dbTables} + + DB Tabellen +
+ )} + {audit.data.stats.testCount !== undefined && ( +
+ + {audit.data.stats.testCount} + + Tests +
+ )} + {audit.data.stats.testFiles !== undefined && ( +
+ + {audit.data.stats.testFiles} + + Test Files +
+ )} + {audit.data.stats.languages !== undefined && ( +
+ + {audit.data.stats.languages} + + Sprachen +
+ )} +
+
+ ) + } + + {/* Tags */} + { + audit.data.tags && audit.data.tags.length > 0 && ( +
+ {audit.data.tags.map((tag: string) => ( + + {tag} + + ))} +
+ ) + } + + {/* Content */} +
+ +
+
+ +
+ +