diff --git a/TASKS.md b/TASKS.md index e69e282..fd5d74a 100644 --- a/TASKS.md +++ b/TASKS.md @@ -13,17 +13,20 @@ --- -## TASK 2 — YouTube OAuth2 Authentication +## TASK 2 — YouTube OAuth2 Authentication (optional, non-blocking) **Goal:** Fully working Google OAuth2 flow — user clicks "YouTube", browser opens, authorization callback lands, channel info is stored. +**Design constraint:** Sign-in must NEVER block core usage. Users can go live with a manual stream key, build scenes, and record without authenticating. OAuth is an enhancement — it unlocks live chat, broadcast creation, scheduling, and YouTube-side health — not a prerequisite. + ### Requirements: 1. **Google Cloud OAuth credentials** — client ID + secret (user provides; needs "Localhost" redirect URI) 2. **Local HTTP listener** — `HttpListener` on `http://localhost:PORT/oauth2/callback` to catch the redirect 3. **Browser launch** — open the authorization URL in the default browser 4. **Token persistence** — store access/refresh tokens securely (Windows DPAPI), reload on startup -5. **UI state** — account name/avatar shown when connected, connection status reflected +5. **UI state** — account name/avatar shown when connected; "sign in (optional)" affordance, never a gate +6. **Stream key entry stays manual** — OAuth does not replace the manual stream key path ### Tests: diff --git a/ai.md b/ai.md index 62500c4..2a7ad49 100644 --- a/ai.md +++ b/ai.md @@ -50,3 +50,10 @@ Apply this to every UI decision: - Prefilled YouTube defaults (RTMP URL, bitrate, resolution, latency) - Visual/drag-and-drop scene building over property panels - Every action produces a visible outcome — no dead ends + +## Auth is optional, never a gate + +YouTube OAuth2 sign-in must NEVER block core usage. Users can go live with a manual stream key, +build scenes, and record without authenticating. OAuth is an enhancement — it unlocks live chat, +broadcast creation, scheduling, and YouTube-side health — not a prerequisite. Treat the sign-in +button as "sign in (optional)", never as a requirement to use the app.