From d29348d9063f28af65b081b1e3458193dbd2ecc4 Mon Sep 17 00:00:00 2001 From: Till JS Date: Mon, 23 Mar 2026 13:20:40 +0100 Subject: [PATCH] docs: add devlog for morning session + update guidelines to session-based Switch devlog convention from daily to session-based (vormittag/abend). Add devlog for Manalink prod-readiness work and deployment. Co-Authored-By: Claude Opus 4.6 (1M context) --- ...026-03-23-vormittag-manalink-prod-ready.md | 179 ++++++++++++++++++ docs/DEVLOG_GUIDELINES.md | 18 +- 2 files changed, 190 insertions(+), 7 deletions(-) create mode 100644 apps/manacore/apps/landing/src/content/devlog/2026-03-23-vormittag-manalink-prod-ready.md diff --git a/apps/manacore/apps/landing/src/content/devlog/2026-03-23-vormittag-manalink-prod-ready.md b/apps/manacore/apps/landing/src/content/devlog/2026-03-23-vormittag-manalink-prod-ready.md new file mode 100644 index 000000000..f1ab206cc --- /dev/null +++ b/apps/manacore/apps/landing/src/content/devlog/2026-03-23-vormittag-manalink-prod-ready.md @@ -0,0 +1,179 @@ +--- +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.' +date: 2026-03-23 +author: 'Till Schneider' +category: 'release' +tags: + [ + 'matrix', + 'manalink', + 'deployment', + 'security', + 'testing', + 'vitest', + 'pwa', + 'e2ee', + 'docker', + 'sso', + ] +featured: true +commits: 7 +readTime: 5 +stats: + filesChanged: 18 + linesAdded: 942 + linesRemoved: 620 +contributors: + - name: 'Till Schneider' + handle: 'Till-JS' + commits: 7 +workingHours: + start: '2026-03-23T09: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**: + +- **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 vs. Chat App: Klarstellung + +Vor der Arbeit wurde die Abgrenzung zwischen unseren zwei Chat-Systemen geklärt: + +| | **Chat App** | **Manalink** | +| --------- | ------------------ | ---------------------------------- | +| Zweck | AI-Chat mit LLMs | Messaging zwischen Menschen & Bots | +| Protokoll | Eigene REST-API | Matrix (föderiert, dezentral) | +| Backend | NestJS (Port 3002) | Synapse Homeserver | +| E2EE | Nein | Ja (in Arbeit) | +| URL | - | https://link.mana.how | + +Beide Apps sind komplementär und werden weiter gepflegt. + +--- + +## 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: + +```typescript +response.headers.set('X-Frame-Options', 'SAMEORIGIN'); +response.headers.set('X-Content-Type-Options', 'nosniff'); +response.headers.set('Referrer-Policy', 'strict-origin-when-cross-origin'); +response.headers.set('Permissions-Policy', 'camera=(self), microphone=(self), geolocation=()'); +response.headers.set('Cross-Origin-Opener-Policy', 'same-origin'); +response.headers.set('Cross-Origin-Embedder-Policy', 'require-corp'); +``` + +### 3. SSO Homeserver-Bug gefixt + +SSO-Redirect war hardcoded auf `matrix.mana.how`. Jetzt dynamisch: + +- Login-Page: nutzt den eingegebenen Homeserver +- Layout SSO-Callback: konfigurierbar via `VITE_MATRIX_HOMESERVER` +- Auth-URL: konfigurierbar via `VITE_MANA_AUTH_URL` + +### 4. Console.log Cleanup + +**54 `console.log`/`console.warn` Statements** entfernt aus: + +- `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 | +| -------------------- | ----- | ---------------------------------------------------------------- | +| `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 die Rust-Crypto-Initialisierung fehlschlägt, sieht der User jetzt einen dezenten Amber-Banner: + +``` +⚠ 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 +URL: https://link.mana.how +``` + +--- + +## 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 | + +--- + +## 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 diff --git a/docs/DEVLOG_GUIDELINES.md b/docs/DEVLOG_GUIDELINES.md index ece0d1105..7f035cdba 100644 --- a/docs/DEVLOG_GUIDELINES.md +++ b/docs/DEVLOG_GUIDELINES.md @@ -2,12 +2,16 @@ ## Zeitraum-Konvention -**Arbeitstage werden wie folgt definiert:** +**Devlogs werden pro Arbeitssession geschrieben, nicht pro Tag:** -- Ein "Arbeitstag" beginnt um **11:00 Uhr** und endet um **11:00 Uhr des Folgetages** -- Beispiel: Der Devlog für "2026-01-30" umfasst alle Commits von 30.01. 11:00 bis 31.01. 10:59 +- Eine "Session" ist ein zusammenhängender Arbeitszeitraum (z.B. Vormittag, Nachmittag, Abend) +- Pro Tag können mehrere Devlogs entstehen (z.B. `2026-03-23-vormittag-manalink-prod.md` und `2026-03-23-abend-citycorners-features.md`) +- Der Dateiname enthält die Session-Bezeichnung zur Unterscheidung +- `workingHours` im Frontmatter bilden den tatsächlichen Session-Zeitraum ab -Diese Konvention ermöglicht es, Nachtarbeit dem richtigen Tag zuzuordnen. +**Beispiele für Session-Bezeichnungen:** `vormittag`, `nachmittag`, `abend`, `nacht` + +Falls nur eine Session an einem Tag stattfindet, kann die Session-Bezeichnung weggelassen werden. ## Dateistruktur @@ -48,10 +52,10 @@ contributors: handle: 'Till-JS' commits: 42 -# Working Hours (für Aktivitätsgrid) +# Working Hours (tatsächlicher Session-Zeitraum) workingHours: - start: '2026-01-30T11:00' - end: '2026-01-31T11:00' + start: '2026-01-30T09:00' + end: '2026-01-30T13:30' --- ```