← w3yh.xyz

journal day

Freitag, 1. Mai 2026

Tagesansicht des öffentlichen Journals: konkrete Changelog-Outputs, Incidents und kuratierte Notes, ohne dass der Index alles auf einmal rendert.

Aktivität an diesem Tag: mittel

Freitag, 1. Mai 2026

codexw3yh

Private-Gate-SSO für Terminal/Gym nachgezogen

fixed

  • **Gate-Handoff**
  • `/private/go/[app]` bewahrt den gewünschten Zielpfad jetzt auch dann, wenn vor dem Handoff erst noch der Private-Gate-Login nötig ist.
  • Nach dem Gate-Login geht es dadurch direkt weiter zu `/go/gym` oder `/go/terminal` statt zurück auf den Hub.
  • **Private-Gate-UI**
  • Terminal- und Gym-Karten zeigen nur noch den Gate-Öffnen-Pfad, damit niemand versehentlich wieder den lokalen Passwortweg der Ziel-App nimmt.
  • Copy von `w3yh.xyz/private` auf den realen Einstieg `private.w3yh.xyz` und den aktiven SSO-Handoff gezogen.

deployed

  • Production Deployment: `dpl_A3ke2amarmwkifuEAMLPwLKFYhRd`.

verified

  • `npm run build` grün.
  • Ohne Session: `/go/gym` leitet zu `/login?next=%2Fgo%2Fgym%3Fnext%3D%252Fprivate`.
  • Ohne Session: `/go/terminal` leitet zu `/login?next=%2Fgo%2Fterminal%3Fnext%3D%252F`.
codexw3yh

Family-RLS und Post-Löschen gefixt

fixed

  • **Family Membership**
  • Julian als aktives `member` in `family_members` geseedet, weil der Gate-Zugang über die Family-Allowlist aktiv war, `family_posts` aber nur die DB-Membership für RLS akzeptiert.
  • RLS-Fehler beim Posten (`new row violates row-level security policy for table "family_posts"`) dadurch behoben.
  • **Post-Verwaltung**
  • Post-Menü ergänzt: Mitglieder können eigene Posts löschen, Admins können alle Posts löschen.
  • `DELETE /api/private/family/posts` ergänzt; löscht den Post über RLS und räumt zugehörige Storage-Objekte aus `family-media` auf.
  • **Medienlimit**
  • UI zeigt die maximale Upload-Größe klar an (`4 MB` nach Vorbereitung, maximal 6 Bilder).
  • RLS-Fehlermeldung beim Post-Insert wird auf eine verständliche Family-Membership-Meldung gemappt.

deployed

  • Production Deployment: `dpl_A6rFuvJiMba3Mbc7MmoxzgQetBkZ`.

verified

  • `npx tsc --noEmit` grün.
  • `npm run lint` grün mit bestehenden Warnungen (`command-palette` unused imports, Family `<img>` Hinweis).
  • `npm run build` grün.
  • `vercel inspect https://private.w3yh.xyz` zeigt auf `dpl_A6rFuvJiMba3Mbc7MmoxzgQetBkZ`.
  • Supabase-Smoke: `4` aktive Family-Mitglieder, `1` Family-Post.
  • Ohne Session: `/family` leitet zum Login, `DELETE /api/private/family/posts` antwortet `401`.
codexw3yh

Family-Mehrfachbild-Upload gefixt

fixed

  • **Family Upload**
  • Browser normalisiert ausgewählte Bilder vor dem Request zu WebP und reduziert Mehrfachauswahlen stärker, damit zwei Handyfotos nicht am Vercel-Request-Limit scheitern.
  • API-Fehler werden jetzt robust aus Text/JSON gelesen; HTML-/413-Fehler lassen die UI nicht mehr still wirken.
  • Server prüft zusätzlich die Gesamtgröße der Bilder und gibt bei zu großen Mehrfachuploads eine klare Fehlermeldung aus.
  • Falls Bild 2+ nach einem erfolgreichen ersten Storage-Upload fehlschlägt, löscht die API bereits hochgeladene Objekte und den angelegten Post wieder.
  • **UI/API Copy**
  • Family-Fehlermeldungen in den bearbeiteten Pfaden auf echte Umlaute gezogen.

deployed

  • Production Deployment: `dpl_CBkrKVtaM47E4U6nYtEYm4qvpKBK`.

verified

  • `npx tsc --noEmit` grün.
  • `npm run lint` grün mit bestehenden Warnungen (`command-palette` unused imports, Family `<img>` Hinweis).
  • `npm run build` grün.
  • `vercel inspect https://private.w3yh.xyz` zeigt auf `dpl_CBkrKVtaM47E4U6nYtEYm4qvpKBK`.
  • `https://private.w3yh.xyz/family` leitet ohne Session erwartungsgemäß zum Login; `api/private/family/posts` antwortet ohne Session erwartungsgemäß mit `401`.
codexw3yh

W3YH-118 Family-MVP Supabase live

fixed

  • **Family MVP**
  • Supabase-DDL aus `supabase/migrations/20260430_family_private_forum.sql` wurde über den SQL Editor ausgeführt.
  • Der vorherige Blocker `Supabase-Schema fehlt noch` ist behoben: `family_members`, `family_posts`, `family_comments` und `family_media` sind im REST-Schema sichtbar.
  • Private-Gate-Admin-Seed für die drei dokumentierten Gate-Logins in `family_members` angelegt (`role = admin`, `status = active`), damit die RLS-Funktionen `family_active_member()` und `family_admin()` für echte Sessions greifen.

verified

  • `family_members`, `family_posts`, `family_comments`, `family_media` antworten per Supabase REST mit `200 OK`.
  • `storage/v1/bucket/family-media` antwortet mit `200 OK`, `public = false`, `file_size_limit = 8388608`, `allowed_mime_types = ["image/webp"]`.
  • `https://private.w3yh.xyz/family` leitet ohne Session erwartungsgemäß nach `/login?next=%2Ffamily` weiter und matched `/private/family`.
  • `https://private.w3yh.xyz/api/private/family/posts` antwortet ohne Session erwartungsgemäß mit `401`.

notes

  • Weitere Family-only Accounts werden nicht in Vercel sichtbar entschlüsselt; sie können nach Nennung der Mailadressen als `role = member` in `family_members` ergänzt werden.

Incidents

W3YH / Private-Gate SSO Terminal+Gym [manual]
~45 mincodex

Problem: Nach Login auf `private.w3yh.xyz` mussten Terminal/Gym beim Öffnen teils nochmal Passwort oder Magic Link sehen

Ursache: Gate UI bot weiter direkte App-Links an; außerdem leitete `/go/[app]` ohne bestehende Gate-Session nach dem Login nur zurück auf den Hub statt zum eigentlichen App-Handoff

Fix: Gate-App-Links auf den Handoff-Pfad reduziert, `/go/[app]` bewahrt den App-Next durch den Login, Gym `/private` und Terminal `/login` springen ohne lokale Session automatisch zum Private Gate; W3YH/Gym deployed und Terminal per PM2 neu gestartet

Gym / Supabase Public-Key [manual]
~25 mincodex

Problem: Live-Gym-Bundle enthielt als `NEXT_PUBLIC_SUPABASE_ANON_KEY` einen Supabase-JWT mit stärkerer Rolle statt `anon`

Ursache: Gym-Vercel-/Local-Env war falsch bestückt; public Next.js Env wurde deshalb in den Browser-Bundle kompiliert

Fix: Local Env und Vercel Production/Preview/Development auf den echten Anon-Key korrigiert, Gym neu deployt (`dpl_EV7A3HnqQDy45kaxVzvZ16G96n9V`), alte Gym-Deployments entfernt und Live-Bundle per JWT-Rollencheck auf `anon` verifiziert; Supabase-Service-Key sollte zusätzlich rotiert werden

W3YH / Family RLS + Post-Delete [manual]
~35 mincodex

Problem: Julians Account kam ins Family-Forum, konnte aber keinen Textpost speichern (`new row violates row-level security policy for table "family_posts"`); außerdem fehlten Post-Löschung und sichtbares Medienlimit

Ursache: Gate-/Env-Allowlist und DB-Membership liefen auseinander: die UI akzeptierte `W3YH_PRIVATE_FAMILY_EMAILS`, aber die Supabase-RLS-Funktion `family_active_member()` liest nur `family_members`

Fix: Julian als aktives `member` in `family_members` geseedet, Post-Menü mit Own/Admin-Delete ergänzt, `DELETE /api/private/family/posts` inklusive Storage-Cleanup gebaut, Medienlimit in der UI sichtbar gemacht und Production-Deploy `dpl_A6rFuvJiMba3Mbc7MmoxzgQetBkZ` verifiziert

W3YH / Family Mehrfachbild-Upload [manual]
~35 mincodex

Problem: Ein einzelnes Bild im Family-Forum ließ sich hochladen, zwei Bilder gleichzeitig scheiterten bzw. wirkten still fehlgeschlagen

Ursache: Mehrere Original-Handyfotos können vor der serverseitigen Sharp-Normalisierung das Vercel-Request-Limit treffen; zusätzlich erwartete die UI immer JSON-Fehler und der Server hatte keinen Rollback für Teil-Uploads

Fix: Clientseitige WebP-Normalisierung vor dem Upload ergänzt, robuste Fehleranzeige für Nicht-JSON-Antworten eingebaut, Server-Gesamtgrößen-Guard und Rollback für bereits angelegte Posts/Storage-Objekte ergänzt; Production-Deploy `dpl_CBkrKVtaM47E4U6nYtEYm4qvpKBK` live verifiziert

W3YH / Family MVP Supabase-DDL [manual]
~20 mincodex

Problem: Family-MVP-Code war live, aber die App konnte noch nicht produktiv schreiben/lesen, weil die `family_*` Tabellen im Supabase-Schema fehlten

Ursache: Lokal standen nur Service-Role-Key und URL zur Verfügung; DDL ließ sich ohne Supabase Access Token, DB-URL oder SQL Editor nicht ausführen

Fix: Migration `20260430_family_private_forum.sql` über den Supabase SQL Editor angewendet, Tabellen/Bucket per REST/Storage-Smoke verifiziert und die drei dokumentierten Gate-Logins als aktive Family-Admins geseedet

Persönliches Build-Journal. Aufgaben werden über ein Agentensystem (OpenClaw, verschiedene LLMs) per Cron- und Telegram-Trigger ausgeführt; die Heatmap zeigt eine relative Compute-Aktivität in fünf Stufen.