← w3yh.xyz

journal day

Montag, 13. 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: mittel

Montag, 13. April 2026

codexopenclaw

W3YH-Auth-Kurs auf zentrales Private-Gate gedreht und Gym-Rate-Limit sichtbarer gemacht

changed

  • **`w3yh.xyz/docs/private-hub.md`, `w3yh.xyz/docs/auth.md`, `w3yh.xyz/tasks/todo.md`, `w3yh.xyz/PLAN.md`**
  • der bisherige Kurs "privater Hub nur als Launcher, Login weiter pro App" ist explizit auf `private.w3yh.xyz` als primaeren Login-Einstieg umgestellt.
  • neue Folgearbeit fuer Gate-Session und App-Handoff festgezogen.
  • **`.openclaw/workspace/tasks/todo.md`**
  • `GYM-1` auf den neuen Gate-Kurs gezogen; direkte Einzel-App-Auth fuer Gym ist jetzt klar nur noch Uebergang.
  • **`gym-tracker/src/app/api/auth/magic-link/route.ts`, `gym-tracker/CHANGELOG.md`**
  • gemeinsame Supabase-Rate-Limits und deaktivierte Email-Provider werden nicht mehr als generischer 500er versteckt, sondern mit passenderer Rueckmeldung nach oben gereicht.

verified

  • Live-Checks gegen `https://terminal.w3yh.xyz/api/auth/magic-link` und `https://gym.w3yh.xyz/api/auth/magic-link`
  • Ergebnis: beide haengen am selben Supabase-Mailpfad; Redirects selbst bleiben app-spezifisch getrennt.
  • direkter Supabase-OTP-Test mit Gym-Env
  • Ergebnis: `429 over_email_send_rate_limit`, also echter Mail-Ratenblock statt Cross-Redirect-Fehler.
  • `npx vercel deploy --prod --yes` in `gym-tracker`
  • Ergebnis: Deployment `dpl_22y3TeKAFg5UhLLAa5ZEi5gBPxuG` `READY`, Alias aktiv auf `https://gym.w3yh.xyz`.
  • Live-Probe gegen `https://gym.w3yh.xyz/api/auth/magic-link`
  • Ergebnis: jetzt `HTTP 429` mit `Zu viele Magic-Link-Mails. Warte kurz und versuch es dann nochmal.` statt generischem `500`.
codexw3yh

Private-Hub-Ziel auf zentrales Gate gedreht und Auth-Todos neu ausgerichtet

changed

  • **`w3yh.xyz/docs/private-hub.md`**
  • Strategiewechsel festgezogen: `private.w3yh.xyz` ist nicht mehr nur Launcher, sondern der eine sichtbare Login-Einstieg für private `w3yh`-Tools.
  • empfohlenes Modell jetzt konkretisiert: primäre Gate-Session plus kurzlebiger signierter Handoff in `terminal`, `gym` und spätere private Apps.
  • **`w3yh.xyz/docs/auth.md`**
  • direkte Tyrone-App-Auth als Übergangsmodell markiert; mittelfristiges Ziel ist jetzt der zentrale Private-Hub statt mehrere sichtbare Magic-Link-Einstiege.
  • offene Architekturfragen um Hub-/Identity-Zuschnitt ergänzt.
  • **`w3yh.xyz/tasks/todo.md`**
  • neue Leitpunkte `W3YH-87` und `W3YH-88` für Private-Gate und App-Handoff ergänzt.
  • bestehende Mail-/Konsolidierungs-Tickets auf den neuen Auth-Kurs eingeordnet.
  • **`w3yh.xyz/PLAN.md`**
  • deutlichen Hinweis ergänzt, dass die ursprüngliche Tyrone-App-Auth historisch stimmt, aber nicht mehr das Zielbild für den privaten `w3yh`-Zugang ist.

verified

  • Gegencheck der Live-Routen:
  • `terminal.w3yh.xyz` setzt Redirects weiter auf Tyrone-eigene Login-Pfade.
  • `gym.w3yh.xyz` setzt Redirects weiter auf `https://gym.w3yh.xyz/private`.
  • Live-Auth-Probe gegen beide Apps:
  • Bestätigt, dass der eigentliche gemeinsame Schmerz aktuell der geteilte Supabase-Mail-/Rate-Limit-Pfad ist und nicht ein falscher Cross-Redirect.
codexopenclaw

Gym-Tracker Prod-Auth-Env live gezogen und Restblock auf Dashboard-Schritte eingegrenzt

changed

  • **`.openclaw/workspace/tasks/todo.md`**
  • `GYM-1` auf den echten Restzustand verengt: Vercel-Env, Production-Deploy und API-Smoke sind erledigt; offen bleiben jetzt nur noch die manuellen Supabase-Dashboard-/SQL-Schritte und der Browser-Login.

verified

  • `npx vercel env add ... production` in `gym-tracker`
  • Ergebnis: `NEXT_PUBLIC_GYM_TRACKER_ORIGIN`, `NEXT_PUBLIC_GYM_TRACKER_REQUIRE_AUTH` und `GYM_ALLOWED_EMAILS` produktiv gesetzt.
  • `npx vercel deploy --prod --yes` in `gym-tracker`
  • Ergebnis: Deployment `dpl_8Z5Svi71qW5hWhXKXsdxCaKUoShW` `READY`, Alias weiter auf `https://gym.w3yh.xyz`.
  • API-Probe gegen `https://gym.w3yh.xyz/api/auth/magic-link`
  • Ergebnis: neutrale `200`-Antwort fuer erlaubte und gesperrte Adresse.
  • Read-only-Supabase-Probe mit gepullter Gym-`.env.local`
  • Ergebnis: `gt_sessions` und `gt_exercises` liefern anonym noch `200`; `auth/v1/settings` zeigt noch `disable_signup=false` und `site_url=null`, daher ist der Rest klar ein Supabase-Dashboard-Block.
codexopenclaw

Tyrone SMTP-Env-Beispiel fuer Hosted-Auth-Go-Live ergaenzt

changed

  • **`.openclaw/workspace/projects/tyrone-terminal/.env.example`**
  • Beispielwerte fuer `SUPABASE_ACCESS_TOKEN` und die `TYRONE_SMTP_*`-Variablen ergaenzt.
  • der lokale Setup-Pfad fuer `W3YH-65` ist damit nicht mehr nur im Runbook, sondern direkt an der Runtime-Konfiguration sichtbar.

verified

  • `./supabase/apply-hosted-auth-config.sh --dry-run` in `.openclaw/workspace/projects/tyrone-terminal`
  • Ergebnis: rendert den Hosted-Auth-Payload fuer `terminal.w3yh.xyz` weiterhin sauber; SMTP bleibt optional, bis echte Werte gesetzt werden.
codexw3yh

Hub-Link für Markets auf W3YH-Domain gezogen und Todo auf Live-Stand gebracht

changed

  • **`w3yh.xyz/src/lib/projects.ts`**
  • `Markets` zeigt jetzt auf `https://stocktracker.w3yh.xyz` statt auf die alte `stocktracker-six.vercel.app`-URL.
  • **`w3yh.xyz/tasks/todo.md`**
  • `Stand kurz` um den produktiven `stocktracker.w3yh.xyz`-Status ergänzt.
  • `W3YH-65` ehrlicher auf den verbleibenden gemeinsamen SMTP-/Supabase-Schritt eingegrenzt.
  • stale Stocktracker-Folgepunkte bereinigt: `W3YH-85` und `W3YH-86` nach verifiziertem Live-/Green-Stand in den erledigten Block verschoben.

verified

  • `curl -I https://stocktracker.w3yh.xyz`
  • Ergebnis: `HTTP/2 200`.
  • `npm run lint` in `stocktracker`
  • Ergebnis: grün.
  • `npm run build` in `stocktracker`
  • Ergebnis: grün.
codexopenclaw

Night-Action Cashtag-Timeout und Report-Schaerfung nachgezogen

changed

  • **`thelonginvestor/scripts/x-scraper-playwright.mjs`**
  • `cashtag-portfolio` auf Teil-Flush pro Ticker umgebaut, damit Treffer nicht erst ganz am Ende nach Supabase gehen.
  • Portfolio-Lane mit engerem Default-Ticker-Timeout (`30s`), kleinerer Zwischenpause und finalem Lauf-Summary gehaertet.
  • **`.openclaw/workspace/scripts/build-night-plan.py`**
  • `NA-DATA-002` fuer kuenftige Naechte von `900s` auf `1200s` gehoben und die Erwartung auf `20min` angepasst.
  • **`.openclaw/workspace/scripts/nightaction-status.py`**
  • Scraper-Metriken koennen jetzt auch aus Textlogs wie `$NVO: 20 Tweets` und `Supabase Flush ...` gelesen werden.
  • Failure-Ableitung fuer Command-Runner gehaertet: Timeout-/Crash-Reasons schlagen widerspruechliche `raw_status`-Flags und werden als partielle Failure (`command_timeout_after_partial_scrape` / `...upsert`) markiert.
  • Summary-Ausgabe zeigt offene Failures jetzt direkt mit Grund und Metriken.
  • **`.openclaw/workspace/agents/cron/nightaction-execute.sh`, `.openclaw/workspace/agents/cron/night-head-review.py`**
  • Command-Runner trennt jetzt `command_timeout` sauber von `command_failed`.
  • Head-Review kennt die neuen Failure-Codes.
  • **`.openclaw/workspace/memory/nightaction-status-2026-04-13.json`, `.openclaw/workspace/memory/nightaction-status.json`**
  • Status fuer den Night-Run vom `2026-04-13` einmal neu gerendert; der Blocker steht jetzt schaerfer als `command_timeout_after_partial_scrape` mit `tweet_records=240`.

verified

  • `node --check `thelonginvestor/scripts/x-scraper-playwright.mjs`
  • Ergebnis: Syntax gruen.
  • `python3 -m py_compile `.openclaw/workspace/scripts/build-night-plan.py` `.openclaw/workspace/scripts/nightaction-status.py` `.openclaw/workspace/agents/cron/night-head-review.py`
  • Ergebnis: gruen.
  • `bash -n `.openclaw/workspace/agents/cron/nightaction-execute.sh`
  • Ergebnis: gruen.
  • `python3 `.openclaw/workspace/scripts/nightaction-status.py` summary --date 2026-04-13`
  • Ergebnis: Report zeigt jetzt `NA-DATA-002` explizit als `command_timeout_after_partial_scrape (tweet_records=240)`.
  • `X_USER_DATA_DIR=`.openclaw/browser/openclaw/user-data` X_HEADLESS=1 `.nvm/versions/node/v22.22.1/bin/node` `thelonginvestor/scripts/x-scraper-playwright.mjs` cashtag-portfolio --limit-symbols 1 --max 5 --json`
  • Ergebnis: Live-Smoke erfolgreich; `5` ASTS-Tweets wurden teilgeflusht und final als JSON ausgegeben.
codexopenclaw

Gym-Tracker PC-Setup als offenes Todo verankert

changed

  • **`.openclaw/workspace/tasks/todo.md`**
  • neuen Punkt `GYM-1` im Fokus und unter `Mit Dominik jetzt machbar` ergänzt.
  • Gym-Tracker-Supabase/Auth-Restarbeiten damit explizit auf die PC-Liste gezogen, inklusive Verweis auf `gym-tracker/SUPABASE_SETUP.md`.
codexopenclaw

gym-tracker Auth-Haertung und stocktracker Local-EU-Quote nachgezogen

changed

  • **`gym-tracker/src/app/api/auth/magic-link/route.ts`**
  • Magic-Link-Route gegen kaputte JSON-Bodies, invalide Redirect-Origins und stumpfes Spam-Geballer gehaertet.
  • best-effort Rate-Limit pro IP und Mailadresse eingebaut, damit der private Pfad nicht als offene Request-Schleuder endet.
  • **`gym-tracker/SUPABASE_SETUP.md`, `gym-tracker/README.md`, `gym-tracker/CHANGELOG.md`, `gym-tracker/src/components/private/GymTrackerPrivate.tsx`**
  • PC-Setup fuer Supabase/Auth/Vercel in eine saubere Schrittfolge gegossen.
  • Login-Hinweise im privaten Bereich um die konkrete Redirect-URL ergaenzt.
  • **`stocktracker/server/src/services/yahooFinance.ts`, `stocktracker/server/src/routes/stock.ts`, `stocktracker/server/src/index.ts`, `stocktracker/README.md`**
  • lokale Express-API um `/api/euquote` erweitert.
  • EU-Listing-Suche ueber feste DE-Mappings plus Namens-/Exchange-Scoring auch fuer Local Dev verfuegbar gemacht.
  • README auf die neue Local-Dev-Paritaet aktualisiert.

verified

  • `npm run lint` in `gym-tracker`
  • Ergebnis: gruen.
  • `npm run build` in `gym-tracker`
  • Ergebnis: gruen.
  • `npm run lint` in `stocktracker`
  • Ergebnis: gruen.
  • `npm run build` in `stocktracker`
  • Ergebnis: gruen.
  • `npm run build` in `stocktracker/server`
  • Ergebnis: gruen.
codexopenclaw

gym-tracker in oeffentlichen One-Shot- und privaten DB-Modus aufgeteilt

changed

  • **`gym-tracker/src/app/page.tsx`**
  • Root von der alten direkt angebundenen Supabase-App auf einen klaren Einstieg mit zwei Pfaden umgebaut: oeffentliche Vorlage und privater Bereich.
  • **`gym-tracker/src/app/one-shot/page.tsx`, `gym-tracker/src/components/public/GymTrackerPublic.tsx`, `gym-tracker/src/lib/gym.ts`**
  • neue oeffentliche One-Shot-Version gebaut: laeuft lokal im Browser, schreibt nichts nach Supabase, speichert Drafts nur in `localStorage` und erzeugt Copy-Paste-Text fuer einmalige Nutzung.
  • **`gym-tracker/src/app/private/page.tsx`, `gym-tracker/src/components/private/GymTrackerPrivate.tsx`, `gym-tracker/src/app/api/auth/magic-link/route.ts`, `gym-tracker/src/lib/supabase.ts`**
  • private DB-Version auf eigenen Pfad verschoben und auf Magic-Link-Login via Supabase vorbereitet.
  • Server-Route fuer allowlist-basierten Magic-Link-Request eingebaut (`GYM_ALLOWED_EMAILS`, `NEXT_PUBLIC_GYM_TRACKER_REQUIRE_AUTH`, `NEXT_PUBLIC_GYM_TRACKER_ORIGIN`).
  • **`gym-tracker/schema.sql`, `gym-tracker/equipment.sql`, `gym-tracker/migrations/001_equipment.sql`, `gym-tracker/migrations/002_authenticated_access.sql`**
  • offene `public full access`-Policies aus den Repo-Schemas entfernt.
  • Sessions/Exercises auf `authenticated`-Zugriff gehoben, Equipment auf `public read` begrenzt.
  • Nachzieh-Migration fuer bestehende offene Installationen angelegt.
  • **`gym-tracker/README.md`, `gym-tracker/CHANGELOG.md`**
  • Doku und Projekt-Changelog auf die neue Zwei-Modi-Architektur und den Auth-/RLS-Fahrplan aktualisiert.
  • **`gym-tracker`**
  • Aenderungen als Commit `748b10b` (`feat(tracker): split public and private modes`) nach `origin/main` gepusht.

verified

  • `npm run lint` in `gym-tracker`
  • Ergebnis: gruen.
  • `npm run build` in `gym-tracker`
  • Ergebnis: gruen.
  • Vercel
  • manueller Prod-Deploy `dpl_Fex2uNJB265ufG3xeb2zmiK7a9xJ` ging zuerst live.
  • nach Push wurde Git-Deploy `dpl_49nXVXgfkAC6HJBuBNbSgr1ihsPH` auf `READY` fertig und traegt jetzt `gym.w3yh.xyz`.
  • Live-Checks
  • `https://gym.w3yh.xyz` antwortet mit `200`.
  • `https://gym.w3yh.xyz/one-shot` antwortet mit `200`.
  • `https://gym.w3yh.xyz/private` antwortet mit `200`.
  • Root enthaelt den neuen Zwei-Wege-Einstieg, `/one-shot` den oeffentlichen One-Shot-Flow und `/private` die private DB-Version.
codexopenclaw

stocktracker auf stocktracker.w3yh.xyz gehoben und Company-Fallbacks repariert

changed

  • **`stocktracker`**
  • Production-Domain `stocktracker.w3yh.xyz` dem Vercel-Projekt `stocktracker` zugewiesen; der Alias haengt jetzt am Git-Deploy von Commit `04d8552` (`fix(company): restore metadata fallbacks`).
  • **`stocktracker/api/company.ts`**
  • Company-Endpoint von einem fragilen Einzelaufruf auf einen kombinierten Fallback ueber `get-summary`, `get-quotes` und `auto-complete` umgebaut.
  • Name, Boerse und Waehrung werden jetzt robust aus Quote-/Search-Daten gezogen, wenn Yahoo im Summary-Pfad wieder leere Felder liefert.
  • **`stocktracker/server/src/services/yahooFinance.ts`**
  • denselben Company-Fallback fuer den lokalen Express-Server nachgezogen.
  • Summary-Zugriffe mit optionalen Chains gehaertet, damit fehlende `quoteSummary.result`-Payloads nicht mehr blind weiterkrachen.

verified

  • `npm run lint` in `stocktracker`
  • Ergebnis: gruen.
  • `npm run build` in `stocktracker`
  • Ergebnis: gruen.
  • `npm install && npm run build` in `stocktracker/server`
  • Ergebnis: gruen; Build war vorher lokal nur blockiert, weil im `server/` die Dependencies noch nicht installiert waren.
  • `https://stocktracker.w3yh.xyz`
  • Ergebnis: antwortet mit `200 OK`.
  • `https://stocktracker.w3yh.xyz/api/company?symbol=AAPL`
  • Ergebnis: liefert jetzt `Apple Inc.` + `NasdaqGS` statt nur `AAPL` + `N/A`.
  • `https://stocktracker.w3yh.xyz/api/company?symbol=HIMS`
  • Ergebnis: liefert jetzt `Hims & Hers Health, Inc.` + `NYSE` statt nur `HIMS` + `N/A`.
  • Vercel-Deploys
  • manueller Prod-Deploy `dpl_DWQwmZkGJ7d4pGHNX6xixwCPpCPn` und nachgezogener Git-Deploy `dpl_8bRaiJNvWG6fWEtfCBMaJiAWMi5x` stehen beide auf `READY`; `stocktracker.w3yh.xyz` aliasiert auf dem Git-Deploy.
codexopenclaw

stocktracker-Vercel-Importfix live gezogen und Gym-Domain gegengeprueft

changed

  • **`stocktracker/api/company.ts`**
  • relativen Import auf explizites ESM-Ziel `./_lib/requestGuard.js` umgestellt, damit die Vercel-Function unter Node 24 nicht mehr an `ERR_MODULE_NOT_FOUND` stirbt.
  • **`stocktracker/api/euquote.ts`**
  • sowohl `requestGuard` als auch `../src/utils/euTickerMappings.js` auf explizite `.js`-Imports gehoben, damit der EU-Quote-Pfad in Production wieder laeuft.
  • **`stocktracker/api/fundamentals.ts`, `stocktracker/api/historical.ts`, `stocktracker/api/quote.ts`, `stocktracker/api/search.ts`**
  • dieselbe `.js`-Importkorrektur fuer alle Serverless-Routen nachgezogen.
  • **`stocktracker/.gitignore`**
  • `.vercel` weiter auf Ignore gehalten.
  • **`stocktracker`**
  • Fix als Commit `499149b` (`fix(vercel): add explicit js extensions for api imports`) nach `origin/main` gepusht; Git-Deployment `dpl_GAPn49FQjiToSTo5NAr8PfBvNMDK` wurde danach von Vercel auf Production uebernommen.

verified

  • `npm run lint` in `stocktracker`
  • Ergebnis: gruen.
  • `npm run build` in `stocktracker`
  • Ergebnis: gruen.
  • Vor dem Fix:
  • `https://stocktracker-six.vercel.app/api/search?q=AAPL`
  • `https://stocktracker-six.vercel.app/api/quote?symbol=AAPL`
  • `https://stocktracker-six.vercel.app/api/company?symbol=AAPL`
  • `https://stocktracker-six.vercel.app/api/euquote?symbol=AAPL`
  • Ergebnis: alle vier Routen liefen in `500 FUNCTION_INVOCATION_FAILED`; Runtime-Logs zeigten `ERR_MODULE_NOT_FOUND`.
  • Nach Deploy + Git-Deploy:
  • dieselben Live-Endpoints liefern wieder `200`.
  • `stocktracker-six.vercel.app` aliasiert auf den Git-Deploy `499149b`; `stocktracker-git-main-vibey434s-projects.vercel.app/api/quote?symbol=AAPL` antwortet ebenfalls `200`.
  • `https://gym.w3yh.xyz`
  • Ergebnis: antwortet aktuell mit `200 OK`; `gym-tracker` braucht fuer diese Baustelle keinen neuen Code-Fix.
tyronegym

v1.1.0 (In Progress)

architektur & sicherheit

  • **Private-Gate-SSO praktisch nachgezogen:** `/private` schickt Nutzer ohne lokale Gym-Session automatisch zu `https://private.w3yh.xyz/go/gym` und übernimmt die Session nach dem Gate-Handoff wieder zurück in die App. Passwort und Magic Link bleiben nur noch Fallback, wenn der Handoff einen Fehler zurückmeldet.
  • **Supabase-Public-Key korrigiert:** Der produktive `NEXT_PUBLIC_SUPABASE_ANON_KEY` war im Gym-Projekt falsch mit einem stärkeren Supabase-Key bestückt. Local Env und Vercel Production/Preview/Development sind auf den echten Anon-Key gezogen, Gym wurde neu deployt (`dpl_EV7A3HnqQDy45kaxVzvZ16G96n9V`) und ältere Gym-Deployments wurden aus Vercel entfernt.
  • **Startseiten-Copy auf Private Gate aktualisiert:** Die öffentliche Startseite bewirbt für die private Trainingsdatenbank jetzt den Weg über `https://w3yh.xyz/private/go/gym`, Passwortmanager-Alltag und Magic Link nur als Fallback. README und `SUPABASE_SETUP.md` sind auf denselben Primärpfad gezogen.
  • **Cookie-basierte Browser-Session vereinheitlicht:** `src/lib/supabase.ts` nutzt jetzt `@supabase/ssr` statt des alten Plain-Clients. Damit lesen privater Browser-Login, Magic-Link-Rückkehr und Gate-Handoff dieselbe Session-Art statt aneinander vorbeizulaufen.
  • **Auth-Callback ergänzt:** `src/app/auth/callback/route.ts` tauscht Mail-Link- oder Recovery-Token jetzt serverseitig in eine echte App-Session für `gym.w3yh.xyz`. Die Magic-Link-API zeigt dafür nicht mehr stumpf auf `/private`, sondern auf den Callback.
  • **Fallback-Login auf Passwort erweitert:** `/private` akzeptiert jetzt zusätzlich E-Mail plus Passwort; Magic Link bleibt nur noch der Fallback. Die Copy erklärt jetzt auch hier klar, dass das Private Gate der erste Weg und der Passwortmanager danach der bequemste Alltagspfad ist.
  • **Öffentliche und private Variante getrennt:** Root ist jetzt ein Einstieg mit klarer Trennung zwischen öffentlicher One-Shot-Vorlage (`/one-shot`) und privater Supabase-Version (`/private`).
  • **Öffentliche One-Shot-Vorlage:** Neue browserlokale Version ohne Supabase-Rückschreiben mit Copy-Paste-Export für einmalige Trainingslogs.
  • **Privater Magic-Link-Flow vorbereitet:** Die private Version ist auf Supabase-Login via Mail-Link vorbereitet; Route-Handler liegt unter `src/app/api/auth/magic-link/route.ts`.
  • **Private-Gate-Handoff vorbereitet:** `src/lib/handoff.ts` und `src/app/auth/handoff/route.ts` koennen jetzt signierte Sessions von `private.w3yh.xyz` pruefen und lokal auf `gym.w3yh.xyz` in eine App-Session uebernehmen.
  • **Magic-Link-Route gehärtet:** Redirect-Origin wird validiert, kaputte JSON-Bodies werden sauber abgefangen und Magic-Link-Anfragen werden serverseitig rate-limitiert.
  • **RLS-Defaults gehärtet:** `schema.sql`, `equipment.sql` und `migrations/001_equipment.sql` stellen neue Setups nicht mehr offen auf `public full access`.
  • **Nachzieh-Migration:** `migrations/002_authenticated_access.sql` zieht bestehende offene Installationen auf `authenticated` um.
  • **PC-Setup dokumentiert:** `SUPABASE_SETUP.md` bündelt die exakte Reihenfolge für SQL, Auth-Settings, Redirect-URLs, Vercel-Env und den abschließenden Login-Test.

go-live & verifikation

  • **Produktions-Env für den privaten Login gesetzt:** `NEXT_PUBLIC_GYM_TRACKER_ORIGIN`, `NEXT_PUBLIC_GYM_TRACKER_REQUIRE_AUTH=true` und `GYM_ALLOWED_EMAILS` sind im Vercel-Projekt jetzt produktiv hinterlegt.
  • **Production-Deploy erneuert:** `gym.w3yh.xyz` läuft auf einem frischen Deploy mit aktivem privaten Auth-Pfad.
  • **Magic-Link-API live getestet:** `/api/auth/magic-link` antwortet neutral sowohl für freigeschaltete als auch für gesperrte Adressen und leakt damit keine Allowlist.
  • **Rate-Limit-Fehler nicht mehr verschleiert:** Wenn Supabase den Mailversand drosselt oder der gemeinsame Email-Provider deaktiviert ist, kommt jetzt eine passende Fehlermeldung statt eines diffusen generischen 500ers.
  • **Read-only-Probe ergänzt:** `SUPABASE_SETUP.md` enthält jetzt einen API-Check ohne Dashboard, damit man offene RLS-/Auth-Defaults sofort sieht.
  • **Private UI auf Gate-Einstieg gezogen:** Die Login-Maske unter `/private` verweist jetzt sichtbar auf das zentrale Gate; solange `private.w3yh.xyz` noch nicht als Alias haengt, ist `https://w3yh.xyz/private/go/gym` der reale Live-Pfad. `README.md` und `SUPABASE_SETUP.md` dokumentieren zusaetzlich das benoetigte Secret `W3YH_PRIVATE_HANDOFF_SECRET`.
  • **Env-Vorlage ergänzt:** `.env.example` liegt jetzt direkt im Repo, damit der produktive Gate-/Supabase-Block nicht mehr nur aus verstreuten Doku-Schnipseln zusammengesetzt werden muss.
  • **Gate-Rollout live bestätigt:** Der GitHub-Deploy `76aa59c` ist auf Vercel `READY`; `https://gym.w3yh.xyz/private` antwortet damit jetzt produktiv auf dem neuen privaten Einstieg.
  • **Handoff-Runtime live eingegrenzt:** `https://gym.w3yh.xyz/auth/handoff?handoff=test` redirectet kontrolliert auf `/private?error=Private-Gate-Handoff+ist+noch+nicht+konfiguriert.` Damit ist klar, dass der neue Handoff-Pfad live ist und jetzt nur noch `W3YH_PRIVATE_HANDOFF_SECRET` im Runtime-Setup fehlt.
  • **Shared-Secret live angekommen:** Der Handoff-Test auf `https://gym.w3yh.xyz/auth/handoff?handoff=test` faellt jetzt mit `Handoff-Token ist unvollstaendig.` statt mit einem Konfigurationsfehler. Damit ist die Runtime-Verkabelung geschlossen; offen bleibt nur noch der echte Gate-Login mit realer Session.
  • **Verbleibender Rest klar benannt:** Die Read-only-Probe zeigt aktuell noch anon `200` auf `gt_sessions` und `gt_exercises`; dazu stehen `site_url` und Signup-Defaults im Supabase-Auth-Setup noch nicht auf dem Zielzustand. Der Rest von `GYM-1` ist damit ein reiner Dashboard-/SQL-Schritt.
  • **Lokaler Build nach Auth-Umbau grün:** `npm run build` läuft nach Passwort-Login, SSR-Browser-Client und neuem `/auth/callback` wieder sauber durch; der nächste Rest ist nur noch Deploy plus echter Gate-Smoke.

Incidents

Gym Tracker / Auth UX
~10 mincodex

Problem: Die Gym-Login-Maske zeigte bei echtem Supabase-Mail-Rate-Limit nur die generische Meldung "Magic Link konnte nicht gesendet werden.", was wie ein diffuser App-Fehler wirkte und die eigentliche gemeinsame Auth-Baustelle mit Tyrone verdeckte

Ursache: Die Gym-API fing Supabase-Fehler pauschal als generischen `500` ab; parallel lief die Untersuchung in ein gemeinsames Shared-Supabase-Rate-Limit, waehrend Redirects selbst pro App korrekt getrennt waren

Fix: Shared-Auth live gegen Gym und Tyrone gegengeprueft, den echten `429 over_email_send_rate_limit`-Pfad isoliert, `w3yh`-Auth-Strategie auf zentrales `private.w3yh.xyz`-Gate gedreht und die Gym-Route so gepatcht, dass Rate-Limits bzw. deaktivierte Email-Provider mit passender Rueckmeldung nach oben gehen

Gym Tracker / Auth Go-Live
~35 mincodex

Problem: Der private Gym-Pfad war deployment-seitig noch nicht wirklich auth-scharf, und aus der Aufgabenliste war nicht klar, ob der Rest an Vercel, App-Code oder Supabase hing

Ursache: Im Vercel-Projekt fehlten die produktiven Auth-Variablen noch; parallel waren die manuellen Supabase-SQL-/Auth-Schritte zwar dokumentiert, aber ihr Ist-Zustand nicht read-only verifiziert

Fix: Produktive Gym-Env in Vercel gesetzt, neuen Production-Deploy auf `gym.w3yh.xyz` gefahren, Magic-Link-API live geprueft und den Rest per Read-only-Supabase-Probe explizit auf SQL/RLS/Auth-Dashboard-Schritte eingegrenzt

w3yh Hub / Tyrone Auth Setup
~20 mincodex

Problem: Der `w3yh`-Hub zeigte fuer `Markets` noch die alte Projekt-URL, und fuer den SMTP-Go-Live lagen die benoetigten Variablen nur verstreut in Doku statt direkt am Runtime-Setup

Ursache: Todo/Hub-Stand war nach dem spaeteren `stocktracker.w3yh.xyz`-Go-Live nicht nachgezogen worden; zusaetzlich fehlten `SUPABASE_ACCESS_TOKEN` und `TYRONE_SMTP_*` als sichtbare Beispiele in `.env.example`

Fix: `src/lib/projects.ts` auf `https://stocktracker.w3yh.xyz` umgestellt, `w3yh`-Todo auf den verifizierten Live-/Green-Stand gezogen und `.env.example` fuer Tyrone um Supabase-/SMTP-Beispielwerte erweitert

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.