diff --git a/apps/manacore/apps/landing/src/content/manascore/2026-04-01-memoro.md b/apps/manacore/apps/landing/src/content/manascore/2026-04-01-memoro.md new file mode 100644 index 000000000..52329decf --- /dev/null +++ b/apps/manacore/apps/landing/src/content/manascore/2026-04-01-memoro.md @@ -0,0 +1,227 @@ +--- +title: 'Memoro: Production Readiness Audit' +description: 'ManaScore-Bewertung der Memoro AI Voice Memo App — Web, Server, Audio-Server und Mobile' +date: 2026-04-01 +app: 'memoro' +author: 'Till Schneider' +tags: ['audit', 'memoro', 'production-readiness', 'voice-memos', 'ai'] + +score: 58 +scores: + backend: 70 + frontend: 72 + database: 65 + testing: 10 + deployment: 55 + documentation: 78 + security: 60 + ux: 55 + +status: 'beta' +version: '1.0.0' + +stats: + backendModules: 15 + webRoutes: 16 + components: 79 + dbTables: 8 + testFiles: 4 + testCount: 0 + languages: 5 + linesOfCode: 140971 + sourceFiles: 801 + sizeInMb: 12.0 + commits: 22 + contributors: 1 + firstCommitDate: '2025-03-01' + todoCount: 13 + apiEndpoints: 15 + stores: 2 + +lighthouse: + performance: 0 + accessibility: 0 + bestPractices: 0 + seo: 0 + +dependencies: + total: 85 + outdated: 3 + vulnerabilities: + critical: 0 + high: 0 + moderate: 0 + low: 0 + lastChecked: '2026-04-01' + +apiConformity: + consistentResponses: false + errorCodes: true + pagination: false + versioning: true + documentation: false + healthEndpoint: true + validation: false + +consistency: + sharedAuth: true + sharedUi: true + sharedTheme: true + sharedBranding: true + sharedI18n: true + sharedErrorTracking: true + sharedStorage: false + sharedLlm: false +--- + +## Zusammenfassung + +Memoro ist eine KI-gestützte Sprachnotiz-App mit Web (SvelteKit), Mobile (Expo), Server (Hono/Bun) und Audio-Server (Hono/Bun). Die App hat eine solide Architektur mit 801 Quelldateien und nutzt 21 Shared Packages. Kritische Schwächen: keine Tests, kein Rate Limiting, `archived: true` in Branding-Config, kein CI/CD, externe Cloud-APIs (Azure STT, Gemini LLM) statt eigener Services. + +## Backend (70/100) + +**Stärken:** + +- Saubere Hono-Architektur mit `@manacore/shared-hono` (Auth-Middleware, Error-Handler) +- Zwei spezialisierte Server: Main-Server (3015) + Audio-Server (3016) mit Fire-and-Forget-Pattern +- Service-Key-Auth für Server-to-Server-Kommunikation +- Credit-System mit Validierung vor Verarbeitung +- Health-Endpoints auf beiden Servern + +**Lücken:** + +- Kein Rate Limiting auf dem Main-Server — öffentliche API ohne Schutz +- Keine Input-Validierung mit Zod/Schema — nur manuelle Checks +- Keine OpenAPI/Swagger-Dokumentation +- Keine konsistente ApiResult-Response-Struktur +- Externe Cloud-APIs (Azure Speech, Gemini, Azure OpenAI) statt eigener mana-stt/mana-llm Services +- Kein Pagination auf Listen-Endpoints + +## Frontend (72/100) + +**Stärken:** + +- Svelte 5 Runes korrekt verwendet ($state, $derived, $props) +- 79 Komponenten mit sauberem Tailwind CSS v4 +- Dark/Light Mode mit Flash-Prevention +- PWA-Manifest konfiguriert mit @manacore/shared-pwa +- Keyboard-Shortcuts (Ctrl+1-9 Navigation) +- Loading-Skeletons für alle Seiten +- Local-First mit Dexie.js und Guest-Mode +- 16 Routen inkl. Dashboard, Memos, Spaces, Blueprints, Statistics + +**Lücken:** + +- Keine +error.svelte Error-Boundary-Pages +- i18n nur 5 Sprachen (de, en, fr, it, es) — Mobile hat 32 +- Sentry konfiguriert aber nicht initialisiert +- PostHog konfiguriert aber nicht initialisiert +- Service Worker nicht implementiert trotz PWA-Config + +## Database (65/100) + +**Stärken:** + +- Supabase mit RLS-Policies über JWT Claims +- Service-Role-Client mit explizitem user_id-Filtering +- Klare Tabellenstruktur: memos, memories, blueprints, prompts, spaces, tags, profiles + +**Lücken:** + +- Kein Drizzle ORM — direkte Supabase-Client-Aufrufe +- Keine lokalen Migrations-Dateien (rein Supabase-managed) +- Kein Schema-Versionierung im Repo +- Local-First Migration noch nicht vollständig (Hybrid-Ansatz) + +## Testing (10/100) + +**Stärken:** + +- Vitest in vite.config.ts konfiguriert +- 4 Test-Dateien im Repo vorhanden + +**Lücken:** + +- 0 ausführbare Tests in Server, Audio-Server und Web +- Keine Unit-Tests für API-Endpunkte +- Keine Integration-Tests für Transkriptions-Pipeline +- Keine E2E-Tests +- Kein Coverage-Reporting +- Kritischster Punkt: Die gesamte Azure/Gemini-Integration hat null Test-Abdeckung + +## Deployment (55/100) + +**Stärken:** + +- Dockerfiles für Web, Audio-Server vorhanden (mit Health-Checks) +- docker-compose.macmini.yml vollständig konfiguriert (3 Container) +- Shared Dockerfile.hono-server für Main-Server +- Container haben restart: always und Memory-Limits + +**Lücken:** + +- Memoro NICHT im CI/CD-Pipeline (cd-macmini.yml) +- Kein automatisches Deployment — nur manuell via Docker-Compose +- Kein Staging-Environment +- App ist als `archived: true` in shared-branding markiert +- requiredTier: 'founder' — nur für Gründer zugänglich + +## Documentation (78/100) + +**Stärken:** + +- CLAUDE.md mit 460 Zeilen: Architektur, Commands, Auth, Audio, AI, Themes, Spaces +- README.md mit 374 Zeilen: Installation, Setup, Stack-Übersicht +- Web-App README mit Features und Deployment-Optionen +- Gut dokumentierte Umgebungsvariablen mit .env.example + +**Lücken:** + +- Keine API-Dokumentation (OpenAPI/Swagger) +- Keine Architektur-Diagramme +- Audio-Server-Dokumentation fehlt + +## Security (60/100) + +**Stärken:** + +- JWT-Auth via @manacore/shared-hono Middleware +- Service-Key-Auth für interne Server-Kommunikation +- CORS korrekt konfiguriert mit Origin-Whitelist +- RLS-Policies in Supabase +- HMAC-Verifizierung für Meeting-Webhooks + +**Lücken:** + +- Kein Rate Limiting — DDoS/Abuse-Gefahr +- Keine Input-Sanitization (XSS-Risiko bei Markdown-Rendering) +- Keine Zod-Validierung auf API-Eingaben +- Azure/Gemini API-Keys in Environment — keine Key-Rotation +- Sentry nicht initialisiert — Sicherheitsvorfälle werden nicht getrackt + +## UX (55/100) + +**Stärken:** + +- Dark/Light Mode mit System-Preference-Fallback +- Keyboard-Shortcuts für Navigation +- Responsive Design mit Mobile-First +- Loading-Skeletons für Perceived Performance +- Guest-Mode mit Demo-Daten +- 4 Theme-Varianten (Lume, Nature, Stone, Ocean) + +**Lücken:** + +- Keine Offline-Unterstützung trotz PWA-Config (Service Worker fehlt) +- Web-App hat nur 5 Sprachen vs. 32 in Mobile +- Keine Error-Pages für Nutzer +- Kein Lighthouse-Audit durchgeführt +- Analytics nicht aktiv — kein Nutzer-Feedback-Loop + +## Top-5 Empfehlungen + +1. **`archived: true` entfernen** — App ist in Branding-Config als archiviert markiert, wird dadurch nicht im App-Switcher angezeigt +2. **Rate Limiting + Input-Validierung** — Server ist ohne Schutz erreichbar, Zod-Schemas für alle Endpoints +3. **CI/CD-Pipeline** — Memoro in cd-macmini.yml aufnehmen für automatisches Deployment +4. **Error Boundaries** — +error.svelte Pages für bessere Fehlerbehandlung im Frontend +5. **Tests schreiben** — Mindestens API-Endpoint-Tests für Server und Transkriptions-Pipeline