feat: BRB backdrop seed + docs refresh + Polar org ID

- Add brb-backdrop.jpg asset, SeedBrbBackdrop() mirrors Starting pattern
- Update HANDOFF.md (was stale), TASKS.md (TASK 10 ready, TASK 15 2/5), ai.md (org ID)
- Polar org ID c05fb364 obtained via OAT, recorded in CREDENTIALS.md
This commit is contained in:
2026-08-19 15:01:23 -07:00
parent 26828ccdd7
commit f40ec83e69
6 changed files with 94 additions and 43 deletions
+25 -20
View File
@@ -704,17 +704,20 @@ free — the only difference between free and paid is the watermark.
**Polar product:** `d105dfa1-497e-423b-8cd4-e0ee2e3abbc0` (LlamaCasty, $99/yr, currently `private`)
**Checkout:** `llamacasty.com` → Polar hosted page (~80% configured)
**Discounts:** `LLAMAFOUNDER` (100% off, 50 uses, `once`), `LLAMA50` (50% off, 12 months, unlimited)
**Org ID:** `c05fb364-b967-4f6c-adf2-8a144e46d085` (org-scoped OAT — `organization_id` can be omitted from API calls)
**Key prefix:** `LCYT-`
**Validate endpoint:** `POST https://api.polar.sh/v1/customer-portal/license-keys/validate` (no auth required for client-side validation)
### Status: 🔶 Scoped — Polar infra live, in-app plumbing not built
### Status: 🔶 Ready to execute — Polar infra live, org ID obtained, in-app plumbing not built
1. ✅ **Billing provider** — Polar (polar.sh) chosen and configured. Product, price, license key benefit, discounts, checkout link all created.
2. ☐ **License key entry + verification UI** — About overlay or dedicated dialog; key entry field + validate against Polar API
3. ☐ **Offline entitlement** — cached license state in `LayoutStore` (schema bump); online check at startup, offline grace period
4. ☐ **BrandFlash → watermark toggle** — `BrandFlashEnabled = false` when licensed; the flash asset image needs to be created (the XAML `TextBlock` is preview-only, the compositor needs a `VideoFrame`)
5. ☐ **Remove social slot locks** — all 6 social bar slots open to everyone (no `IsPremium` gating on slots 3-6)
5. ✅ **Remove social slot locks** — all 6 social bar slots open to everyone (no `IsPremium` gating on slots 3-6) — shipped as TASK 10c
6. ☐ **"Unlock Premium" button** — `PremiumUrl` set to `llamacasty.com` checkout; `IsPremiumAvailable` becomes true
7. ☐ **Renewal/lapse handling** — key expiry check, grace period, re-prompt
8. ☐ **In-app bug-report → git issues** — built-in report control; good error codes first, optional log attachment
8. ☐ **Velopack auto-updates** — NuGet packages + UpdateManager shim + GitHub Releases (`gramps/ytLlive`)
---
@@ -845,12 +848,14 @@ No changes to `MusicPlayer`, the 0.20 cap, the ducker, or the meter zones. Build
**Goal:** branded background images for each canonical scene (Starting, Live, BRB, Chat, Ending)
that both provide working hints to creators and self-promote LlamaCasty.
### Status: ☐ Waiting on user to provide images
### Status: 🔶 2/5 seeded — Starting and BRB done; Live, Chat, Ending waiting on user images
1. ☐ User provides 5 background images (one per canonical scene), PNG format, 1920×1080
2. ☐ Wire images as default `Background` sources, auto-populated on DB seed (empty DB → each scene gets its branded bg)
3. ☐ Assets stored in DB via `Asset` table (BLOB, SHA-256 keyed) — survives file deletion
4. ☐ Used by TASK 16 (infinity display fix) as the static fallback when no game is detected
1. ✅ **Starting backdrop** — `Assets/starting-backdrop.jpg` (embedded resource), `SeedStartingBackdrop()` in MainViewModel, idempotent
2. ✅ **BRB backdrop** — `Assets/brb-backdrop.jpg` (user-provided Gemini image), `SeedBrbBackdrop()` in MainViewModel, idempotent
3. ☐ User provides 3 more background images (Live, Chat, Ending), PNG/JPG format, 1920×1080
4. ☐ Wire images as default `Background` sources, auto-populated on DB seed
5. ☐ Assets stored in DB via `Asset` table (BLOB, SHA-256 keyed) — survives file deletion
6. ☐ Used by TASK 16 (infinity display fix) as the static fallback when no game is detected
### Design decisions
@@ -939,18 +944,18 @@ capturing the primary display (which causes the infinity mirror effect).
The tasks below are ordered by dependency and risk. Each task builds on the previous.
1. **TASK 9.4** — Live chat (right panel) — wire `YouTubeChatService.Start()`, parse messages, render in panel. Foundation for chat box source.
2. **TASK 20** — Hotkeys — global keyboard shortcuts. Small scope, huge UX impact.
3. **TASK 19** — Scene transitions — Cut/Fade/Move/Custom. Depends on compositor.
4. **TASK 17** — Web source (WebView2) — enables alert ecosystem.
5. **TASK 18** — Local recording — independent, but pairs with stream.
6. **TASK 21** — Media source — video file playback for non-Live scenes.
7. **TASK 22** — Audio sync offset — small, quality-of-life.
8. **TASK 23** — Studio mode — lightweight preview before live.
9. ✅ **TASK 3.18** — Chat box source — renders chat ON the stream. Depends on TASK 9.4 (same message parsing).
10. **TASK 15** — Stock bg images — waiting on user.
11. **TASK 16** — Infinity display fix — depends on TASK 15.
12. **TASK 10** — Polar billing — in-app license key entry + watermark toggle.
1. ✅ **TASK 9.4** — Live chat (right panel) — wire `YouTubeChatService.Start()`, parse messages, render in panel. Foundation for chat box source.
2. ✅ **TASK 3.18** — Chat box source — renders chat ON the stream. Depends on TASK 9.4 (same message parsing).
3. **TASK 10** — Polar billing — in-app license key entry + watermark toggle + Velopack auto-updates.
4. **TASK 20** — Hotkeys — global keyboard shortcuts. Small scope, huge UX impact.
5. **TASK 19** — Scene transitions — Cut/Fade/Move/Custom. Depends on compositor.
6. **TASK 17** — Web source (WebView2) — enables alert ecosystem.
7. **TASK 18** — Local recording — independent, but pairs with stream.
8. **TASK 21** — Media source — video file playback for non-Live scenes.
9. **TASK 22** — Audio sync offset — small, quality-of-life.
10. **TASK 23** — Studio mode — lightweight preview before live.
11. **TASK 15** — Stock bg images — Starting and BRB seeded; Live, Chat, Ending still waiting on user.
12. **TASK 16** — Infinity display fix — depends on TASK 15.
13. **TASK 13** — Social media launch kit — after all v1 features ship.
---