Go Live gated on auth; scene building stays auth-free; update design docs
This commit is contained in:
@@ -13,11 +13,11 @@
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## TASK 2 — YouTube OAuth2 Authentication (optional, non-blocking)
|
## TASK 2 — YouTube OAuth2 Authentication
|
||||||
|
|
||||||
**Goal:** Fully working Google OAuth2 flow — user clicks "YouTube", browser opens, authorization callback lands, channel info is stored.
|
**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.
|
**Design constraint:** Sign-in must NEVER block core exploration. Users can build scenes, add sources, and audition the software without authenticating. But **going live requires authentication** — "Go Live" only appears once connected. OAuth is what unlocks the actual broadcast (plus live chat, scheduling, and YouTube-side health).
|
||||||
|
|
||||||
### Requirements:
|
### Requirements:
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
3. **Browser launch** — open the authorization URL in the default browser
|
3. **Browser launch** — open the authorization URL in the default browser
|
||||||
4. **Token persistence** — store access/refresh tokens securely (Windows DPAPI), reload on startup
|
4. **Token persistence** — store access/refresh tokens securely (Windows DPAPI), reload on startup
|
||||||
5. **UI state** — account name/avatar shown when connected; "sign in (optional)" affordance, never a gate
|
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
|
6. **Go Live gated on auth** — "Go Live" button only visible once authenticated; scene building works without it
|
||||||
|
|
||||||
### Tests:
|
### Tests:
|
||||||
|
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ public class MainViewModel : ViewModelBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
public bool ShowConnect => !IsYouTubeConnected;
|
public bool ShowConnect => !IsYouTubeConnected;
|
||||||
public bool ShowGoLive => IsOffline;
|
public bool ShowGoLive => IsYouTubeConnected && IsOffline;
|
||||||
|
|
||||||
// Commands
|
// Commands
|
||||||
public ICommand AddSceneCommand { get; }
|
public ICommand AddSceneCommand { get; }
|
||||||
@@ -97,7 +97,7 @@ public class MainViewModel : ViewModelBase
|
|||||||
AddSceneCommand = new RelayCommand(_ => AddScene());
|
AddSceneCommand = new RelayCommand(_ => AddScene());
|
||||||
RemoveSceneCommand = new RelayCommand(scene => RemoveScene(scene as Scene));
|
RemoveSceneCommand = new RelayCommand(scene => RemoveScene(scene as Scene));
|
||||||
ConnectCommand = new RelayCommand(_ => ConnectYouTube());
|
ConnectCommand = new RelayCommand(_ => ConnectYouTube());
|
||||||
GoLiveCommand = new RelayCommand(_ => StartStream(), _ => IsOffline);
|
GoLiveCommand = new RelayCommand(_ => StartStream(), _ => IsYouTubeConnected && IsOffline);
|
||||||
EndStreamCommand = new RelayCommand(_ => StopStream(), _ => IsLive);
|
EndStreamCommand = new RelayCommand(_ => StopStream(), _ => IsLive);
|
||||||
|
|
||||||
// Start with a default scene
|
// Start with a default scene
|
||||||
|
|||||||
@@ -51,9 +51,9 @@ Apply this to every UI decision:
|
|||||||
- Visual/drag-and-drop scene building over property panels
|
- Visual/drag-and-drop scene building over property panels
|
||||||
- Every action produces a visible outcome — no dead ends
|
- Every action produces a visible outcome — no dead ends
|
||||||
|
|
||||||
## Auth is optional, never a gate
|
## Auth gates Go Live, but not exploration
|
||||||
|
|
||||||
YouTube OAuth2 sign-in must NEVER block core usage. Users can go live with a manual stream key,
|
The app is fully usable without authentication: users can build scenes, add sources, compose
|
||||||
build scenes, and record without authenticating. OAuth is an enhancement — it unlocks live chat,
|
previews, and audition the software with zero commitment. But **going live requires authentication** —
|
||||||
broadcast creation, scheduling, and YouTube-side health — not a prerequisite. Treat the sign-in
|
it's the one capability gated behind YouTube sign-in. The sign-in button should never pressure the
|
||||||
button as "sign in (optional)", never as a requirement to use the app.
|
user ("sign in (optional)", not a modal wall), but "Go Live" only appears once connected.
|
||||||
|
|||||||
Reference in New Issue
Block a user