mirror of
https://github.com/Andre-Bzk/twitch4steamdeck.git
synced 2026-11-15 09:33:09 +01:00
5.5 KiB
5.5 KiB
Twitch4SteamDeck — Fortschritts-Snapshot
Stand: 2026-04-07. Diese Datei dient als Übergabe zwischen Sessions. Lies zuerst: diese Datei +
todo.md. Der vollständige Architekturplan liegt unterC:\Users\andre\.claude\plans\smooth-shimmying-parasol.md(im Repo gespiegelt alsplan.md).
Bereits abgeschlossen
✅ Projekt-Skelett (Electron + Vite + React + TypeScript)
package.json,tsconfig.json,tsconfig.node.json,tsconfig.web.jsonelectron.vite.config.ts,electron-builder.yml,.gitignore- Main-Prozess Stub:
src/main/index.ts(BrowserWindow 1280×800, dunkles Theme) - Preload-Stub:
src/preload/index.ts(contextBridge →window.t4sd) - Renderer:
src/renderer/index.html,src/renderer/src/main.tsx,App.tsx,styles/global.css(Big-Screen-Baseline) - Status: vom User bestätigt —
npm run devöffnet Fenster mit „Twitch4SteamDeck".
✅ Twitch OAuth Device Code Flow
src/main/auth/deviceCodeFlow.ts—requestDeviceCode(),pollForToken(),refreshAccessToken(). Endpoints:https://id.twitch.tv/oauth2/device,https://id.twitch.tv/oauth2/token. Polling respektiertinterval,slow_down,expired,denied,cancelled.src/main/auth/tokenStore.ts— Persistenz via ElectronsafeStorage(kein keytar/native module), Datei:userData/twitch-tokens.bin. Fallback unverschlüsselt mit0o600falls Encryption nicht verfügbar.src/main/auth/authService.ts—EventEmitter, Methoden:init(),startDeviceFlow(),cancelFlow(),logout(),getValidAccessToken()(mit Auto-Refresh, 60s Safety-Margin). Scope MVP:['user:read:follows']. Emittiert'auth-event'.src/main/ipc/handlers.ts— IPC-Kanäle:auth:get-status,auth:start-device-flow,auth:cancel,auth:logout,auth:is-configured,auth:event(main → renderer).src/preload/index.ts— exponiertwindow.t4sd.auth.{isConfigured, getStatus, startDeviceFlow, cancel, logout, onEvent}.src/renderer/src/screens/LoginScreen.tsx— Phasenidle | starting | awaiting | error | not-configured, QR-Code viaqrcode-Lib, Countdown, Cancel-Button.src/renderer/src/App.tsx— Statusbasiertes Routing (logged-out→ LoginScreen,logged-in→ Platzhalter mit Logout-Button).src/renderer/src/types/t4sd.d.ts— globale Window-Typen (manuell synchron zu Preload)..env.example— Vorlage fürMAIN_VITE_TWITCH_CLIENT_ID.- Status: Code geschrieben, noch nicht vom User end-to-end getestet.
Wo wir gerade stehen
Mitten in: Schritt 1 (Auth) ist code-complete, wartet auf Verifikation durch den User.
Konkret offen:
- User muss eine Twitch-App auf https://dev.twitch.tv/console/apps registrieren
(Public Client, Redirect
http://localhost) und die Client-ID in.enveintragen:MAIN_VITE_TWITCH_CLIENT_ID=<id> npm installmuss erneut laufen (neue Deps:qrcode,@types/qrcode).npm run devstarten und den kompletten Login-Flow durchspielen:- Button „Mit Twitch verbinden" → QR + Code erscheinen
- Auf Handy
twitch.tv/activateöffnen, Code eingeben - App sollte automatisch zu „Eingeloggt"-Platzhalter wechseln
- Neustart der App → sollte eingeloggt bleiben (Tokens in
userData/twitch-tokens.bin)
Mögliche Stolpersteine, die morgen früh zu prüfen sind:
import.meta.env.MAIN_VITE_TWITCH_CLIENT_IDim Main-Prozess: setzt voraus, dass electron-vite die.envlädt — falls nicht, alternativprocess.env.MAIN_VITE_TWITCH_CLIENT_IDoder viadefine-Plugin inelectron.vite.config.tsinjizieren.- TypeScript könnte über
import.meta.envim Main-Prozess meckern. tsconfig.node.json hat"types": ["node", "electron-vite/node"]— sollte reichen. - Renderer-Types:
src/renderer/src/types/t4sd.d.tsmuss vontsconfig.web.jsonerfasst werden (ist übersrc/renderer/**/*.tsabgedeckt).
Nächster Schritt morgen (in dieser Reihenfolge)
- Fragen: „Hat der Login-Flow gestern durchgelaufen? Falls Fehler, welche Logs?"
- Falls Fehler: Erst diese fixen, bevor neue Features dazukommen.
- Häufiger Verdächtiger:
import.meta.env-Loading im Main → Workaround dokumentiert oben.
- Häufiger Verdächtiger:
- Falls grün: Direkt in Schritt 2: Twitch Helix-Client + Followed-Channels-Home-Screen einsteigen.
- Neue Dateien planen:
src/main/twitch/helixClient.ts,src/main/twitch/types.ts, IPC-Kanäletwitch:get-followed,twitch:get-live-status, Renderer-Screensrc/renderer/src/screens/HomeScreen.tsxmit Spatial-Navigation-Karten. - Helix-Endpoints für MVP:
GET /users(own),GET /channels/followed,GET /streams(batched).
- Neue Dateien planen:
Wie morgen effektiv weiterarbeiten?
Empfehlung: Beim Sessionstart diese drei Dateien in dieser Reihenfolge lesen lassen:
CLAUDE_PROGRESS.md(diese Datei) — Snapshottodo.md— Checkboxen-Tracker (jeder erledigte Schritt wird dort sofort abgehakt)plan.md— gespiegelter Architekturplan (Quelle:~/.claude/plans/smooth-shimmying-parasol.md)
Workflow:
- Vor jeder Subaufgabe: relevanten Abschnitt in
todo.mdchecken. - Nach Abschluss: Checkbox in
todo.mdsetzen + 1-Zeilen-Update inCLAUDE_PROGRESS.mdunter „Bereits abgeschlossen". - Bei Architekturänderungen:
plan.mdupdaten (nicht nur die Kopie im~/.claude/plans/).
Erste Anweisung morgen an Claude (copy-paste):
„Lies CLAUDE_PROGRESS.md, todo.md und plan.md. Frag mich, ob der Login-Flow gestern durchgelaufen ist, und mach dann mit dem nächsten offenen Schritt weiter."