docs(devlog): rewrite morning session devlog with all 61 commits

Comprehensive devlog covering Manalink deployment, CityCorners features,
Spiral-DB stabilization, auth migration, legacy cleanup, observability,
Mukke redesign, and landing page builder.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-03-23 13:29:38 +01:00
parent 060eb01de7
commit 9d4b59fcf8

View file

@ -1,6 +1,6 @@
---
title: 'Manalink: Matrix-Client Production-Ready & Live'
description: 'Manalink (Matrix-Chat-Client) auf Prod-Readiness gebracht und erfolgreich auf link.mana.how deployed. Inkl. Security Headers, Error Pages, Tests und E2EE-Feedback.'
title: 'Manalink Live, CityCorners, Spiral-DB, Auth-Migration & Massive Cleanup'
description: 'Manalink Matrix-Client live deployed, CityCorners City Guide erweitert, Spiral-DB stabilisiert (174 Tests), 3 Mobile-Apps auf mana-core-auth migriert, Legacy-Codebase bereinigt, Landing Page Builder Service gestartet.'
date: 2026-03-23
author: 'Till Schneider'
category: 'release'
@ -8,45 +8,55 @@ tags:
[
'matrix',
'manalink',
'deployment',
'citycorners',
'spiral-db',
'auth',
'supabase-migration',
'security',
'testing',
'vitest',
'pwa',
'e2ee',
'observability',
'mukke',
'docker',
'sso',
'cleanup',
'landing-builder',
'pwa',
'i18n',
]
featured: true
commits: 7
readTime: 5
commits: 61
readTime: 18
stats:
filesChanged: 18
linesAdded: 942
linesRemoved: 620
filesChanged: 695
linesAdded: 50947
linesRemoved: 33665
contributors:
- name: 'Till Schneider'
handle: 'Till-JS'
commits: 7
commits: 61
workingHours:
start: '2026-03-23T09:00'
start: '2026-03-23T06:00'
end: '2026-03-23T13:30'
---
Manalink, unser Matrix-Chat-Client, ist jetzt **live auf [link.mana.how](https://link.mana.how)** mit **7 Commits**:
Extrem produktiver Vormittag mit **61 Commits** über **695 Dateien** und netto **+17.282 Zeilen**:
- **Prod-Readiness Audit** - Umfassende Analyse der Web-App auf Production-Tauglichkeit
- **Security** - Server-seitige Security Headers (CSP, X-Frame-Options, Referrer-Policy)
- **Error Handling** - Globale Error/404-Page mit Navigation
- **Tests** - Vitest-Setup mit 14 Unit-Tests für Matrix-Client-Funktionen
- **E2EE-Feedback** - Sichtbarer Hinweis wenn Verschlüsselung nicht verfügbar
- **Deployment** - Docker-Build gefixt und Container live auf Mac Mini
- **Manalink Live** - Matrix-Chat-Client auf Production gebracht und auf link.mana.how deployed
- **CityCorners** - City Guide für Konstanz mit PWA, i18n, mana-search Integration und 31 Backend-Tests
- **Spiral-DB** - 174 Tests, kritische PNG-Bugs gefixt, in Zitare und Contacts integriert
- **Auth-Migration** - 3 Mobile-Apps (ManaCore, Context, ManaDeck) von Supabase auf mana-core-auth
- **Massive Cleanup** - 50+ Legacy-Dateien gelöscht, Hetzner-Artefakte entfernt, API-Keys bereinigt
- **Observability** - Prometheus Metrics für mana-search, mana-media und Synapse
- **Mukke** - FullPlayer als immersives Fullscreen-Erlebnis, CSP- und CORS-Fixes
- **Landing Page Builder** - Neuer Service für Organisation-Landingpages
- **Auth Standardisierung** - URL-Handling in allen 20 Web Auth-Stores vereinheitlicht
---
## Manalink vs. Chat App: Klarstellung
## 1. Manalink: Matrix-Client Production-Ready & Deployed
Vor der Arbeit wurde die Abgrenzung zwischen unseren zwei Chat-Systemen geklärt:
Manalink ist jetzt **live auf [link.mana.how](https://link.mana.how)**. Umfassender Prod-Readiness-Audit mit anschließenden Fixes und Deployment.
### Abgrenzung Chat App vs. Manalink
| | **Chat App** | **Manalink** |
| --------- | ------------------ | ---------------------------------- |
@ -56,24 +66,11 @@ Vor der Arbeit wurde die Abgrenzung zwischen unseren zwei Chat-Systemen geklärt
| E2EE | Nein | Ja (in Arbeit) |
| URL | - | https://link.mana.how |
Beide Apps sind komplementär und werden weiter gepflegt.
### Prod-Readiness Fixes (7 Commits)
---
**Error/404-Page** - Neue globale `+error.svelte` mit Statuscode-Anzeige, deutschen Fehlermeldungen, Zurück- und Startseite-Buttons.
## Prod-Readiness Fixes
### 1. Error/404-Page
Neue globale `+error.svelte` mit:
- Statuscode-Anzeige (404, 500, etc.)
- Deutsche Fehlermeldungen
- Zurück-Button und Startseite-Link
- Konsistentes Design mit dem Rest der App
### 2. Security Headers
Neuer `hooks.server.ts` mit allen relevanten Headern:
**Security Headers** - Neuer `hooks.server.ts`:
```typescript
response.headers.set('X-Frame-Options', 'SAMEORIGIN');
@ -84,96 +81,341 @@ response.headers.set('Cross-Origin-Opener-Policy', 'same-origin');
response.headers.set('Cross-Origin-Embedder-Policy', 'require-corp');
```
### 3. SSO Homeserver-Bug gefixt
**SSO Homeserver-Bug** - SSO-Redirect war hardcoded auf `matrix.mana.how`. Jetzt dynamisch via `VITE_MATRIX_HOMESERVER` und `VITE_MANA_AUTH_URL` Env-Variablen.
SSO-Redirect war hardcoded auf `matrix.mana.how`. Jetzt dynamisch:
**Console.log Cleanup** - 54 `console.log`/`console.warn` Statements entfernt aus `store.svelte.ts` und `+layout.svelte`. Nur echte `console.error` für GlitchTip beibehalten.
- Login-Page: nutzt den eingegebenen Homeserver
- Layout SSO-Callback: konfigurierbar via `VITE_MATRIX_HOMESERVER`
- Auth-URL: konfigurierbar via `VITE_MANA_AUTH_URL`
**PWA devOptions** - `devOptions.enabled` war immer `true` - jetzt nur in Nicht-Production.
### 4. Console.log Cleanup
### Tests: 14 Unit-Tests
**54 `console.log`/`console.warn` Statements** entfernt aus:
Vitest eingerichtet für die kritischen Client-Funktionen:
- `store.svelte.ts` (Matrix Store)
- `+layout.svelte` (App Layout)
Nur echte `console.error` für Fehlerfälle beibehalten (gehen an GlitchTip).
### 5. PWA devOptions
`devOptions.enabled` war immer `true` - jetzt nur noch in Nicht-Production aktiv.
---
## Tests
Vitest eingerichtet mit **14 Unit-Tests** für die kritischen Client-Funktionen:
| Test-Suite | Tests | Was wird getestet |
| Test-Suite | Tests | Abdeckung |
| -------------------- | ----- | ---------------------------------------------------------------- |
| `discoverHomeserver` | 5 | Matrix-User-ID Parsing, .well-known Discovery, Domain-Extraktion |
| `checkHomeserver` | 5 | URL-Normalisierung, Server-Erreichbarkeit, Fehlerbehandlung |
| `loginWithToken` | 4 | Token-Login, URL-Normalisierung, DeviceID-Generierung |
```bash
pnpm --filter @matrix/web test
# 1 Test File, 14 Tests passed
```
### E2EE-Feedback
---
Wenn Rust-Crypto-Init fehlschlägt, zeigt ein Amber-Banner "Verschlüsselung nicht verfügbar" in der Sidebar (Mobile + Desktop). Vorher fiel der Fallback komplett still zurück.
## E2EE-Feedback
### Docker-Deployment
Wenn die Rust-Crypto-Initialisierung fehlschlägt, sieht der User jetzt einen dezenten Amber-Banner:
Drei Probleme im Dockerfile gelöst:
1. **Fehlende `patches/`** - pnpm braucht den Patches-Ordner für Lockfile-Parsing
2. **Fehlendes `eslint-config`** - Root-Workspace-Dependency
3. **react-native Patches** - Werden vor `pnpm install` aus `package.json` entfernt (nicht anwendbar im Web-Only-Kontext)
```
⚠ Verschlüsselung nicht verfügbar
```
Angezeigt in der Sidebar sowohl auf Mobile als auch Desktop. Vorher fiel der Fallback komplett still zurück.
---
## Deployment
### Docker-Build Fixes
Drei Probleme mussten im Dockerfile gelöst werden:
1. **Fehlende `patches/`** - pnpm braucht den Patches-Ordner auch wenn die Patches nicht anwendbar sind
2. **Fehlendes `eslint-config`** - Root-Dependency die im Workspace aufgelöst werden muss
3. **react-native Patches** - Nicht anwendbar im Web-Only-Kontext, werden jetzt vor `pnpm install` aus der `package.json` entfernt
### Live-Deployment
```
Container: mana-matrix-web
Image: matrix-web:latest
Port: 4090 → 5180
Status: healthy
Container: mana-matrix-web | Port: 4090 → 5180 | Status: healthy
URL: https://link.mana.how
```
---
## 2. CityCorners: City Guide für Konstanz
### Initiales Setup (83 Dateien, 3.663+ Zeilen)
Komplett neues Projekt mit drei Apps:
| App | Tech | Port | Features |
| ----------- | --------- | ---- | --------------------------------------------------------- |
| **Landing** | Astro 5 | - | SVG-Illustrationen, Location-Karten, Kategorie-Filter |
| **Backend** | NestJS | 3041 | CRUD API, Drizzle ORM, Favorites, Auth via mana-core-auth |
| **Web** | SvelteKit | 5196 | Leaflet Map, Favorites, Theme/Settings, PillNav |
Infrastruktur: DB-Init-SQL, setup-databases.sh, generate-env.mjs, Dockerfiles, docker-compose.macmini.yml, Cloudflare wrangler.toml. In shared-branding registriert (AppId, APP_BRANDING, APP_ICONS, CitycornersLogo).
### PWA, i18n & Landing-Migration
- **PWA** mit `@vite-pwa/sveltekit`, Offline-Fallback, Standard-Caching-Preset
- **i18n** mit `svelte-i18n` (DE/EN), alle UI-Strings übersetzt, Language Switcher in PillNav
- **Landing** von Scoped CSS auf Tailwind CSS migriert: Hero, Card Grid, Category Filter, Detail-Timeline
### mana-search Integration
Neues Feature: Web-Lookup für unbekannte Locations über den zentralen mana-search Service. Wenn eine Location nicht in der DB ist, werden Infos aus dem Web extrahiert und vorausgefüllt.
### Location-Submission-Formular
Frontend-Formular zum Einreichen neuer Locations mit `/api/v1/` Prefix auf allen API-Calls.
### Backend Test Suite: 31 Tests
Umfassende Tests für den CityCorners-Backend:
```bash
pnpm --filter @citycorners/backend test
# 31 Tests passed
```
Port von 3025 auf 3041 geändert (3025 war durch mana-llm belegt).
---
## 3. Spiral-DB: Stabilisierung & Integration
### 174 Tests + Kritische Bug-Fixes
Umfassende Test-Suite und mehrere kritische Fixes:
| Bug | Fix |
| -------------------------------- | ------------------------------------------------------- |
| PNG-Kompression funktionslos | `zlibCompress` durch `pako.deflate` ersetzt |
| PNG-Import fehlerhaft | CRC-Validierung + alle Filter-Typen (Sub/Up/Avg/Paeth) |
| Keine Input-Validierung | Records werden gegen Schema validiert vor Insert |
| Index-Overflow | Dynamischer `dataStartRing` verhindert Ring-Überlappung |
| Image-Expansion zu spät | Expand vor Writes statt danach (verhindert OOB) |
| `update()` liest falschen Record | Suche von Ende statt Anfang für neuesten Eintrag |
| String zu lang | 511-Byte Max-Length Enforcement |
| Index-Ring-Count zu klein | 6 Bits (2 Pixel) statt 3 Bits für >7 Ring Support |
### Zitare-Integration
Spiral-DB als zweite App (nach Todo) mit pixelbasierter Spiral-Visualisierung:
- `createQuoteSchema()` mit Feldern für Kategorie, Sprache, Autor, Text, Quote-ID
- Svelte 5 Spiral Store mit `importFavorites`, CRUD, PNG-Export
- `SpiralCanvas` Komponente für interaktive Visualisierung
- `/spiral` Route mit Stats, Records-Liste und Actions
- Navigation (Ctrl+6) und Auto-Import von Favorites
### Contacts-Integration
Dritte App mit Spiral-DB: visuelles Kontakt-Netzwerk (959 Zeilen neu).
---
## 4. Auth-Migration: 3 Mobile-Apps auf mana-core-auth
Große Migrationswelle weg von direkter Supabase-Auth hin zu unserem zentralen `mana-core-auth` Service.
### ManaCore Mobile (907+ / 3.480- Zeilen)
Komplette Migration von Supabase-Auth auf `@manacore/shared-auth`. 20 Dateien geändert.
### Context Mobile (895+ / 2.470- Zeilen)
Migration von direktem Supabase-Zugriff auf Backend-API + mana-core-auth. `AuthContext.tsx` durch `AuthProvider.tsx` ersetzt, neuer `backendApi.ts` Service. 25 Dateien geändert.
### ManaDeck Mobile (820+ / 3.014- Zeilen)
Migration von Custom Auth auf `@manacore/shared-auth`. 8 Dateien geändert.
### Auth Standardisierung
**Mobile Return Format** - Alle Mobile Auth-Funktionen nutzen jetzt einheitlich `{ success, error }` als Rückgabeformat (6 Dateien, 79+ / 67-).
**Web Auth Stores** - URL-Resolution und Token-Handling in allen **20 Web Auth-Stores** standardisiert (530+ / 302-):
```typescript
// Vorher: Hardcoded localhost Fallbacks
return injectedUrl || 'http://localhost:3001';
// Nachher: Nur in DEV Mode Fallback
if (injectedUrl) return injectedUrl;
return import.meta.env.DEV ? DEV_AUTH_URL : '';
```
### Supabase Package entfernt
`@manacore/shared-supabase` komplett entfernt (7 Dateien, 128 Zeilen gelöscht). Nicht mehr benötigt nach Migration.
---
## 5. Massive Cleanup: Legacy-Bereinigung
### Docs & Reports (50+ Dateien, ~30.000 Zeilen gelöscht)
**Root-Level Legacy Reports gelöscht:**
- AUTH\_\*.md (5 Dateien) - Auth-Architektur-Reports, jetzt in CLAUDE.md
- TESTING*STRATEGY*_.md, QA\__, TEST*CASES*\*.md - alte Testing-Pläne
- BACKEND_DESIGN_PATTERN_AUDIT.md, COMPATIBILITY_MATRIX_AND_REMEDIATION.md
- HISTORICAL-ANALYSIS.md, MERGE-FIX-SUMMARY.md, RELEASE-PLAN.md
- MANACORE-TODOS.md, APP-IDEAS.md, COMMANDS.md
**docs/ Cleanup:**
- 6 Testing-Docs (Duplikate, ersetzt durch `.claude/guidelines/testing.md`)
- 3 Env-Audit-Dateien (kanonisch: `ENVIRONMENT_VARIABLES.md`)
- 3 Mac-Mini-Setup-Docs (kanonisch: `MAC_MINI_SERVER.md`)
- 5 Daily Reports (historisch, kein Wert mehr)
- SELF-HOSTING-GUIDE.md (Coolify/Hetzner-basiert, obsolet)
- CHANGELOG, CONSISTENCY_REPORT, CONSOLIDATION_OPPORTUNITIES, pr-reviews/
### Hetzner-Artefakte entfernt
Komplette Bereinigung von Hetzner-Referenzen nach Migration auf Mac Mini:
- `docker/caddy/Caddyfile.production` + `Caddyfile.staging`
- `scripts/deploy/` (deploy-hetzner.sh, build-and-push.sh, health-check.sh, migrate-db.sh, rollback.sh)
- `cicd/` Verzeichnis (11 Hetzner CI/CD-Planungsdocs)
- CI_CD_IMPLEMENTATION_SUMMARY.md, CI_CD_README.md
- CLAUDE.md, ANALYTICS.md, URL_SCHEMA.md aktualisiert
### Security: API-Keys bereinigt
**Kritisch:** Live API-Keys aus `.env.development` entfernt:
- Worldream OpenAI Key (sk-proj-...)
- Worldream Gemini Key
- Worldream Replicate Token
- Worldream Supabase Anon Key (live JWT)
- Dead Supabase-Configs für archivierte Apps
TODO erstellt für Key-Rotation.
### Stale Docs entfernt
Veraltete Design-Pläne und nicht mehr aktuelle Dokumentation bereinigt (4.095 Zeilen).
### Presi Mobile App entfernt
Presi Mobile komplett gelöscht (62 Dateien, 6.528 Zeilen) - war nicht mehr in Entwicklung.
---
## 6. Observability & Monitoring
### Prometheus Metrics für 3 neue Services
| Service | Port | Prefix | Neu |
| ----------- | ---- | -------- | ------------------------ |
| mana-search | 3020 | - | Scraping hinzugefügt |
| mana-media | 3015 | `media_` | MetricsModule + Scraping |
| Synapse | 9002 | - | Scraping hinzugefügt |
- `ServiceDown` Alert von Hardcoded-Liste auf dynamische Regex umgestellt
- `backends.json` Query mit dynamischer Regex ersetzt
- Search, Media, Synapse zu Master-Overview und System-Overview Dashboards hinzugefügt
### Metrics & Monitoring für alle 15 Backends
Zentrales Monitoring ausgerollt (692+ / 474- Zeilen, 23 Dateien).
### GlitchTip Health Check & Disk Monitoring
Neuer Health Check für GlitchTip Error Tracking + Disk Space Monitoring.
### Docker Fixes für Monitoring
- `shared-error-tracking` Package zu allen **15 Web-Dockerfiles** hinzugefügt
- `shared-nestjs-metrics` zu **5 Backend-Dockerfiles** hinzugefügt
- `mana-media` Dockerfile um shared-nestjs-metrics ergänzt
---
## 7. Mukke: Immersiver FullPlayer & Fixes
### FullPlayer Redesign (251+ / 164-)
Komplettes Redesign des FullPlayers als immersives Fullscreen-Erlebnis:
- Visualizer füllt den gesamten Hintergrund
- Controls als Overlay am unteren Rand mit Gradient für Lesbarkeit
- Visualizer-Switcher in der oberen rechten Ecke
- Ersetzt den bisherigen Popup-Overlay
### CSP & CORS Fixes
| Problem | Fix |
| ----------------------------------------- | ----------------------------------- |
| Butterchurn Shader-Kompilierung blockiert | `unsafe-eval` zu CSP hinzugefügt |
| Audio-Wiedergabe von MinIO blockiert | `media-src` zu CSP hinzugefügt |
| MinIO Presigned URLs CORS-Fehler | CORS-Konfiguration für Audio gefixt |
### MiniPlayer Positioning
MiniPlayer wird jetzt über der PillNavigation positioniert statt dahinter.
---
## 8. Landing Page Builder Service (Neu)
Neuer Service für automatisch generierte Organisation-Landingpages:
```
┌──────────────────────┐ ┌─────────────────────┐ ┌──────────────────┐
│ ManaCore Admin UI │────>│ Landing Builder │────>│ Cloudflare │
│ /organizations/ │ │ NestJS (Port 3030) │ │ {slug}.mana.how │
│ [id]/landing │ │ Astro Template │ │ Pages Deploy │
└──────────────────────┘ └─────────────────────┘ └──────────────────┘
```
- **NestJS Service** (Port 3030) mit Astro-Template-Engine
- **Admin UI** in ManaCore Web Dashboard unter `/organizations/[id]/landing`
- **TeamSection + ContactSection** für shared-landing-ui
- **2 Org-Themes**: Classic Dark, Warm Light
- **LandingPageConfig** Types in shared-types
- Docker + CI/CD Integration
---
## 9. Weitere Änderungen
### LLM Playground verschoben
`llm-playground` von `services/` nach `apps/playground/` verschoben (527+ / 530-, 41 Dateien).
### Todo UI-Verbesserungen
- FAB Close-Button war hinter PillNav versteckt - gefixt
- Settings/Mana in Account-Dropdown verschoben
- "Aufgaben" → "Liste" in PillNav umbenannt
- Spiral-Icon statt Sparkle für Spiral-Navigation
- Feedback, Themes, Spiral in Profile-Dropdown verschoben
### Shared UI Fix
Transparenter Hintergrund im Context Menu gefixt.
### Analytics
Umami-Tracking in Todo, Calendar und Contacts erweitert. ANALYTICS.md aktualisiert.
### Error Tracking
`shared-error-tracking` auf ESM-Output umgestellt für SvelteKit-Kompatibilität.
### Infra
- LightWrite → Mukke in Caddyfile Production-Config umbenannt
- Tech Stack Independence Analyse und Roadmap erstellt
---
## Zusammenfassung
| Bereich | Commits | Highlights |
| ---------- | ------- | ---------------------------------------- |
| Security | 1 | Headers, Error Page, Console Cleanup |
| SSO/Config | 1 | Dynamischer Homeserver, Env-Variablen |
| Tests | 1 | Vitest + 14 Unit-Tests |
| E2EE UX | 1 | Verschlüsselungs-Warning Banner |
| Docker | 4 | Patches, eslint-config, RN-Patches Strip |
| Bereich | Commits | Highlights |
| --------------- | ------- | ----------------------------------------------------------------- |
| Manalink | 7 | Prod-Ready, Security, Tests, E2EE-Warning, Live Deploy |
| CityCorners | 8 | PWA, i18n, mana-search, Submission Form, 31 Tests |
| Spiral-DB | 3 | 174 Tests, 8 kritische Bugs gefixt, Zitare + Contacts Integration |
| Auth-Migration | 6 | 3 Mobile-Apps, 20 Web-Stores, Supabase-Package entfernt |
| Cleanup | 7 | 50+ Dateien gelöscht, Hetzner weg, API-Keys bereinigt |
| Observability | 5 | 3 neue Services, 15 Backend Metrics, GlitchTip Health |
| Mukke | 4 | Immersiver FullPlayer, CSP/CORS-Fixes, MiniPlayer |
| Landing Builder | 3 | Neuer Service, Admin UI, 2 Themes |
| Docker | 6 | Error-Tracking + Metrics zu 20 Dockerfiles |
| Todo | 4 | UI-Fixes, Navigation, Spiral-Integration |
| Docs | 5 | Devlog, Analytics, Tech Stack Analyse |
| Sonstiges | 3 | LLM Playground, ESM Fix, Shared UI |
| **Gesamt** | **61** | **695 Dateien, +50.947 / -33.665 Zeilen** |
---
## Nächste Schritte
1. **E2EE fertigstellen** - Rust Crypto vollständig integrieren und testen
2. **File Uploads** - Bilder und Dateien senden/empfangen
3. **Message Reactions** - Emoji-Reaktionen auf Nachrichten
4. **Test Coverage erweitern** - Store, Notifications, Auth-Flow testen
5. **Mobile App** - Manalink Mobile auf Feature-Parität mit Web bringen
1. **API-Key-Rotation** - Geleakte Keys in .env.development müssen rotiert werden
2. **Manalink E2EE** - Rust Crypto vollständig integrieren und testen
3. **Manalink File Uploads** - Bilder und Dateien senden/empfangen
4. **CityCorners Deploy** - Backend und Web auf Mac Mini deployen
5. **Landing Builder Deploy** - Service auf Mac Mini deployen
6. **Spiral-DB** - Weitere Apps integrieren (Calendar, ManaDeck)
7. **Auth-Migration** - Verbleibende Mobile-Apps migrieren
8. **Test Coverage** - CityCorners Web, Manalink Store/Auth-Flow