Intensiver Infrastruktur- und Bugfix-Tag mit 48 Commits: Cross-App SSO endlich funktionsfähig, Calendar-Web von stale GHCR Image auf Local Build migriert, und eine Kette von Routing/CORS/Cookie-Problemen systematisch aufgelöst.
- SSO Cookie-Fix -
SameSite=None+ Session-Cookie bei Login setzen - Calendar-Web Migration - Von veraltetem GHCR Image auf lokalen Docker Build
- Cross-App API Routing -
getBaseUrl()Bug in shared-api-client gefixt - CORS & Caddy - 10+ falsche Reverse-Proxy-Ports korrigiert, CORS für Cross-App erweitert
- MinIO Tunnel - Cloudflare Tunnel für
minio.mana.howeingerichtet - Storage & Docker - Optimierte Dockerfiles, Presigned Multipart, Lifecycle Rules
- Calendar Features - CalDAV Sync UI, Recurring Events, Reminders, Composable-Refactoring
1. Cross-App SSO – Endlich funktionsfähig
Das Single Sign-On über alle *.mana.how Subdomains hatte drei versteckte Bugs, die zusammen verhinderten, dass SSO jemals funktionierte:
Problem 1: Kein Session-Cookie beim Login
Die signIn() Funktion in @manacore/shared-auth nutzte nur den Custom-Endpoint (/api/v1/auth/login), der JWT-Tokens zurückgibt aber kein Session-Cookie setzt. Nur der native Better Auth Endpoint (/api/auth/sign-in/email) setzt das Cookie.
Fix: Nach erfolgreichem JWT-Login wird jetzt zusätzlich der Better Auth Endpoint mit credentials: 'include' aufgerufen.
Problem 2: SameSite=Lax blockiert fetch()
Das Session-Cookie hatte SameSite=Lax, was Cookies nur bei Top-Level-Navigationen (Link-Klicks) sendet — nicht bei programmatischen fetch() Requests. Der SSO-Flow nutzt aber fetch() mit credentials: 'include'.
Fix: SameSite=None wenn COOKIE_DOMAIN gesetzt ist (Production). Fallback auf Lax für lokale Entwicklung.
Problem 3: getBaseUrl() Override
Die getBaseUrl() Funktion in @manacore/shared-api-client überschrieb immer die baseUrl mit window.__PUBLIC_BACKEND_URL__ — egal welche URL der Client eigentlich konfiguriert hatte. Cross-App Clients (Calendar→Todo, Calendar→Contacts) sendeten dadurch alle Requests an den Calendar-Backend.
Fix: Neues useRuntimeUrl: false Flag für Cross-App Clients.
2. Calendar-Web: GHCR → Local Build
calendar-web nutzte noch ein veraltetes GHCR Docker Image, das weder die Cross-App URL-Injection noch aktuelle shared-auth Änderungen enthielt.
Migration:
- Docker-Compose auf
build: context + dockerfileumgestellt - Drei fehlende Packages im Dockerfile ergänzt (
patches,shared-pwa,shared-app-onboarding) - Erfolgreich gebaut und deployed
3. Reverse-Proxy Port-Chaos aufgeräumt
Die Caddyfile.production hatte 10+ falsche Ports — Überbleibsel aus früheren Deployments:
| Domain | Alt | Neu |
|---|---|---|
| mana.how | 5173 | 5000 |
| chat.mana.how | 3000 | 5010 |
| chat-api | 3002 | 3030 |
| todo.mana.how | 5188 | 5011 |
| calendar.mana.how | 5186 | 5012 |
| calendar-api | 3016 | 3032 |
| clock.mana.how | 5187 | 5013 |
| clock-api | 3017 | 3033 |
| contacts.mana.how | 5184 | 5014 |
| grafana | 3100 | 8000 |
| stats | 3200 | 8010 |
Hinweis: Routing läuft über Cloudflare Tunnel (korrekte Ports), nicht Caddy. Caddyfile trotzdem aktualisiert für Dokumentation.
4. CORS für Cross-App Integration
Todo-Backend erlaubte nur todo.mana.how und mana.how als Origins. Calendar und Contacts konnten keine Task-API-Requests machen.
Fix: calendar.mana.how und contacts.mana.how zu CORS_ORIGINS des Todo-Backends hinzugefügt.
5. MinIO Tunnel-Anbindung
Mukke-Songs konnten nicht abgespielt werden: Die presigned S3-URLs zeigten auf minio.mana.how, aber diese Domain fehlte in der Cloudflare Tunnel Config.
Fix: minio.mana.how → localhost:9000 zur Cloudflare Tunnel Config hinzugefügt. Audio-Streaming funktioniert jetzt.
6. Storage & Docker Optimierungen
- Auth Dockerfile: Von ~740MB auf ~320MB optimiert
- Backend Dockerfiles: DevDeps Pruning für alle Backends
- shared-storage: Presigned Multipart Upload,
deleteByPrefix,copy,getMetadata, File-Size Validation, Lifecycle Rules - Deploy Tracking: Neues Grafana Dashboard mit PostgreSQL + Pushgateway
- CD Pipeline: Mukke-Backend und -Web hinzugefügt, Matrix-Benachrichtigung bei Deploy-Fehlern
7. Calendar Features & Refactoring
- CalDAV/iCal Sync UI — Externe Kalender verbinden und synchronisieren
- Recurring Events — Wiederholungsdialog mit RFC 5545 RRULE Support
- Reminders — Erinnerungen erstellen und verwalten
- WeekView Refactoring — Inline-Logik in Composables extrahiert (1600→903 LOC)
- Settings vereinfacht — Von 41 auf 18 persistierte Einstellungen reduziert
- ViewCarousel — Touch-Gesten aus UnifiedBar extrahiert
- Tests — Composable Unit Tests, WeekView E2E, CalDAV Sync API Tests
8. Weitere Fixes
- Picture App — Migration von Netlify zu Docker/Mac Mini, Dockerfile-Fixes
- Contacts — Verwaiste Fotos bei Duplikat-Merge aufräumen, Storage-Optimierung
- Mukke — 34 Frontend-Tests, klickbare Songs, Player Error Handling
- Games — WhoPixels Hosting unter
whopxl.mana.how - DevBuildBadge — Shared Component für Development-Build-Kennzeichnung
Zusammenfassung
| Bereich | Änderungen |
|---|---|
| SSO/Auth | 3 Bugs gefixt (Cookie, SameSite, URL-Override), funktioniert jetzt cross-subdomain |
| Docker | Calendar-Web migriert, Auth Image halbiert, alle Backend-Dockerfiles optimiert |
| Routing | Caddyfile korrigiert, MinIO Tunnel, CORS erweitert |
| Calendar | CalDAV, Recurrence, Reminders, Tests, Composable-Refactoring |
| Storage | Multipart, Lifecycle, Bulk-Delete, Validation |
| Testing | Mukke 34 Tests, Calendar Composables + E2E, Sync API Tests |