← w3yh.xyz

journal day

Donnerstag, 9. April 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: hoch

Donnerstag, 9. April 2026

codexw3yh

Public Dev Journal als eigener Backlog-Block für inkrementelle Wochen-/Monatsexporte vorgemerkt

changed

  • **`w3yh.xyz/tasks/todo.md`**
  • Phase 4 von `Notes/Blog` auf `Notes/Blog/Journal` erweitert
  • vier neue Aufgaben für das spätere öffentliche Build-Journal ergänzt:
  • W3YH-53 `Public Dev Journal zuschneiden`
  • W3YH-54 `Wochen-/Monatsexporte planen`
  • W3YH-55 `Journal-Subprojekt/Subdomain entscheiden`
  • W3YH-56 `Redaktions-/Anonymisierungsregeln festziehen`

notes

  • Zielbild bleibt: interne Roh-Logs bleiben privat, öffentlich kommt später nur eine redigierte Journey heraus
  • die Pipeline soll bewusst inkrementell laufen, damit Anonymisierung und Redaktion nicht auf der kompletten Historie blockieren
codexopenclaw

Tyrone-Magic-Link-Flow auf öffentlichen Proxy-Origin und clientseitigen Fragment-Return korrigiert

changed

  • **`.openclaw/workspace/projects/tyrone-terminal/src/lib/supabase/auth-config.ts`**
  • `getRequestOrigin()` ergänzt, um hinter Nginx den öffentlichen Origin aus `x-forwarded-proto` + `x-forwarded-host` korrekt zu rekonstruieren
  • **`.openclaw/workspace/projects/tyrone-terminal/src/app/api/auth/magic-link/route.ts`**
  • produktives Redirect-Ziel für Magic Links von `/auth/callback` auf `/login?next=...` umgestellt
  • **`.openclaw/workspace/projects/tyrone-terminal/src/__tests__/lib/auth-config.test.ts`**
  • zwei neue Tests für Forwarded-Origin und Fallback-Origin ergänzt

verified

  • `cd `.openclaw/workspace/projects/tyrone-terminal` && npm test -- --runInBand src/__tests__/lib/auth-config.test.ts`
  • Ergebnis: `13` Tests grün
  • `cd `.openclaw/workspace/projects/tyrone-terminal` && npm run build`
  • Ergebnis: Build grün
  • `pm2 restart [process]
  • Runtime neu geladen
  • Headless-Browser-Test mit serverseitig generiertem Magic Link
  • finale URL: `https://terminal.w3yh.xyz/`
  • Dashboard sichtbar
  • Supabase-Cookies `sb-...auth-token.0/.1` gesetzt

notes

  • die frühere Schleife auf `/login` war zuletzt kein reines Cookie-Problem mehr, sondern ein Mix aus internem `localhost`-Origin hinter Nginx und einem Redirect auf eine serverseitige Route, obwohl Magic Links fragmentbasiert zurückkommen
codexw3yh

Tyrone-Magic-Link end-to-end im Browser verifiziert und W3YH-28 abgeschlossen

changed

  • **`.openclaw/workspace/projects/tyrone-terminal/src/lib/supabase/auth-config.ts`**
  • `getRequestOrigin()` ergänzt, damit Auth-Routen hinter Nginx Redirects nicht mehr mit internem `localhost:3000`, sondern mit dem öffentlichen Forwarded-Origin bauen
  • **`.openclaw/workspace/projects/tyrone-terminal/src/app/api/auth/magic-link/route.ts`**
  • Magic-Link-Redirect-Ziel von `/auth/callback` auf `/login?next=...` umgestellt
  • damit landet der fragmentbasierte Supabase-Return auf einer echten Client-Seite, die die Session setzen kann
  • **`.openclaw/workspace/projects/tyrone-terminal/src/__tests__/lib/auth-config.test.ts`**
  • Tests für Forwarded-Origin-Rekonstruktion ergänzt
  • **`w3yh.xyz/docs/auth.md`**
  • produktiven Flow aktualisiert: Redirect auf `/login`, Callback nur noch Fallback
  • **`w3yh.xyz/tasks/todo.md`**
  • W3YH-28 auf erledigt gesetzt
  • W3YH-65 als optionalen Follow-up für Mail-/SMTP-Limits ergänzt

verified

  • `cd `.openclaw/workspace/projects/tyrone-terminal` && npm test -- --runInBand src/__tests__/lib/auth-config.test.ts`
  • Ergebnis: `13` Tests grün
  • `cd `.openclaw/workspace/projects/tyrone-terminal` && npm run build`
  • Ergebnis: Build grün
  • `pm2 restart [process]
  • Runtime mit neuem Redirect-Ziel neu geladen
  • Headless-End-to-End-Test mit serverseitig generiertem Magic Link
  • finale URL: `https://terminal.w3yh.xyz/`
  • Dashboard-Marker vorhanden: `Realtime Market Dashboard`
  • Login-Text nicht mehr sichtbar
  • Supabase-Session-Cookies gesetzt:
  • `sb-svsfwenqmpcdlpyyytgd-auth-token.0`
  • `sb-svsfwenqmpcdlpyyytgd-auth-token.1`

notes

  • der verbleibende Versandfehler `email rate limit exceeded` betrifft nur häufige Test-Mails, nicht mehr den eigentlichen Login-Loop
  • für echte Nutzer-Logins sollte der Flow jetzt funktionieren, sobald ein frischer Magic Link zugestellt wird
codexopenclaw

Tyrone-Login-Loop nach Magic Link auf Callback-/Cookie-Response-Fix gehoben

changed

  • **`.openclaw/workspace/projects/tyrone-terminal/src/app/auth/callback/route.ts`**
  • Supabase-Callback setzt Session-Cookies jetzt explizit auf die finale Redirect-Response statt nur auf den internen Cookie-Store
  • dabei werden auch von Supabase gelieferte Zusatz-Header in die Redirect-Response uebernommen
  • neue Cookies sind innerhalb derselben Callback-Anfrage bereits sichtbar, damit Session-Austausch und Redirect sauber zusammenlaufen
  • **`.openclaw/workspace/projects/tyrone-terminal/src/app/login/LoginPageClient.tsx`**
  • Login-Seite verarbeitet fragmentbasierte Rueckgaben (`#access_token`, `#refresh_token`) jetzt vollstaendig
  • nach `supabase.auth.setSession()` erfolgt ein harter Seitenwechsel per `window.location.replace(...)`, damit der Browser die frischen Cookies sicher auf der naechsten Anfrage mitsendet

verified

  • `cd `.openclaw/workspace/projects/tyrone-terminal` && npm run build`
  • Ergebnis: Build gruen
  • `pm2 restart [process]
  • Ergebnis: Runtime neu geladen
  • `curl -I https://terminal.w3yh.xyz/login`
  • Ergebnis: `200`
  • `curl -I https://terminal.w3yh.xyz/`
  • Ergebnis: `307 /login?next=%2F`
  • erneuter Magic-Link-Versandversuch
  • Ergebnis: Supabase antwortet aktuell mit `email rate limit exceeded`, daher ist der frische End-to-End-Klick noch nicht direkt im selben Zug verifiziert

notes

  • der verbleibende Live-Rest ist jetzt ein externer Versand-Blocker und nicht mehr dieselbe lokale Callback-/Cookie-Luecke wie zuvor
codexw3yh

Tyrone-Magic-Link-Loop auf Session-/Callback-Ebene gefixt, echter Re-Test nur kurz von Supabase-Rate-Limit gebremst

changed

  • **`.openclaw/workspace/projects/tyrone-terminal/src/app/auth/callback/route.ts`**
  • Callback-Route von implizitem Cookie-Store auf explizite Redirect-Response-Cookies gehoben
  • pending Set-Cookies und Supabase-Header werden jetzt gesammelt und auf die finale `NextResponse.redirect(...)` angewendet
  • derselbe Request sieht neue Cookies innerhalb der Callback-Abwicklung konsistent
  • **`.openclaw/workspace/projects/tyrone-terminal/src/app/login/LoginPageClient.tsx`**
  • Fallback für `#access_token`/`#refresh_token` im Browser vervollständigt
  • nach erfolgreichem `setSession()` erfolgt jetzt ein echter `window.location.replace(...)` statt nur einer soften Router-Navigation
  • **`w3yh.xyz/tasks/todo.md`**
  • W3YH-28 auf den neuen Restzustand aktualisiert: Code-Fix live, finaler Live-Klick steht nur noch gegen einen frischen Magic Link aus

verified

  • `cd `.openclaw/workspace/projects/tyrone-terminal` && npm run build`
  • Ergebnis: Build grün nach beiden Auth-Anpassungen
  • `pm2 restart [process]
  • Runtime mit dem neuen Callback-/Hash-Fix neu geladen
  • `curl -I https://terminal.w3yh.xyz/login`
  • Ergebnis: `200`
  • `curl -I https://terminal.w3yh.xyz/`
  • Ergebnis: `307 /login?next=%2F`
  • erneuter Versandversuch:
  • `POST https://terminal.w3yh.xyz/api/auth/magic-link`
  • Ergebnis: `{"error":"email rate limit exceeded"}`

notes

  • der verbliebene Rest ist jetzt kein offensichtlicher Tyrone-Codefehler mehr, sondern ein echter End-to-End-Klick auf einen frischen erlaubten Magic Link
  • sobald Supabase den Versand wieder freigibt, kann derselbe Flow direkt gegen `terminal.w3yh.xyz` nachgetestet werden
codexw3yh

Public/Private-Zielbild als Folgephase festgehalten und Magic-Link-Versand nach Dashboard-Anpassung erneut ausgelöst

changed

  • **`w3yh.xyz/tasks/todo.md`**
  • neue Folgeaufgaben für die Architektur nach Tyrone ergänzt:
  • W3YH-62 `Public/Private Split konkretisieren`
  • W3YH-63 `Privaten Hub planen`
  • W3YH-64 `meindeinunser Auth entkoppeln`
  • **`w3yh.xyz/docs/auth.md`**
  • Zielbild dokumentiert: `w3yh.xyz` bleibt öffentlich, später separater privater Einstieg (`private.w3yh.xyz` oder `vault.w3yh.xyz`), aber weiterhin pro App eigene Subdomains und keine globalen `.w3yh.xyz`-Cookies

verified

  • Magic-Link-Request nach deiner Dashboard-/Template-Anpassung erneut ausgelöst:
  • `POST https://terminal.w3yh.xyz/api/auth/magic-link`
  • Ergebnis: `200 OK`
  • Notice: `Magic Link verschickt an [E-Mail].`

notes

  • serverseitig nimmt Tyrone den Versand sauber an; falls weiterhin keine Mail ankommt, liegt der Rest jetzt sehr wahrscheinlich im Supabase-Mailversand selbst und nicht mehr am Tyrone-/Nginx-Pfad
codexw3yh

Echten Magic-Link-Blocker auf alte meindeinunser-Supabase-Konfiguration eingegrenzt

changed

  • **`w3yh.xyz/tasks/todo.md`**
  • W3YH-28 präzisiert: der offene Rest ist nicht mehr generisch „Magic-Link testen“, sondern konkret die alte Supabase-Site-URL/Redirect-/Template-Konfiguration
  • **`w3yh.xyz/docs/auth.md`**
  • Live-Befund dokumentiert: erlaubter Tyrone-Magic-Link fällt aktuell noch auf `meindeinunser.com` zurück

verified

  • echter Magic-Link-Request an `[E-Mail]` wurde von Tyrone erfolgreich ausgelöst
  • beim Klick landete der Browser auf `https://www.meindeinunser.com/#access_token=...`
  • lokale Code-Prüfung zeigt:
  • Tyrone setzt korrekt `emailRedirectTo` auf `https://terminal.w3yh.xyz/auth/callback`
  • das alte Mailtemplate unter `meindeinunser/supabase/email-templates/magic-link.html` ist weiterhin voll auf `meindeinunser` gebrandet

notes

  • das Verhalten ist nicht gewollt
  • die wahrscheinlichste Ursache liegt jetzt klar im gemeinsamen Supabase-Dashboard:
  • alte Site URL
  • fehlende Redirect-URL für `terminal.w3yh.xyz/auth/callback`
  • altes `meindeinunser`-Mailtemplate/Branding
codexopenclaw

terminal.w3yh.xyz per Let's Encrypt auf HTTPS gehoben

changed

  • **VPS / Firewall**
  • UFW um `80/tcp` und `443/tcp` erweitert
  • **`/etc/nginx/sites-available/terminal.w3yh.xyz`**
  • HTTP-Block auf `301` Redirect nach `https://$host$request_uri` umgestellt
  • neuer TLS-Serverblock fuer `168.119.152.29:443` und `[2a01:4f8:c010:ab60::1]:443`
  • Proxy bleibt auf `[localhost]`, Schutz fuer `/.git`, `/.env*`, `/.openclaw` bleibt aktiv
  • **TLS / Certbot**
  • Let's-Encrypt-Zertifikat fuer `terminal.w3yh.xyz` per `certbot certonly --webroot` ausgestellt
  • **`w3yh.xyz/src/lib/projects.ts`**
  • Hub-Status fuer Tyrone auf `auth` gesetzt und Landing danach neu auf Vercel deployed

verified

  • `sudo /usr/sbin/ufw status numbered`
  • `80/tcp` und `443/tcp` aktiv
  • `curl -I http://terminal.w3yh.xyz/`
  • Ergebnis: `301` -> `https://terminal.w3yh.xyz/`
  • `curl -I https://terminal.w3yh.xyz/`
  • Ergebnis: `307 /login?next=%2F`
  • `curl -I https://terminal.w3yh.xyz/login`
  • Ergebnis: `200`
  • `curl -I https://terminal.w3yh.xyz/.openclaw`
  • Ergebnis: `404`
  • `openssl s_client ... | openssl x509 -noout -subject -issuer -dates`
  • Ergebnis: Let's Encrypt `CN = terminal.w3yh.xyz`, gueltig bis `2026-07-08`
  • Playwright gegen `https://terminal.w3yh.xyz/login`
  • Ergebnis: Login-Seite rendert sauber mit E-Mail-Feld und Magic-Link-Text

notes

  • ich habe Certbot bewusst per `webroot` statt `--nginx` gefahren, damit Nginx wegen des parallelen Tailscale-`443` nicht blind auf allen Interfaces lauscht
  • der verbliebene Rest fuer den Auth-Go-Live ist jetzt nur noch ein echter erlaubter Magic-Link-Flow mit Cookie-Sichtpruefung
codexw3yh

terminal.w3yh.xyz auf HTTPS live geschaltet und Hub-Status auf `auth` gehoben (W3YH-25 erledigt, W3YH-29 erledigt, W3YH-28 weiter verifiziert)

changed

  • **`w3yh.xyz/tasks/todo.md`**
  • W3YH-25 auf erledigt gesetzt
  • W3YH-28 um HTTPS-, Zertifikats- und Browser-Checks erweitert
  • W3YH-29 auf erledigt gesetzt
  • **`w3yh.xyz/src/lib/projects.ts`**
  • `terminal`-Status von `soon` auf `auth` umgestellt

verified

  • **HTTPS live**
  • `curl -I http://terminal.w3yh.xyz/` -> `301` auf `https://terminal.w3yh.xyz/`
  • `curl -I https://terminal.w3yh.xyz/` -> `307 /login?next=%2F`
  • `curl -I https://terminal.w3yh.xyz/login` -> `200`
  • `curl -I https://terminal.w3yh.xyz/.openclaw` -> `404`
  • **Let's Encrypt**
  • Zertifikat ausgestellt für `CN = terminal.w3yh.xyz`
  • Gültigkeit: `2026-04-09` bis `2026-07-08`
  • **Browser-Check**
  • Playwright gegen `https://terminal.w3yh.xyz/login`:
  • `200`
  • Titel `Tyrone Terminal`
  • Heading `Login`
  • Subtitle `Wir schicken dir einen Magic Link an deine E-Mail-Adresse.`
  • E-Mail-Feld vorhanden
  • **Landing live**
  • `npm run build` für `w3yh.xyz` grün
  • Production-Deploy `dpl_CAUEXYvEc9YjHMUD9rVDnHFB1kuE` fertig und auf `https://w3yh.xyz` aliasiert
  • Live-HTML zeigt Tyrone jetzt mit Badge `auth`

notes

  • HTTPS terminiert absichtlich nur auf der öffentlichen IPv4/IPv6 des VPS; Tailscale behält sein eigenes `443` auf der Tailscale-IP.
  • für W3YH-28 bleibt nur noch der echte Magic-Link-Sendtest mit einer erlaubten Adresse plus Cookie-Check nach erfolgreichem Login.
codexopenclaw

Tyrone-Allowlist live geschaltet und den blockierten Magic-Link-API-Pfad geoeffnet

changed

  • **`.openclaw/workspace/projects/tyrone-terminal/.env.local`**
  • `TYRONE_ALLOWED_EMAILS` mit den freigegebenen Adressen gesetzt:
  • `[E-Mail]`
  • `[E-Mail]`
  • `[E-Mail]`
  • **`.openclaw/workspace/projects/tyrone-terminal/src/lib/supabase/middleware.ts`**
  • `/api/auth/magic-link` zur Public-Path-Allowlist ergaenzt, damit anonyme Login-Requests nicht mehr im Middleware-Redirect auf `/login` enden

verified

  • `cd `.openclaw/workspace/projects/tyrone-terminal` && npm run build`
  • Ergebnis: Build gruen
  • `curl --resolve terminal.w3yh.xyz:80:[localhost] -H 'Content-Type: application/json' -d '{"email":"[E-Mail]","nextPath":"/"}' http://terminal.w3yh.xyz/api/auth/magic-link`
  • Ergebnis: `403 Forbidden` mit der erwarteten Allowlist-Fehlermeldung
  • `curl --resolve terminal.w3yh.xyz:80:[localhost] http://terminal.w3yh.xyz/`
  • Ergebnis: weiterhin `307 /login?next=%2F`
  • `pm2 restart [process]
  • Runtime mit neuer Allowlist neu geladen

notes

  • die Allowlist ist jetzt aktiv, ohne bereits einen echten Magic-Link an eine freigegebene Adresse abzuschicken
codexw3yh

Allowlist live gesetzt und Login-API für anonyme Requests freigeschaltet (W3YH-4 erledigt, W3YH-27 erledigt, W3YH-28 weiter verifiziert)

changed

  • **`.openclaw/workspace/projects/tyrone-terminal/.env.local`**
  • serverseitige Allowlist mit den freigegebenen Login-Adressen gesetzt:
  • `[E-Mail]`
  • `[E-Mail]`
  • `[E-Mail]`
  • **`w3yh.xyz/docs/auth.md`**
  • Platzhalter-Allowlist durch die echten Login-Adressen ersetzt
  • primären Login festgehalten und offene Fragen auf den verbleibenden Supabase-Projektentscheid reduziert
  • **`w3yh.xyz/tasks/todo.md`**
  • W3YH-4 auf erledigt gesetzt
  • W3YH-27 auf erledigt gesetzt (`tli-terminal` bleibt)
  • W3YH-28 um den verifizierten `403`-Allowlist-Check erweitert

verified

  • **Domain-Status bei Vercel**
  • `vercel domains inspect w3yh.xyz --scope vibey434s-projects`
  • Ergebnis: Registrar `Vercel`, Nameserver `ns1/ns2.vercel-dns.com` korrekt, keine technische Auffälligkeit trotz fehlender ICANN-Mail
  • **Allowlist live**
  • `curl --resolve terminal.w3yh.xyz:80:[localhost] -H 'Content-Type: application/json' -d '{"email":"[E-Mail]","nextPath":"/"}' http://terminal.w3yh.xyz/api/auth/magic-link`
  • Ergebnis: `403 Forbidden` mit `Diese E-Mail-Adresse ist für Tyrone nicht freigeschaltet.`
  • **Login-Gate bleibt intakt**
  • `curl --resolve terminal.w3yh.xyz:80:[localhost] http://terminal.w3yh.xyz/` -> `307 /login?next=%2F`

notes

  • beim ersten Live-Check hing `/api/auth/magic-link` selbst noch hinter dem Auth-Gate; das ist jetzt korrigiert, damit der Magic-Link-Flow auf der öffentlichen Domain überhaupt starten kann
  • für W3YH-0 gibt es weiter keinen technischen Alarm in Vercel; das Problem bleibt nur die fehlende Mail
codexopenclaw

Tyrone-Auth hinter Nginx auf domainsauberen Login-Gate und bereinigten Runtime-Pfad gehoben

changed

  • **`.openclaw/workspace/projects/tyrone-terminal/src/lib/supabase/auth-config.ts`**
  • zentrale Host-Erkennung fuer `x-forwarded-host`/`host` eingebaut
  • hostabhaengige Cookie-Optionen fuer `terminal.w3yh.xyz` ergaenzt
  • **`.openclaw/workspace/projects/tyrone-terminal/src/lib/supabase/middleware.ts`**
  • Login-Gate liest den effektiven Host jetzt korrekt hinter Nginx aus den Forwarded-Headern
  • Supabase-Set-Cookie-Optionen und No-Cache-Header werden im Middleware-Pfad an die Response weitergereicht
  • **`.openclaw/workspace/projects/tyrone-terminal/src/lib/supabase/server.ts`** und **`.openclaw/workspace/projects/tyrone-terminal/src/lib/supabase/client.ts`**
  • server- und browserseitige Supabase-Clients auf denselben hostabhaengigen Cookie-Optionen ausgerichtet
  • **`.openclaw/workspace/projects/tyrone-terminal/src/app/api/auth/magic-link/route.ts`**, **`.openclaw/workspace/projects/tyrone-terminal/src/app/auth/callback/route.ts`** und **`.openclaw/workspace/projects/tyrone-terminal/src/app/login/page.tsx`**
  • Host-Erkennung fuer Reverse-Proxy-Pfade vereinheitlicht
  • **`.openclaw/workspace/projects/tyrone-terminal/src/components/AuthControls/AuthControls.tsx`**
  • Public-Access-Badge wird jetzt nur noch auf echten Direktzugriff-Hosts gezeigt, nicht mehr pauschal bei gesetztem Env-Flag
  • **`.openclaw/workspace/projects/tyrone-terminal/src/__tests__/lib/auth-config.test.ts`**
  • Tests fuer Forwarded-Host-Auswertung und Cookie-Optionen ergaenzt
  • **Runtime / VPS**
  • `pm2 delete [process] && pm2 start [process] --name tli-terminal -- start` ausgefuehrt und per `pm2 save` persistiert
  • `/etc/nginx/sites-available/terminal.w3yh.xyz` von `[internal]` auf `[localhost]` umgestellt und neu geladen

verified

  • `cd `.openclaw/workspace/projects/tyrone-terminal` && npm test -- --runInBand src/__tests__/lib/auth-config.test.ts`
  • Ergebnis: `11` Tests gruen
  • `cd `.openclaw/workspace/projects/tyrone-terminal` && npm run build`
  • Ergebnis: Build gruen, Middleware + Auth-Routen im App-Output vorhanden
  • `curl --resolve terminal.w3yh.xyz:80:[localhost] http://terminal.w3yh.xyz/`
  • Ergebnis: `307` Redirect auf `/login?next=%2F`
  • `curl http://[internal]/`
  • Ergebnis: `200`, Tailscale-Direktzugriff bleibt bewusst offen
  • `curl --resolve terminal.w3yh.xyz:80:[localhost] http://terminal.w3yh.xyz/.openclaw`
  • Ergebnis: `404`

notes

  • der urspruengliche Reverse-Proxy-Bypass entstand, weil `request.nextUrl.hostname` hinter Nginx nicht den effektiven Host abbildete; das Gate hing dadurch auf dem falschen Hostwert
  • SSL/Let's Encrypt ist noch nicht ausgerollt; das bleibt ein separater Infrastruktur-Schritt
codexw3yh

Phase-2-Basis für terminal.w3yh.xyz auf sicheren Login-Proxy gehoben (W3YH-20/21/22/23/24/26, W3YH-28 teilweise)

changed

  • **`w3yh.xyz/tasks/todo.md`**
  • Phase-2-Status aktualisiert: W3YH-20, W3YH-21, W3YH-22, W3YH-23, W3YH-24 und W3YH-26 erledigt
  • W3YH-28 auf teilweise erledigt gehoben, W3YH-25 um den realen Restblocker (Firewall + Certbot-Lauf) präzisiert
  • **`w3yh.xyz/docs/auth.md`**
  • Runtime-Checkliste für hostabhängige Cookie-Optionen und den produktiven Login-Text auf `terminal.w3yh.xyz` nachgezogen

verified

  • **DNS**
  • `dig @1.1.1.1 terminal.w3yh.xyz` -> `168.119.152.29`
  • `dig @8.8.8.8 terminal.w3yh.xyz` -> `168.119.152.29`
  • **Reverse Proxy lokal über echten Hostnamen**
  • `curl --resolve terminal.w3yh.xyz:80:[localhost] http://terminal.w3yh.xyz/` -> `307 /login?next=%2F`
  • `curl --resolve terminal.w3yh.xyz:80:[localhost] http://terminal.w3yh.xyz/login` -> `200`
  • `curl --resolve terminal.w3yh.xyz:80:[localhost] http://terminal.w3yh.xyz/.openclaw` -> `404`
  • **Tailscale-Direktzugriff**
  • `curl http://[internal]/` -> `200`
  • **Runtime**
  • `pm2 show tli-terminal` zeigt jetzt `script args = start`
  • `ss -ltnp | rg ':3000'` zeigt den Tyrone-Prozess auf `*:3000`

notes

  • Nginx zeigt jetzt auf `[localhost]` statt auf die Tailscale-IP; das reduziert Kopplung an den früheren Workaround.
  • SSL ist bewusst noch offen geblieben: auf dem VPS existiert noch kein Let's-Encrypt-Account/Zertifikat, und die Firewall lässt aktuell nur `2222/tcp` zu.
codexopenclaw

Tyrone-Login auf serverseitigen Magic-Link-Request mit Allowlist-Vorbereitung gehoben

changed

  • **`.openclaw/workspace/projects/tyrone-terminal/src/lib/supabase/auth-config.ts`**
  • Allowlist-Helfer fuer `TYRONE_ALLOWED_EMAILS` ergaenzt
  • Normalisierung und serverseitige Pruefung fuer freigegebene E-Mail-Adressen eingebaut
  • **`.openclaw/workspace/projects/tyrone-terminal/src/app/api/auth/magic-link/route.ts`**
  • neue serverseitige Route fuer Magic-Link-Anfragen angelegt
  • validiert E-Mail-Adresse, prueft die Allowlist und loest erst dann `signInWithOtp()` aus
  • **`.openclaw/workspace/projects/tyrone-terminal/src/app/login/LoginPageClient.tsx`**
  • Browser ruft Supabase nicht mehr direkt fuer den Magic-Link auf
  • Login-Form postet jetzt an `/api/auth/magic-link`
  • **`.openclaw/workspace/projects/tyrone-terminal/src/__tests__/lib/auth-config.test.ts`**
  • Tests fuer Allowlist-Normalisierung und Freigabe-Checks ergaenzt

verified

  • `cd `.openclaw/workspace/projects/tyrone-terminal` && npm test -- --runInBand src/__tests__/lib/auth-config.test.ts`
  • Ergebnis: `8` Tests gruen
  • `cd `.openclaw/workspace/projects/tyrone-terminal` && npm run build`
  • Ergebnis: Build gruen; neue Route `/api/auth/magic-link` erscheint im App-Output

notes

  • solange `TYRONE_ALLOWED_EMAILS` leer ist, blockiert die neue Logik niemanden; sie ist also als vorbereiteter Sicherheitsgurt eingebaut und wartet nur noch auf die finale Liste
  • der aktuelle Public-Access-Modus fuer Tailscale bleibt dadurch unveraendert; ohne spaetere Runtime-Umstellung wird der Login-Pfad weiterhin nicht erzwungen
codexw3yh

Browser-Smoke-Test abgeschlossen und Tyrone-Allowlist technisch vorbereitet (W3YH-4 teilweise, W3YH-12 erledigt)

changed

  • **`w3yh.xyz/docs/auth.md`**
  • dokumentiert jetzt auch den konkret implementierten serverseitigen Magic-Link-Pfad für Tyrone
  • hält fest, dass die Allowlist später über `TYRONE_ALLOWED_EMAILS` serverseitig laufen soll
  • **`w3yh.xyz/tasks/todo.md`**
  • W3YH-12 auf erledigt gesetzt
  • W3YH-4 präzisiert: technisch vorbereitet, finale Familien-Emails noch offen

verified

  • **Playwright-Browsercheck gegen `https://w3yh.xyz`**
  • Mobile-Viewport `390x844`: `200`, keine Cookies, Hero + Projects sichtbar, kein Horizontal-Overflow
  • Desktop `1440x1200`: `200`, keine Cookies, Hero + Projects sichtbar, kein Horizontal-Overflow
  • Screenshots erzeugt unter `/tmp/w3yh-mobile.png` und `/tmp/w3yh-desktop.png`
  • **Lighthouse Mobile**
  • Performance `98`
  • Accessibility `95`
  • Best Practices `96`
  • SEO `100`

notes

  • der einzige Browser-Hinweis war die erwartbare Console-Meldung, dass `upgrade-insecure-requests` in einer **report-only** CSP ignoriert wird
  • für W3YH-4 fehlt jetzt nur noch die konkrete Allowlist von Dominik; die technische Schiene ist vorbereitet
codexw3yh

Audits dokumentiert + Landing Foundation modularisiert (W3YH-2/3/4/6/7/8/9/10, W3YH-12 teilweise)

added

  • **Audit-Dokumente** unter `w3yh.xyz/docs/`
  • `mailflow-audit.md` dokumentiert die aktuell produktiven TLI-/Mail-Write-Pfade.
  • `security-audit-tyrone.md` dokumentiert die clientseitigen vs. serverseitigen Tyrone-Datenpfade und die Go-Live-Blocker für `terminal.w3yh.xyz`.
  • `auth.md` hält die Auth-Entscheidung für Phase 2 fest: ein Supabase-Magic-Link-Layer, Cookie-Domain `terminal.w3yh.xyz`, Redirect `https://terminal.w3yh.xyz/auth/callback`, Allowlist noch mit Platzhaltern.
  • **Landing-Komponenten** unter `w3yh.xyz/src/components/landing/`
  • `StatusBar.tsx`
  • `Header.tsx`
  • `Footer.tsx`
  • `TerminalPanel.tsx`
  • `Tag.tsx`
  • `Typewriter.tsx`
  • `TerminalHero.tsx`
  • `ProjectCard.tsx`
  • `ProjectGrid.tsx`
  • **Projekt-SSoT** in `w3yh.xyz/src/lib/projects.ts`
  • Typen `Project`, `ProjectStatus`, `ProjectHost`, `ProjectTag`
  • initiale Projektliste für `terminal`, `gym`, `spielplatz`

changed

  • **Landing-Theme** in `w3yh.xyz/src/app/globals.css`
  • dunkle W3YH-Tokens gesetzt (`#0a0a0a`, `#00ff88`, `#ffaa00`)
  • Atmosphäre über radiale Highlights + Terminal-Panel-Shadows aufgebaut
  • Typewriter-Cursor-Animation für die Hero-Headline ergänzt
  • **Fonts + Metadata** in `w3yh.xyz/src/app/layout.tsx`
  • Geist durch `Inter` + `JetBrains Mono` ersetzt
  • `lang="de"` und W3YH-Metadata gesetzt
  • **Landing-Seite** in `w3yh.xyz/src/app/page.tsx`
  • in modulare Sections zerlegt
  • Hero, Project-Grid, Notes, About und Footer sauber verdrahtet
  • kaputte Closing-Tags aus dem Zwischenstand bereinigt
  • UI-Texte mit echten Umlauten statt ASCII-Ersatzzeichen korrigiert
  • **Security-Headers** in `w3yh.xyz/next.config.ts`
  • `Strict-Transport-Security`
  • `X-Frame-Options: DENY`
  • `X-Content-Type-Options: nosniff`
  • `Referrer-Policy: strict-origin-when-cross-origin`
  • `Permissions-Policy`
  • `Content-Security-Policy-Report-Only`
  • **`tasks/todo.md`** aktualisiert
  • W3YH-2, W3YH-3, W3YH-5, W3YH-6, W3YH-7, W3YH-8, W3YH-9, W3YH-10 auf erledigt
  • W3YH-4 und W3YH-12 auf teilweise erledigt

verified

  • **Mailflow-Audit live gegengeprüft**
  • produktive TLI-Mailpfade laufen über `~/.openclaw/openclaw.json`, `~/.openclaw/tli-briefing/tli-gmail-hook-v2.mjs`, Crontab und `.openclaw/cron/jobs.json`
  • `thelonginvestor/scripts/tli-email-parser.py` ist weiterhin direkt im Hook referenziert, daher ist Archivierung noch nicht sicher
  • **Security-Audit live gegengeprüft**
  • Tyrone liest sensible Daten derzeit noch clientseitig via `NEXT_PUBLIC_SUPABASE_ANON_KEY`
  • betroffene Tabellen u. a. `tt_positions`, `tt_watchlist`, `tt_news_feed`, `tli_entries`, `x_tweets`, `macro_indicators`, `earnings_calendar`, `sec_insider_filings`
  • **Build erfolgreich**
  • `cd `w3yh.xyz` && npm run build`
  • Next.js 16.2.3 Build erfolgreich, Route `/` statisch generiert

notes

  • **Noch offen für Dominik:** finale Supabase-Allowlist (W3YH-4), ICANN-Mail-Verifikation (W3YH-0)
  • **Noch offen für Phase 1:** echter Browser-/Lighthouse-/Cookie-Smoke-Test (W3YH-12) und später Vercel-Link/Deploy (W3YH-11)
codexw3yh

Vercel-Projekt live, Domains zugewiesen, Smoke-Test vertieft (W3YH-1/W3YH-11, W3YH-12 teilweise)

added

  • **Vercel-Projekt-Link** in `w3yh.xyz/.vercel/project.json`
  • `projectName: w3yh.xyz`
  • `projectId: prj_G4efzq8L3V2w97Qa39sx7PqK7iQX`
  • `orgId: team_byk27FCYYHZNLkitR1hCjcYD`
  • **Allowlist-Umsetzungsnotiz** in `w3yh.xyz/docs/auth.md`
  • empfohlene serverseitige Env-Variable `TYRONE_ALLOWED_EMAILS`
  • Hinweis, dass die Allowlist nicht über `NEXT_PUBLIC_*` laufen soll

changed

  • **Vercel-State verifiziert**
  • `npx vercel dns ls w3yh.xyz` läuft jetzt lokal erfolgreich
  • Default-Records verifiziert: Apex-ALIAS + Wildcard-ALIAS + CAA-Records
  • `npx vercel domains inspect w3yh.xyz` bestätigt korrekte Vercel-Nameserver
  • **Production-Deploy live**
  • `npx vercel deploy --prod --yes --scope vibey434s-projects --logs`
  • neues Projekt `w3yh.xyz` im Team `vibey434s-projects`
  • Deployment-ID: `dpl_A3wsa3YeZWU9gmhN9wcBQNLSNmhf`
  • Produktions-URL: `https://w3yhxyz.vercel.app`
  • **Custom Domains an Projekt gehangen**
  • `npx vercel domains add w3yh.xyz --scope vibey434s-projects`
  • `npx vercel domains add www.w3yh.xyz --scope vibey434s-projects`

verified

  • **Live-Domain antwortet**
  • `https://w3yh.xyz` → `HTTP/2 200`
  • `https://www.w3yh.xyz` → `HTTP/2 200`
  • `http://w3yh.xyz` → `308` auf `https://w3yh.xyz/`
  • `http://www.w3yh.xyz` → `308` auf `https://www.w3yh.xyz/`
  • **Security-Header live**
  • `Content-Security-Policy-Report-Only`
  • `Permissions-Policy`
  • `Referrer-Policy`
  • `Strict-Transport-Security`
  • `X-Content-Type-Options`
  • `X-Frame-Options`
  • **Cookie-Check**
  • kein `Set-Cookie` im `curl -I` auf `https://w3yh.xyz`

notes

  • **W3YH-12 bleibt teilweise offen**
  • lokaler Lighthouse-CLI-Lauf scheitert aktuell, weil auf dem Host kein `chrome`/`chromium` installiert ist
  • Ausweichversuch über Google PageSpeed API scheiterte an `429 RESOURCE_EXHAUSTED` / Quota-Limit
  • **W3YH-0 bleibt offen**
  • technisch wirkt die Domain gesund und aktiv, aber die eigentliche ICANN-Email-Verifikation kann ich ohne deine Mailbox nicht bestätigen
claude-opus-4.6w3yh

W3YH-5 Landing Scaffold + `git init` + Tag `phase-0-baseline`

added

  • **Next.js 16.2.3 Scaffold** in `w3yh.xyz/`
  • `npx create-next-app@latest` in `/tmp/w3yh-scaffold` (non-empty w3yh.xyz hätte conflicten), danach via `mv` in `w3yh.xyz/` eingebettet (`.git` + `.next` vorher gelöscht).
  • Flags: `--typescript --tailwind --eslint --app --src-dir --import-alias "@/*" --use-npm --turbopack`
  • Template: `app-tw` (App Router + Tailwind v4)
  • Defaults die Next 16 gesetzt hat: `--ts`, `--no-react-compiler`, `--agents-md`
  • `359 packages` installiert, `0 vulnerabilities`
  • **Versionen (`package.json`):**
  • `next@16.2.3` (neuer als thelonginvestor's 16.1.6)
  • `react@19.2.4`, `react-dom@19.2.4`
  • `@tailwindcss/postcss@^4`, `tailwindcss@^4`
  • `typescript@^5`, `eslint@^9`, `eslint-config-next@16.2.3`
  • **Scaffold-Files** (Next 16 Defaults, werden in W3YH-6/W3YH-7 überschrieben):
  • `src/app/layout.tsx`, `src/app/page.tsx`, `src/app/globals.css` (hat bereits `@theme inline {}` wie im Plan gewünscht)
  • `next.config.ts`, `tsconfig.json`, `postcss.config.mjs`, `eslint.config.mjs`, `next-env.d.ts`
  • `public/favicon.ico`
  • **`AGENTS.md` + `CLAUDE.md`** — Next 16 erzeugt diese automatisch. `CLAUDE.md` verweist via `@AGENTS.md` auf `AGENTS.md`, das enthält den Hinweis "This is NOT the Next.js you know — breaking changes. Read node_modules/next/dist/docs/ before writing code."

changed

  • **`package.json` name:** `w3yh-scaffold` → `w3yh-xyz`

git

  • **`git init`** in `w3yh.xyz/` (vorher kein Git-Repo).
  • **Initial Commit:** `2511970 phase-0-baseline: initial scaffold + plan/changelog/todo` (Autor `Dominik <[E-Mail]>`, nur für diesen Commit via `-c user.email/user.name`, global bleibt unverändert).
  • **Tag `phase-0-baseline`** gesetzt → damit schließt Phase 0 formal ab, Rollback-Anker für alle kommenden Phasen.

verified

  • `ls -la `w3yh.xyz/` zeigt saubere Merge-Struktur: PLAN.md + CHANGELOG.md + tasks/ + changelog/ (Meta) neben AGENTS.md + CLAUDE.md + src/ + node_modules/ + package.json etc. (Scaffold).
  • `git log --oneline` → 1 Commit sichtbar.
  • `git tag` → `phase-0-baseline` gesetzt.
  • `src/app/globals.css` hat bereits `@import "tailwindcss"` + `@theme inline {}` Pattern wie im Plan dokumentiert.

notes

  • **`AGENTS.md`-Warnung ist ernst zu nehmen:** Beim nächsten Schritt (W3YH-6 Design Tokens, W3YH-7 Komponenten) muss vor Code-Änderungen `node_modules/next/dist/docs/` konsultiert werden, weil Next 16 Breaking Changes gegenüber Next 14/15 hat (z.B. Server Components Konventionen, font imports, config-Struktur).
  • **Scaffold-Default Geist-Fonts** werden in W3YH-6 durch JetBrains Mono + Inter ersetzt.
  • **Scaffold-Default Light-Background** wird in W3YH-6 durch `#0a0a0a` + `#00ff88` + `#ffaa00` Tokens ersetzt.
  • **Noch nicht getan:** `npm run build` Smoke-Test — fällt auf W3YH-12 oder später (wenn echte Components stehen).
claude-opus-4.6w3yh

Phase 0 Checks — Vercel Projekt-Katalog + PM2 Baseline (W3YH-1 teilweise)

verified

  • **Vercel Team:** `vibeY434's projects` (slug `vibey434s-projects`, id `team_byk27FCYYHZNLkitR1hCjcYD`) — via `list_teams` MCP.
  • **Vercel Projekt-Katalog (6 Projekte):**
  • `spielideengenerator` — `prj_vzR1Vuayf5rNiwRvlTZCY0P4feLk`
  • `clawbib` — `prj_Ge7SqlO4sOxqqC3Ir7LDhGNlpOrg`
  • `gym-tracker` — `prj_jtH33KMkOBSaZSgl14QVQ58YyFOx`
  • `meindeinunser` — `prj_1biXDXa9w5yzmEbYHF8rgjWcAGIH`
  • `stocktracker` — `prj_fF0ouPk1oQUaXe3VXFF7UIcW4JJA`
  • `spielplatzcheck` — `prj_SaAyt6pOIJyY2eEzsFHWrmoni2BS`
  • **Kein w3yh-Projekt angelegt** — Domain ist gekauft, aber noch an kein Projekt gebunden. Muss in Phase 1 (W3YH-11) erfolgen.
  • **PM2 Baseline:** Nur `tli-terminal` läuft (status `online`, cwd `.openclaw/workspace/projects/tyrone-terminal`, uptime 2h). Bestätigt erneut Codex-Finding zur produktiven Tyrone-Codebase.
  • **PM2 State gespeichert:** `pm2 save` → `.pm2/dump.pm2` geschrieben (Rollback-Baseline).

notes

  • Vercel CLI ist nicht lokal installiert — Phase-0-Checks liefen über Vercel MCP statt `vercel projects ls`.
  • `vercel dns ls w3yh.xyz` wurde **nicht** ausgeführt (kein MCP-Endpoint für DNS-Records). Verifikation der Apex/Wildcard-ALIAS-Records muss manuell im Vercel-Dashboard erfolgen oder später via CLI nachgeholt werden.
  • **Phase 0 Git-Tag `phase-0-baseline`** wurde noch NICHT gesetzt — das passiert erst sobald `w3yh.xyz/` ein echtes Git-Repo ist (aktuell nur Plan-Dateien, kein `git init` bisher).
claude-opus-4.6w3yh

Projekt-Skelett `tasks/todo.md` + `CHANGELOG.md` + `changelog/2026-04.md` angelegt

added

  • **`w3yh.xyz/tasks/todo.md`**
  • Analog zum OpenClaw-Format (`~/.openclaw/workspace/tasks/todo.md`).
  • Task-ID-Schema `W3YH-N` eingeführt.
  • Sektionen: Kritisch sofort, Fokus jetzt, Aktive Workstreams (Phase 0-6), Mit Dominik jetzt machbar, Erledigt, Geparkt.
  • 30+ Tasks vom ICANN-Check bis Phase-6-Erweiterungen.
  • **`w3yh.xyz/CHANGELOG.md`**
  • Monatsindex analog zu `~/.openclaw/CHANGELOG.md`.
  • **`w3yh.xyz/changelog/2026-04.md`** (diese Datei)
  • Erste Monatsdatei mit initialen Einträgen.

verified

  • `ls -la `w3yh.xyz/` zeigt die neue Struktur:
  • `PLAN.md` (28298 bytes)
  • `tasks/todo.md`
  • `CHANGELOG.md`
  • `changelog/2026-04.md`

notes

  • Struktur bewusst analog zu OpenClaw-Repo, damit die Agenten-Gewohnheiten (Session-Start → `todo.md` lesen → autonom arbeiten) übertragbar sind.
claude-opus-4.6w3yh

`PLAN.md` mit Codex-Live-Verifikation aktualisiert

changed

  • **`w3yh.xyz/PLAN.md`**
  • Kritisch-Block oben ergänzt: ICANN Email-Verifikation (15-Tage-Frist).
  • Codex-verifizierte Fakten eingearbeitet:
  • Tyrone Source bestätigt: `.openclaw/workspace/projects/tyrone-terminal/` (via `pm2 show tli-terminal` exec cwd)
  • VPS Public IP: `168.119.152.29`
  • Nginx: NICHT installiert, muss in Phase 2 aufgesetzt werden
  • Next-Versionen gesplittet: Tyrone 15.5.14, thelonginvestor 16.1.6
  • Auth-Sektion präzisiert: **Nur eine Supabase-Schicht** (kein Doppelschutz mehr). Codex-Empfehlung: zweite Login-Mauer macht UX hakelig ohne echten Sicherheitsgewinn.
  • Security-Liste erweitert (Codex): exakte Portfolio-Gewichte nicht roh, Rohtexte aus TLI-Mails/PDFs nicht roh, interne IDs/Debug/Feed-Metadaten nicht leaken, minuten-genaue Watchlist-Änderungen zeitlich abschwächen.
  • Phase 2 Schritt 0: `apt install nginx certbot python3-certbot-nginx` als erster Schritt.
  • Offene Punkte reduziert von 7 auf 6, davon 3 Codex-Muss: Mailflow-Audit, Security-Audit Tyrone, Nginx+DNS sauber aufsetzen.
  • DNS A-Record-Zeile auf `168.119.152.29` konkretisiert.
  • Agent-Bridge-Status-Sektion ergänzt: Bridge wirklich kaputt (Loop-Detection Bug), muss separat gefixt werden.

verified

  • Alle 8 Edits auf `PLAN.md` erfolgreich, Datei wächst auf 28298 bytes.

notes

  • Codex hat direkt (nicht über Bridge) Feedback gegeben: Plan im Kern gut, Hybrid-Architektur pragmatisch, Landing-first-Reihenfolge korrekt. Wichtigste Präzisionen: Single-Auth-Layer statt Doppelschutz, detailliertere Security-Liste, Codex-verifizierte VPS/PM2-Fakten.
claude-opus-4.6w3yh

Initialer `PLAN.md` für w3yh.xyz erstellt

added

  • **`w3yh.xyz/` angelegt** (vorher nicht existent)
  • **`w3yh.xyz/PLAN.md`** — Kompletter Setup-Plan (ca. 28 KB) für die DACH-Dachmarke w3yh.xyz:
  • Hybrid-Architektur: Landing + nicht-VPS-gebundene Apps auf Vercel, Tyrone Terminal auf VPS mit Nginx-Reverse-Proxy
  • Subdomain-Strategie: `w3yh.xyz` (Landing), `terminal.w3yh.xyz` (Tyrone, VPS), `gym.w3yh.xyz`, `spielplatz.w3yh.xyz` (beide Vercel)
  • Landing-Design "w3yh://hub": Terminal-Window mit Bloomberg-Vibe + warmen Akzenten
  • Farbpalette: `#0a0a0a` bg + `#00ff88` green (softer als Tyrones `#00ff00`) + `#ffaa00` amber
  • Mono (JetBrains Mono) + Sans (Inter) via `next/font/google`
  • Tailwind v4 mit `@theme inline {}` Pattern (wie clawledge)
  • Custom Components, KEIN shadcn/ui
  • Tech-Stack: Next.js 16 App Router, TypeScript, Server Components First
  • Security: Landing public/0-Cookies, Tyrone mit Supabase Magic-Link + Email-Allowlist
  • Migration-Roadmap in 6 Phasen: Landing zuerst (Greenfield, Zero-Risk), dann Tyrone, dann gym+spielplatz, dann Content-Layer
  • Ordner-Struktur unter `w3yh.xyz/` (kein Monorepo, bestehende Apps bleiben wo sie sind)
  • Single-Source-of-Truth `src/lib/projects.ts` mit typisiertem Projekt-Array
  • Risiken + Rollback-Strategie pro Phase

context

  • Dominik hat `w3yh.xyz` am 2026-04-09 via Vercel (Team `vibey434s-projects`) gekauft.
  • DNS-Zone mit Apex + Wildcard ALIAS ist bereits gesetzt.
  • Kandidaten auf User-Wunsch: `tyrone-terminal`, `gym-tracker`, `spielplatzcheck`, `thelonginvestor` (letzteres als Vorgänger, wird archiviert).
  • NICHT dabei: clawledge.com, spielgenerator.de (eigene Marken), stocktracker (nicht in User-Liste), meindeinunser (wird perspektivisch abgeschaltet).
  • User-Entscheidungen im Verlauf:
  • **Hosting:** "ich will alles online haben" → Hybrid mit öffentlich erreichbarem Tyrone (kein Tailscale-Gate)
  • **Auth:** Supabase Magic-Link nachdem meindeinunser abgeschaltet wird
  • **Reihenfolge:** Landing first (zero-risk Greenfield)
  • **Tyrone vs TLI:** thelonginvestor + spinoff sind Vorgänger, aktuelle Codebase ist tyrone-terminal

notes

  • Codex-Plan aus Agent Bridge (`conv-7881f27dd980`, `msg-20260409-c83c439c`) ist mit `Loop detected, similarity=1.00` failed. Die Bridge ist kaputt, nicht der User. Codex hat den Plan dann manuell via Copy-Paste an Dominik kommentiert.
  • Plan-Workspace-Datei: `.claude/plans/optimized-frolicking-lollipop.md`
  • Memory-Files ergänzt: `project_w3yh_setup.md`, `reference_agent_bridge_bug.md`
codexopenclaw

Parqet-OAuth und SEC-Insider-Feed fuer den Live-Betrieb nachgezogen

changed

  • **`.openclaw/tli-briefing/parqet-auth.mjs`** und **`thelonginvestor/scripts/parqet-auth.mjs`**
  • Callback-Listener von der festen Redirect-URL entkoppelt: Redirect bleibt auf `localhost:3000/callback`, der Server lauscht jetzt standardmaessig auf `[localhost]`.
  • klare Tunnel-/Port-Forwarding-Hinweise, State-Check und bessere OAuth-Fehlermeldungen eingebaut.
  • **`.openclaw/tli-briefing/sec-insider-feeder.mjs`** und **`thelonginvestor/scripts/sec-insider-feeder.mjs`**
  • Matching von Portfolio-Unternehmen auf echte `symbol`-Ticker statt ISIN-basiert gehoben.
  • Issuer-Normalisierung gehaertet, damit Kurznamen wie `KE` keine False Positives mehr auf `PNG` ziehen.
  • Filing-Datum aus dem Feed statt aus `Date.now()` abgeleitet und Supabase-Lese-/Insertpfad robuster gemacht.
  • **`.openclaw/cron/jobs.json`**
  • `tli:sec-insider-alerts` wieder auf `enabled: true` gesetzt.

verified

  • `node --check `.openclaw/tli-briefing/parqet-auth.mjs`
  • `node --check `.openclaw/tli-briefing/sec-insider-feeder.mjs`
  • `node `.openclaw/tli-briefing/sec-insider-feeder.mjs`
  • Ergebnis nach Matcher-Fix: `Neue Treffer: 0`, also keine frischen echten Portfolio-Matches im aktuellen SEC-Feed.
  • Hintergrund-Auth-Listener gestartet:
  • `nohup env PARQET_AUTH_LISTEN_PORT=3800 node `.openclaw/tli-briefing/parqet-auth.mjs` >/tmp/parqet-auth.log 2>&1 &`
  • Logfile zeigt den aktiven Auth-Link und wartet auf den Callback.

notes

  • ich habe drei gerade selbst erzeugte False Positives (`PNG` / `KE HOLDINGS INC.`) sofort wieder aus `sec_insider_filings` geloescht.
  • fuer den Parqet-Flow fehlt jetzt nur noch der Browser-Schritt ueber den ausgegebenen OAuth-Link; danach kann der Live-Sync mit frischem Token wieder normal laufen.
codexopenclaw

Tyrone Terminal um Zeitfilter, Ticker-Aliasing und datengetriebenen Kalender erweitert

changed

  • **`.openclaw/workspace/projects/tyrone-terminal/src/lib/supabase.ts`**
  • kanonisches Ticker-Aliasing fuer `ADUR`/`ACT.V` -> `ACT.CN` eingefuehrt, damit Watchlist, Snapshots und TLI-Feed dieselbe Portfolio-Truth nutzen.
  • historische Chart-Daten von starren Punktzahlen auf echte Zeitfenster (`1D`, `1W`, `1M`, `3M`, `YTD`, `1Y`, `5Y`) umgestellt.
  • `getEconomicEvents()` auf echte Daten aus `macro_indicators`, `earnings_calendar` und optional `sec_insider_filings` gehoben; Makro-/Earnings-Mix bewusst balanciert, damit Earnings im Panel sichtbar bleiben.
  • **`.openclaw/workspace/projects/tyrone-terminal/src/components/ChartPanel/ChartPanel.tsx`** und **`.openclaw/workspace/projects/tyrone-terminal/src/components/ChartPanel/ChartPanel.css`**
  • sichtbare Zeitlogik-Buttons fuer die Chart-Ansicht eingebaut.
  • Header so erweitert, dass Symbol, aktives Fenster und Preisblock gleichzeitig lesbar bleiben.
  • **`.openclaw/workspace/projects/tyrone-terminal/src/app/page.tsx`**
  • globalen Timeframe-State fuer die Startseite ergaenzt und an das Chart durchgereicht.
  • **`.openclaw/workspace/projects/tyrone-terminal/src/components/MacroPanel/MacroPanel.tsx`** und **`.openclaw/workspace/projects/tyrone-terminal/src/components/MacroPanel/MacroPanel.css`**
  • Mock-Kalender durch einen echten `Macro, Earnings & Filings`-Feed ersetzt.
  • Event-Zellen um Meta-Zeile erweitert, damit Quelle/Typ (`Macro`, `Earnings`, `SEC`) direkt sichtbar sind.
  • **`thelonginvestor/scripts/sync-tyrone-terminal-universe.mjs`**
  • Watchlist-Sync auf dieselbe Ticker-Kanonisierung gebracht; beim Live-Run wurde die stale `ADUR`-Watchlist deaktiviert und sauber auf `ACT.CN` konsolidiert.
  • **`thelonginvestor/scripts/sync-parqet.mjs`**
  • Access-Token-zuerst-Logik, Snapshot-Caching nach `~/.openclaw/workspace/data/portfolio-parqet-live-*.json` und automatischen Terminal-Universe-Sync eingebaut.
  • bei invalidem Refresh-Token wird jetzt der letzte lokale Stand explizit gemeldet, statt still unklar zu scheitern.
  • **`thelonginvestor/scripts/earnings-feeder.mjs`**
  • auf den no-key Nasdaq-Earnings-Kalender umgestellt, damit kommende Earnings ohne Yahoo-/FMP-Abhaengigkeit gepflegt werden koennen.
  • **Tests / Logs**
  • Regressionen per Jest und Incident-Log dokumentiert.

verified

  • `npm test -- --runInBand src/__tests__/lib/supabase.test.ts src/__tests__/components/WatchlistPanel.test.tsx src/__tests__/components/NewsPanel.test.tsx src/__tests__/app/HomePage.test.tsx`
  • Ergebnis: `30` Tests gruen.
  • `node `thelonginvestor/scripts/sync-tyrone-terminal-universe.mjs` --json`
  • Ergebnis: `watchlist.deactivated = 1`; `ADUR` wurde live deaktiviert und auf `ACT.CN` vereinheitlicht.
  • `node `thelonginvestor/scripts/earnings-feeder.mjs`
  • Ergebnis: `16` kommende Earnings-Termine geschrieben, u. a. fuer `PEP`, `UNH`, `UPS`, `MSFT`, `HIMS`, `NVO`, `ASTS`.
  • Supabase-Sichtcheck:
  • `tt_watchlist` zeigt `ACT.CN` aktiv und `ADUR` inaktiv.
  • `earnings_calendar` enthaelt jetzt kommende Termine ab `2026-04-16`.
  • `cd `.openclaw/workspace/projects/tyrone-terminal` && npm run build`
  • Ergebnis: Next-Build gruen.
  • `pm2 restart [process] --update-env`
  • `curl -s http://[internal] | rg -o "YTD|5Y|ECONOMIC CALENDAR|PUBLIC ACCESS"`
  • Ergebnis: neue Timeframe-Buttons und das laufende Terminal-Markup sind live.

notes

  • der taegliche Parqet-Job ist jetzt technisch auf Cache + Terminal-Refresh vorbereitet, blockiert aber weiterhin an `refreshToken not valid`; fuer echten Live-Abgleich braucht es einmalig einen frischen Parqet-OAuth-Login.
  • `sec_insider_filings` ist aktuell leer; das Terminal zeigt SEC-Events deshalb erst, sobald der bestehende Feed wieder Daten geschrieben hat.
codexopenclaw

Tyrone Terminal auf direkten Tailscale-Zugriff ohne Magic-Link-Zwang umgestellt

changed

  • **`.openclaw/workspace/projects/tyrone-terminal/src/lib/supabase/auth-config.ts`**
  • neuen Public-Access-Schalter `NEXT_PUBLIC_TYRONE_PUBLIC_ACCESS` eingefuehrt.
  • Auth-Verfuegbarkeit von der Frage getrennt, ob der Login fuer den aktuellen Runtime-Pfad wirklich erzwungen werden soll.
  • **`.openclaw/workspace/projects/tyrone-terminal/src/lib/supabase/middleware.ts`**
  • Login-Gate fuer den Public-Access-Modus abgeschaltet, ohne den Live-Supabase-Zugriff auf Mock-Daten umzubiegen.
  • `/login` und `/auth/callback` werden im Direktzugriffsmodus sauber auf `/` zurueckgefuehrt.
  • **`.openclaw/workspace/projects/tyrone-terminal/src/components/AuthControls/AuthControls.tsx`**
  • Header zeigt jetzt `PUBLIC ACCESS`, wenn der Tailscale-Direktzugriff aktiv ist, statt den Nutzer in einen Logout-/User-Zustand zu schicken.
  • **`.openclaw/workspace/projects/tyrone-terminal/src/app/login/LoginPageClient.tsx`**
  • Login-Text klar auf "kein Magic Link noetig" umgestellt; Button bleibt im Direktzugriffsmodus deaktiviert.
  • **`.openclaw/workspace/projects/tyrone-terminal/.env.local`**
  • lokalen Runtime-Schalter `NEXT_PUBLIC_TYRONE_PUBLIC_ACCESS=true` gesetzt.
  • **`.openclaw/workspace/projects/tyrone-terminal/src/__tests__/lib/auth-config.test.ts`** und **`.openclaw/workspace/INCIDENT_LOG.md`**
  • Testfall fuer den neuen Access-Mode ergaenzt und den Redirect-/Login-Fix als Incident dokumentiert.

verified

  • `npm test -- --runInBand src/__tests__/lib/auth-config.test.ts`
  • `npm run build`
  • `pm2 restart [process]
  • `curl -I --max-time 10 http://[internal]`
  • Erwartung: kein Redirect mehr auf `/login`, sondern direkte Antwort vom Terminal.

Incidents

Tyrone Terminal / Magic-Link Login-Loop
~45 mincodex

Problem: Nach dem Klick auf einen erlaubten Magic Link landete der Browser wieder auf `/login`, obwohl Domain, Redirect-URLs und Mail-Template bereits korrigiert waren

Ursache: Hinter Nginx bauten die Auth-Routen Redirects teils noch aus internem `localhost:3000`; zusätzlich zeigte der produktive Magic-Link-Redirect auf eine serverseitige Callback-Route, obwohl Supabase die Session fragmentbasiert (`#access_token`, `#refresh_token`) an den Browser zurückgibt

Fix: öffentlichen Forwarded-Origin (`x-forwarded-proto` + `x-forwarded-host`) für Auth-Routen ergänzt, Magic-Link-Ziel auf `/login?next=...` umgestellt, Login-Seite mit fragmentbasiertem `setSession()` + hartem Redirect vervollständigt und den kompletten Flow per headless Browser bis zum gesetzten `sb-*`-Cookie verifiziert

Tyrone Terminal / Magic-Link API Gate
~15 mincodex

Problem: Der neue Login-Pfad `/api/auth/magic-link` war trotz fertiger Login-Seite fuer anonyme Requests nicht nutzbar und wurde von der Middleware wieder auf `/login` zurueckgebogen

Ursache: Die Public-Path-Liste der Middleware enthielt nur `/login` und `/auth/callback`; die API-Route fuer den eigentlichen OTP-Request war vergessen worden

Fix: `/api/auth/magic-link` in die Public-Path-Allowlist aufgenommen, Tyrone neu gebaut und den Live-Pfad mit einer absichtlich nicht freigegebenen Adresse bis zur sauberen `403`-Antwort verifiziert

Tyrone Terminal / Reverse Proxy Auth
~55 mincodex

Problem: `terminal.w3yh.xyz` zeigte hinter Nginx trotz eingebautem Auth-Gate weiter die offene Startseite statt auf `/login` zu redirecten

Ursache: Die Host-Erkennung in Middleware und Auth-Routen hing an `request.nextUrl.hostname`; hinter dem Reverse Proxy entsprach das nicht verlaesslich dem effektiven Domain-Host, dadurch griff der Tailscale-Direktzugriff faelschlich auch fuer die Domain

Fix: Host-Erkennung auf `x-forwarded-host`/`host` vereinheitlicht, Auth-/Cookie-Pfade daran ausgerichtet, PM2 auf bereinigtes `npm start` ohne Alt-Args neu erstellt und Nginx auf `[localhost]` umgestellt; Redirect `terminal.w3yh.xyz -> /login` danach verifiziert

Parqet OAuth / SEC Insider Feed
~35 mincodex

Problem: Der Parqet-OAuth-Helper kollidierte auf Port `3000` mit dem laufenden Terminal und der SEC-Insider-Feed war deaktiviert bzw. matchte nach dem ersten Re-Test sogar falsch auf `PNG` (`KE HOLDINGS INC.`)

Ursache: `parqet-auth.mjs` lauschte hart auf derselben Portnummer wie der Live-Server; der SEC-Matcher arbeitete auf ueberaggressiv gestrippten Firmennamen und mapte noch ueber den alten `ticker`-Pfad statt ueber `symbol`

Fix: OAuth-Listener auf separaten Listen-Port mit Tunnel-Hinweisen/State-Check umgebaut, produktiven Listener im Hintergrund auf `[localhost]` gestartet, SEC-Feeder auf `symbol` + robustere Namensnormalisierung gehoben, die False-Positive-Eintraege wieder geloescht und den Cron-Job `tli:sec-insider-alerts` in `jobs.json` reaktiviert

Tyrone Terminal / Timeframes, Watchlist Alias & Earnings Calendar
~85 mincodex

Problem: Im Terminal fehlten echte Chart-Zeitfenster, `ACT.CN`/`ADUR` wurden als zwei verschiedene Werte behandelt, TLI-Feed-Filter liefen dadurch fuer Aduro leer und der Kalender hing weiter an Mock-Daten; zusaetzlich war der lokale Earnings-Feeder unbrauchbar

Ursache: Der Datenlayer verglich Ticker nur per exaktem String, `ChartPanel` war auf festes `1D` verdrahtet, `MacroPanel` nutzte keine produktiven Tabellen und der Repo-Feeder setzte auf einen in dieser Runtime nicht tragfaehigen Yahoo-/Package-Pfad

Fix: zentrale Ticker-Kanonisierung fuer `ADUR`/`ACT.V` -> `ACT.CN` eingebaut, Chart um `1D/1W/1M/3M/YTD/1Y/5Y` erweitert, Kalender auf `macro_indicators` + `earnings_calendar` + optionale `sec_insider_filings` gehoben, den Universe-Sync live neu ausgefuehrt (stale `ADUR` deaktiviert) und den Earnings-Feeder auf den no-key Nasdaq-Kalender umgestellt; `16` kommende Earnings in Supabase geschrieben

Tyrone Terminal / Tailscale Access
~25 mincodex

Problem: Der direkte Zugriff auf das Terminal sprang fuer unautorisierte Requests erst auf `/login` und ueber den gemeinsamen Supabase-Auth-Pfad teils weiter in den `meindeinunser`-Kontext

Ursache: Das Terminal nutzt dasselbe Supabase-Projekt wie `meindeinunser`; der Magic-Link-Gatekeeper war fuer den rein ueber Tailscale gebundenen Runtime-Pfad unnoetig und sorgte fuer verwirrende Redirects

Fix: separaten Public-Access-Schalter fuer das Terminal eingebaut, das Login-Gate nur fuer diesen Runtime-Pfad deaktiviert, Login-/Header-UI auf Direktzugriff umgestellt und den PM2-Prozess nach Build mit neuem Env-Flag neu gestartet

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.