4.0 KiB
4.0 KiB
HANDOFF — Session State
Branch
main — clean, uncommitted TASK 10 changes
What shipped this session
-
TASK 10 — Polar billing + Velopack auto-updates (steps 1–7) — full license key activation flow:
- Velopack — NuGet
Velopack1.2.0 added, bootstrap inApp.xaml.cs(VelopackApp.Build().Run()in try/catch). Self-hosted update URL TBD (DO droplet). The bootstrap is a no-op until the update URL is configured. - PolarLicenseService —
Services/PolarLicenseService.cs:POST .../validatewithkey+organization_id. Returnsstatus(granted/revoked/expired) +expires_at. No auth. Network errors surfaced gracefully. - License key entry UI — About overlay gains a third panel (same pattern as Licenses): text input + "Activate" button + status message. "Enter License Key" button added to the hub (alongside "Unlock Premium" which opens the Polar checkout URL).
IsHubVisiblecomputed property hides the hub when either sub-panel is open. - Entitlement persistence —
LayoutStoregainsLoadLicenseKey/SaveLicenseKey,LoadLicenseValidatedAt/SaveLicenseValidatedAt,LoadIsPremium/SaveIsPremiumvia the Settings key/value table (no schema version bump needed). 14-day offline grace period: cached premium state trusted while online re-validation runs in the background. - BrandFlash toggle —
IsPremiumproperty setter flipsBrandFlashEnabled = !value. On startup,ValidateLicenseAtStartupAsyncloads cached state → attempts online re-validation → overrides cache on success → lapses on failure/expiry. Premium removes the watermark; free tier keeps it. - PremiumUrl wired — set to
https://buy.polar.sh/polar_cl_ueMy8AyAClO0o0yo19IroZwKTbD587gzUsjEW3bFapw.IsPremiumAvailablenow true. About overlay "Unlock Premium" button lights up. Tooltip updated. - About text updated — "one-time unlock" → "subscription".
- Velopack — NuGet
-
Polar MCP auth — authenticated via
opencode mcp auth Polar. Polar MCP connected.
Files changed
App.xaml.cs— Velopack bootstrap (try/catch, non-fatal)ytLive.csproj— addedVelopack1.2.0 NuGetServices/PolarLicenseService.cs— new: Polar license validation API clientServices/LayoutStore.cs— new:Load/SaveLicenseKey,Load/SaveLicenseValidatedAt,Load/SaveIsPremiumViewModels/MainViewModel.cs—IsPremium(wasstatic false, now instance + DB-backed),PremiumUrlset,BrandFlashEnabledwired to!IsPremium, license fields/commands/validation methods,IsHubVisible, startup validationMainWindow.xaml— license entry panel, "Enter License Key" button, hub visibility binding, About textMainWindow.xaml.cs—BackToAbout_Clickcloses both sub-panels
Build
taskkill.exe /F /IM ytLive.exe # if running
"/mnt/c/Program Files/dotnet/dotnet.exe" build "C:\Users\gramp\Documents\Code\projects\ytLive\ytLive.csproj" --no-restore
0 warnings, 0 errors.
Polar.sh resources
| Resource | ID |
|---|---|
| Org ID | c05fb364-b967-4f6c-adf2-8a144e46d085 |
| Product | d105dfa1-497e-423b-8cd4-e0ee2e3abbc0 |
| Price | 7c1b6f70-cf8c-46df-9bc8-6703f9fa64d0 |
| Benefit | 80f66bc1-d5a3-44a1-b9ea-1709ae508535 |
| Checkout | 70e037cd-9bcb-414e-8b26-c82c1d268f65 |
| LLAMAFOUNDER | 01a8c29f-9bb8-4e96-9cbe-417a6a5cec9b |
| LLAMA50 | 8cff803e-053f-49b4-8d12-d74d468f2943 |
| Checkout URL | https://buy.polar.sh/polar_cl_ueMy8AyAClO0o0yo19IroZwKTbD587gzUsjEW3bFapw |
| Validate endpoint | POST https://api.polar.sh/v1/customer-portal/license-keys/validate |
| Key prefix | LCYT- |
Next session
- TASK 20 — Hotkeys (global keyboard shortcuts)
- TASK 19 — Scene transitions (Cut/Fade/Move/Custom)
- Velopack update URL — self-host on DO droplet (
llamacasty.com/updates)
v1 vision
A streaming tool that's intuitive and ready to go out-the-gate with nothing held back. Minimal configuration — they're ready to go live or record. Eliminate the OBS pain-point completely.