dragon-iso/NEXT_STEPS.md
Zac Gaetano c27130302f
Some checks failed
CI / build-and-test (push) Failing after 31s
feat(wpf): v2 'Studio Terminal' shell - theme system, header, transport strip, drawer
- Theme split: Theme.Dark.xaml + Theme.Light.xaml + ThemeManager

- New shell: 32px header (mark + wordmark + 3 icons), 40px transport strip, conditional meeting bar, slide-over settings drawer

- Removed: 72px rail, 380px permanent settings panel, 6-column footer, custom chromeless title bar buttons

- Ctrl+T toggles theme; follows Windows app-mode by default

- Shape doc at docs/shapes/2026-05-13-teamsiso-v2-studio-terminal.md
2026-05-14 12:46:24 -04:00

6.4 KiB
Raw Blame History

Where we left off — v2 "Studio Terminal" shell landed (2026-05-13 night)

What's done (uncommitted on local main)

v2 redesign shape: Approved brief at docs/shapes/2026-05-13-teamsiso-v2-studio-terminal.md. Aesthetic register is "broadcast-engineering instrument" — Linear's keyboard-first density × Avid console legibility. Goes hard against the "screams AI" failure mode.

PRODUCT.md + DESIGN.md updated to reflect WPF as the host (WinUI 3 lines removed), v2 IA decisions absorbed, recording references softened, theme implementation rewritten for WPF DynamicResource swap.

Theme system split:

  • src/TeamsISO.App/Themes/Theme.Dark.xaml — color brushes only, dark variant
  • src/TeamsISO.App/Themes/Theme.Light.xaml — color brushes only, light variant
  • src/TeamsISO.App/Themes/WildDragonTheme.xaml — styles + control templates (no color brushes anymore; uses DynamicResource for every brush ref)
  • src/TeamsISO.App/Services/ThemeManager.cs — singleton that swaps the merged dictionary at runtime, reads HKCU\...\AppsUseLightTheme for System mode, subscribes to SystemEvents.UserPreferenceChanged, persists via UIPreferences.Theme.
  • App.xaml merges Theme.Dark.xaml + WildDragonTheme.xaml by default; App.xaml.cs.OnStartup calls ThemeManager.Current.Apply() before MainWindow shows.
  • UIPreferences.Prefs record gets a new Theme = "System" field (forward-compatible — old json files still load).
  • New brush key: Wd.Accent.CyanText (Dark #97EDF0 / Light #0E7C82) for cyan-as-text contrast on light canvas. The existing Wd.Accent.Cyan stays bright in both modes for fill use.

v2 main window shell:

  • Default Windows title bar (no more custom chromeless caption buttons — they looked generic and broke on DPI scaling).
  • 32px header: Wild Dragon mark + "TeamsISO" wordmark left; three icon buttons right (⌘K command palette, theme toggle, settings gear). The mark is small (20px) as a quality cue — click opens About.
  • 40px transport strip: mono-typed single line. ● 02:14:32 PART 4 · LIVE 2 CTRL :9755. Cyan dot + timer only when at least one ISO live. CTRL cluster right-aligned in a Grid column.
  • Body: alert banner + update banner + action toolbar (Enable / Refresh / Presets / Stop all + Teams launch/hide icons) + participants DataGrid.
  • Conditional meeting bar at bottom — appears only when IsTeamsInCall == true, with Mute / Cam / Leave.
  • 72px left rail: gone.
  • 380px permanent settings panel: gone.
  • Six-column footer: gone.
  • Settings: slide-over drawer overlay (420px from right) triggered by the header gear; OUTPUT / NETWORK / APP tabs (DISPLAY renamed to APP); same bindings as v1. Scrim click dismisses; Esc dismisses.

Hotkeys preserved + new:

  • F1 help, Ctrl+R refresh, Ctrl+Shift+S panic stop, 19 / NumPad 19 toggle Nth participant — all preserved.
  • Ctrl+T toggle theme (NEW) — cycles dark ↔ light. Hooked through MainViewModel.ToggleThemeCommandThemeManager.Toggle().
  • Ctrl+K command palette (placeholder) — currently opens the help dialog. Task 40 replaces this with a real fuzzy-search palette window.

View-model additions (MainViewModel):

  • ParticipantCount and LiveCount — feed the transport strip's "PART N · LIVE N" readout. Updated on the 1Hz stats tick.
  • ToggleThemeCommand — wraps ThemeManager.Current.Toggle().

MainWindow code-behind cleanup:

  • Removed OnMinimize, OnMaximizeRestore, OnClose, OnWindowStateChanged, the maximize-icon swap logic (no more custom title bar).
  • Added OnCommandPaletteClick, OnSettingsScrimClick, OnPreviewKeyDown (Esc to close drawer).
  • OnSettingsToggleClick now toggles SettingsDrawerOverlay.Visibility (the slide-over) instead of toggling the v1 right-column width.

To build, push, and demo

cd "C:\Users\zacga\Documents\Claude\Projects\Teams ISO"

# Clear the corrupt local index from the earlier session
Remove-Item .git\index -Force -ErrorAction SilentlyContinue
git reset

# Build the WPF host
dotnet build src\TeamsISO.App\TeamsISO.App.csproj -c Release

# If the build is clean:
.\src\TeamsISO.App\bin\Release\net8.0-windows\TeamsISO.exe

In the running app, test:

  1. Theme toggle — press Ctrl+T. Should swap dark ↔ light without restart. Header colors, surfaces, and text foregrounds all repaint.
  2. System theme follow — open Windows Settings → Personalization → Colors → "Choose your mode" → flip between Dark and Light. TeamsISO should track the OS automatically (default preference is System).
  3. Settings drawer — click the header gear icon. 420px drawer slides in from the right with OUTPUT / NETWORK / APP tabs. Esc or click-scrim dismisses.
  4. Transport strip — should show the session timer when at least one ISO goes live, and the PART/LIVE counts always.
  5. Conditional meeting bar — only appears when Teams is in a call.

If anything regresses, the v1 shell is preserved in git history at 1d1ce6a — easy rollback with git reset --hard 1d1ce6a then publish.

Commit + push when ready

git add -A src/TeamsISO.App/ docs/ PRODUCT.md DESIGN.md
git commit -m "feat(wpf): v2 'Studio Terminal' shell — theme system, header, transport strip, drawer

- Theme split: Theme.Dark.xaml + Theme.Light.xaml + ThemeManager
- New shell: 32px header (mark + wordmark + 3 icons), 40px transport strip,
  conditional meeting bar, slide-over settings drawer
- Removed: 72px rail, 380px permanent settings panel, 6-column footer,
  custom chromeless title bar buttons
- Ctrl+T toggles theme; follows Windows app-mode by default
- Shape doc at docs/shapes/2026-05-13-teamsiso-v2-studio-terminal.md"
git push origin HEAD

What's still queued (tasks 39 + 40)

  • Task 39 — Participants table redesign. The DataGrid columns in the v2 shell are still v1-style (Name / Source / ISO toggle). v2 wants: 5 columns (state LED, name+codec, audio meter, output name mono, ISO pill), 52px rows, full-row active-speaker tint instead of left stripe, hard-edged 8px state LED.
  • Task 40 — Real Ctrl+K command palette window. Floating 560×360 dialog, fuzzy search across categories (Quick / Teams / Presets / Output / Network / App). Replaces the current placeholder that opens the help dialog.

Both are scoped commits and depend on the v2 shell being confirmed working first. After this lands and you've verified the theme swap + drawer + transport strip render correctly, ping me and we'll knock those out.