From 3be8d90a81401498e1882a38bfac49beef760890 Mon Sep 17 00:00:00 2001 From: Robin Choice Date: Wed, 10 Jun 2026 14:16:44 +0200 Subject: [PATCH] chore: session checkpoint 2026-06-10 Co-Authored-By: Claude Opus 4.8 (1M context) --- AGENTS.md | 19 +++++++------ specs/production-hardening.md | 53 +++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+), 9 deletions(-) create mode 100644 specs/production-hardening.md diff --git a/AGENTS.md b/AGENTS.md index d22cd63..89274cd 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -4,22 +4,23 @@ Webapp für Label-Kollaboration. Stack: SvelteKit + Hono + Postgres. ## Aktueller Stand - + -**Aktive Spec:** `specs/mastering-delivery-live-ep.md` -**Sprint / Phase:** Audio-Mastering-Experiment fuer Live-Delivery +**Aktive Spec:** `specs/production-hardening.md` +**Sprint / Phase:** Production Hardening — App produktionsreif fuer externe Klienten **Zuletzt implementiert:** -- Spec `specs/mastering-delivery-live-ep.md` angelegt und fuer warmen, analogen Live-Mastering-Flow genutzt. -- Externen Master fuer `S-Bahn.wav` gerendert und stream-sichere Version auf `-13.6 LUFS` / `-1.3 dBFS TP` gebracht. +- DB privat gestellt: Production-`DATABASE_URL` auf internen Hostname (`qwcokswkccws04c08cko4c8w:5432` + Passwort) umgestellt, API redeployed (`running:healthy`), DB `is_public: false`, Port 15432 von aussen dicht (verifiziert). +- Geklaert: die „zwei DATABASE_URL" waren Production (preview=False) vs. Preview (preview=True) — kein Netzwerkproblem, nur falsch befuellte URL. +- Production-Hardening-Spec angelegt, Mastering-Experiment abgeloest. **Als nächstes:** -- Finalen Master auf mehreren Abhoeren pruefen. -- Optional dunklere oder dichtere Alternative rendern. -- Danach wieder App-Backlog fortsetzen (`Background Sync`, `RESEND_API_KEY`, Onboarding-Role). +- RESEND scharf schalten: Resend-Domain `mydrugismusic.com` verifizieren (SPF/DKIM, braucht Robin), `RESEND_API_KEY` in Coolify-API-App setzen, Magic-Link-Flow E2E testen. +- Nutzer-Flows (Login/Upload/Share) nach DB-URL-Wechsel gegenpruefen. **Offene Punkte:** -- Erster Testexport war zu heiss; nur `S-Bahn_warm-analog-master_streamsafe_24b44k1.wav` verwenden. +- RESEND braucht Robins Account-Login + DNS — einziger verbleibender Prod-Blocker. +- Danach App-Backlog: `Background Sync` (PWA Phase 3), Onboarding-Role. ## Decisions diff --git a/specs/production-hardening.md b/specs/production-hardening.md new file mode 100644 index 0000000..88de08d --- /dev/null +++ b/specs/production-hardening.md @@ -0,0 +1,53 @@ +# Production Hardening + +**Status:** Active +**Repo:** musichub +**Erstellt:** 2026-06-09 + +## Ziel + +Music Hub von „läuft im Test" auf produktionsreif für echte externe Klienten bringen — ohne Workarounds beim Login und ohne öffentlich erreichbare Datenbank. + +## Warum + +Die App ist feature-reich und live auf `hub.mydrugismusic.com`, aber zwei Produktions-Blocker stehen seit ~April offen (am 2026-06-09 via Coolify-API verifiziert): + +- **Kein echter E-Mail-Versand:** `RESEND_API_KEY` ist in der API-App nicht gesetzt. `email.ts` fällt auf Logging zurück → Magic Links erreichen niemanden. Ohne das kann sich kein neuer Nutzer real einloggen. +- **DB öffentlich erreichbar:** Postgres ist `is_public: true` auf Port 15432. War ursprünglich nur für den Test geöffnet, weil der API-Container den internen Hostname nicht erreichte. + +## In Scope + +### 1. E-Mail-Versand scharf schalten +- Resend-Account / Domain `mydrugismusic.com` verifizieren (DNS: SPF, DKIM) +- `RESEND_API_KEY` in Coolify-API-App setzen (UUID `eccgw0cgggocwcss4og8so84`) +- `EMAIL_FROM` gegen verifizierte Domain prüfen (ist bereits gesetzt) +- Redeploy + echten Magic-Link-Flow End-to-End testen (Registrierung → Mail kommt an → Login klappt) + +### 2. DB privat stellen +- Production-`DATABASE_URL` (Env-uuid `zo80kws0`, preview=False) von public IP auf internen Hostname mit Passwort umstellen: `postgres://musichub:@qwcokswkccws04c08cko4c8w:5432/musichub` (Wert siehe Coolify `internal_db_url`) +- API-App redeployen → prüfen ob `running:healthy` bleibt (= interner Hostname erreichbar) +- Wenn ja: DB auf `is_public: false` setzen, Port 15432 schließen +- Verifizieren: Login + Upload funktionieren weiter +- Rollback falls API nicht hochkommt: `DATABASE_URL` zurück auf `46.224.235.131:15432`, redeploy + +## Out of Scope + +- Background Sync (PWA Phase 3) — separates Feature, danach +- Onboarding-Role — danach +- Weiteres Feature-Polish + +## Erfolgskriterien + +- [ ] `RESEND_API_KEY` in Coolify gesetzt, Domain verifiziert +- [ ] Neue Registrierung → echte Magic-Link-Mail kommt an → Login erfolgreich +- [x] DB `is_public: false`, Port 15432 von außen nicht mehr erreichbar *(2026-06-09)* +- [x] API-Container verbindet über internen Hostname, App `running:healthy` *(2026-06-09)* +- [ ] Bestehende Nutzer-Flows (Login, Upload, Share) end-to-end gegenprüfen + +## Implementierungsnotizen + +- Coolify-Deploy-Workflow + UUIDs: siehe Memory `reference_coolify.md` +- Am 2026-06-09 via Coolify-API geklärt: die „zwei DATABASE_URL" sind kein Konflikt — public-IP-Variante ist Production (preview=False), interne-Hostname-Variante ist nur Preview (preview=True). Live-App nutzt ausschließlich die public IP. +- App (`musichub-api`) und DB (`musichub-db`) teilen `destination_id: 0` → selbe Destination, internes Docker-Network sollte stehen. Ursprüngliches „nicht erreichbar" war vermutlich eine falsch befüllte URL, kein echtes Netzwerkproblem — daher zuerst Umstellen+Redeploy testen statt Netzwerk-Debugging. +- Korrekte interne URL inkl. Passwort liefert Coolify als `internal_db_url` auf dem DB-Objekt. +- True-Peak des Mastering-Experiments (`mastering-delivery-live-ep.md`) ist erledigt — diese Spec löst sie als aktive Spec ab