chore(docs): reconcile to WPF-only after WinUI 3 was abandoned
- Fix TeamsISO.Windows.slnf — drop the dangling src/TeamsISO.App.WinUI/TeamsISO.App.WinUI.csproj entry whose project doesn't exist in the .sln (broke the build on main). - Archive the abandoned WinUI 3 artifacts under docs/archive/: * 2026-05-12-winui3-migration.md (the nine-phase migration plan) * TeamsISO.App.WinUI.Probe/ (the bootstrap diagnostic console) * work-log-2026-05-12-winui3.md (the overnight session log) - README — drop the "in-flight WinUI 3 replatform" status block; state that the v2 redesign landed in WPF and link the shape brief. Keyboard shortcuts table picks up Ctrl+K, Ctrl+T, and the digit hotkeys that already shipped. - CHANGELOG — replace the WinUI-3-flavoured "Ground-up GUI redesign" block with a v2 Studio Terminal entry that names Task 39 + Task 40 as landed. De-dupe the May 2026 batch: the second "Quick-join Teams meeting from URL", "IN-CALL bar surfaces Teams meeting state", and "Auto-launch Teams + auto-hide windows" bullets were verbatim repeats of earlier entries; kept the first occurrence. - NEXT_STEPS.md — rewrite to reflect that Task 39 (participants table v2) and Task 40 (Ctrl+K palette) both shipped; v1.0 cut is now gated only on MSI signing + real-meeting smoke pass. - DESIGN.md — small WPF-isms: WinUI 3 composition layer → WPF's; Segoe Fluent Icons phrased without the "WinUI 3's bundled" qualifier; migration boundary rephrased to "rewrites MainWindow.xaml + Themes/*" instead of "everything in Views/". - .gitignore — ignore the .claude/ session metadata dir so it doesn't show up as untracked on every dev checkout. Build + tests verified before commit: 0 errors, 0 warnings; 160 tests pass (56 App + 104 Engine, filter Category!=ndi&requires!=ndi). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
5a43c9cb6a
commit
37390026b3
10 changed files with 126 additions and 149 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -28,3 +28,6 @@ publish/
|
||||||
# OS
|
# OS
|
||||||
.DS_Store
|
.DS_Store
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
|
|
||||||
|
# Local Claude session metadata
|
||||||
|
.claude/
|
||||||
|
|
|
||||||
85
CHANGELOG.md
85
CHANGELOG.md
|
|
@ -6,55 +6,46 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
### Added — Ground-up GUI redesign (started 2026-05-12)
|
### Added — v2 "Studio Terminal" GUI (2026-05-13)
|
||||||
|
|
||||||
After greenlighting a from-the-scratch redesign and an explicit WinUI 3
|
The May 2026 ground-up redesign — explicit anti-reference to "the v1
|
||||||
replatform target, the May 2026 batch is followed by a major
|
GUI screamed AI made it" — landed on the WPF host
|
||||||
restructuring of the host UI. Highlights:
|
(`src/TeamsISO.App/`). The shape brief lives at
|
||||||
|
`docs/shapes/2026-05-13-teamsiso-v2-studio-terminal.md`. An earlier WinUI
|
||||||
|
3 replatform was scoped on 2026-05-12 and abandoned in favour of doing
|
||||||
|
the redesign in WPF (activation blockers + redundant work given the
|
||||||
|
shared view-model surface). The abandoned migration plan + bootstrap
|
||||||
|
probe are archived under `docs/archive/`.
|
||||||
|
|
||||||
- **PRODUCT.md** + **DESIGN.md**: impeccable context for the redesign.
|
- **PRODUCT.md** + **DESIGN.md**: impeccable context for the redesign.
|
||||||
Solo broadcast operator at 1:50am is the canonical persona; "vibe-coded
|
Solo broadcast operator at 1:50am is the canonical persona; "vibe-coded
|
||||||
GUI" is the explicit anti-reference. Tokens cover dark + light palettes
|
GUI" is the explicit anti-reference. Tokens cover dark + light palettes
|
||||||
with context-aware accent split (cyan surface fill stays bright in
|
with context-aware accent split (cyan surface fill stays bright in
|
||||||
both modes; cyan-as-text darkens to #0E7C82 on light for AA contrast).
|
both modes; cyan-as-text darkens to `#0E7C82` on light for AA contrast).
|
||||||
- **WinUI 3 host scaffold** as `src/TeamsISO.App.WinUI/` coexisting with
|
- **Theme system** (`Themes/Theme.Dark.xaml`, `Theme.Light.xaml`,
|
||||||
the existing WPF host. WindowsAppSDK 1.6 LTS, unpackaged mode, win-x64
|
`WildDragonTheme.xaml`) + `Services/ThemeManager.cs` singleton that
|
||||||
pinned RID, custom Bootstrap-aware `Program.Main`, post-build runtimeconfig
|
swaps the merged dictionary at runtime, reads
|
||||||
patch to drop the .NET-SDK-implicit `Microsoft.WindowsDesktop.App`
|
`HKCU\…\AppsUseLightTheme` for System mode, subscribes to
|
||||||
framework reference (WinUI 3 doesn't use it).
|
`SystemEvents.UserPreferenceChanged`, persists via
|
||||||
- **Redesigned MainWindow**: 64px rail with brand mark + nav +
|
`UIPreferences.Theme`. `Ctrl+T` toggles dark ↔ light.
|
||||||
engine-status puck; 44px custom title bar absorbing live pills
|
- **v2 main window shell**: default system title bar; 32px header (Wild
|
||||||
(session timer · REC count · disk free) + theme toggle; section header
|
Dragon mark + wordmark left, ⌘K / theme / settings icons right); 40px
|
||||||
with single Primary CTA + Secondary actions; participants list
|
transport strip (`● 02:14:32 PART 4 · LIVE 2 CTRL :9755`); body with
|
||||||
(ItemsRepeater stub pending DataGrid migration) at 64px row height
|
alert banner + update banner + action toolbar + participants
|
||||||
with cyan-left-border active-speaker treatment; conditional slim
|
DataGrid; conditional `IN CALL` meeting bar at bottom; slide-over
|
||||||
in-call control bar; 32px status bar.
|
settings drawer (420px from right) with OUTPUT / NETWORK / APP tabs.
|
||||||
- **ThemeManager service** holds the user theme preference
|
The v1 72px rail, the 380px permanent settings panel, and the
|
||||||
(System / Dark / Light), resolves via UISettings.GetColorValue when
|
six-column footer are gone.
|
||||||
System, broadcasts changes so the AppWindow title-bar buttons stay
|
- **Task 39 — participants table v2**: five columns (24px state LED,
|
||||||
in sync with the visual tree.
|
name + codec caption, 110px audio meter, 130px mono output name, 100px
|
||||||
- **Settings drawer** that slides in from the right (220ms ease-out-quart)
|
ISO pill), 52px rows, full-row active-speaker tint (replaces the v1
|
||||||
with five tabs (Appearance / Routing / Display / Control / Advanced).
|
left-edge stripe).
|
||||||
Appearance tab includes the theme tri-state picker + an accent palette
|
- **Task 40 — Ctrl+K command palette**: `Views/CommandPaletteWindow.xaml`
|
||||||
peek. Replaces the WPF host's 380px permanent settings panel.
|
+ `ViewModels/CommandPaletteViewModel.cs`. Centered 560×360 floating
|
||||||
- **Help / About / Onboarding** as ContentDialog-based surfaces. Help
|
window with fuzzy search across Quick / Teams / Presets / Output /
|
||||||
is the keyboard shortcut cheat sheet; About has Wild Dragon mark +
|
Network / App categories. ↑/↓ navigates, Enter invokes, Esc closes.
|
||||||
version + quick-access folder shortcuts; Onboarding is three numbered
|
- **Interactive HTML preview** at `docs/preview/redesigned-mainwindow.html`
|
||||||
steps for first launch (Install NDI Runtime / Enable Teams NDI / Pick
|
for stakeholders to see the v2 shell.
|
||||||
transcoder topology) with "Don't show again" defaulted on.
|
|
||||||
- **Interactive HTML preview** at `docs/preview/redesigned-mainwindow.html` —
|
|
||||||
faithful single-file render of the WinUI 3 XAML with theme toggle and
|
|
||||||
drawer interaction, so stakeholders can see the redesign before the
|
|
||||||
WinUI 3 build is feature-complete.
|
|
||||||
- **Migration plan** at `docs/superpowers/plans/2026-05-12-winui3-migration.md`
|
|
||||||
with nine phases (scaffold / shell / activation / VM wiring / DataGrid
|
|
||||||
/ secondary windows / hardening / tests / retire-WPF) and a risk
|
|
||||||
register flagging fallback paths.
|
|
||||||
|
|
||||||
The WPF host (`src/TeamsISO.App/`) is unchanged and remains the shipping
|
|
||||||
build until the WinUI 3 build passes a real-meeting smoke test. The
|
|
||||||
view-model layer is unchanged so the WinUI 3 host will reuse it via
|
|
||||||
ProjectReference once view-model wiring lands (Phase 4 of the plan).
|
|
||||||
|
|
||||||
### Added — May 2026 feature batch
|
### Added — May 2026 feature batch
|
||||||
|
|
||||||
|
|
@ -252,14 +243,6 @@ For operators who want to launch TeamsISO and never look at the Teams UI:
|
||||||
- **Recording badge in footer shows elapsed duration** alongside the count
|
- **Recording badge in footer shows elapsed duration** alongside the count
|
||||||
(`REC 3 · 12:45`). Separate timer from the session timer because
|
(`REC 3 · 12:45`). Separate timer from the session timer because
|
||||||
recording can start AFTER the meeting begins.
|
recording can start AFTER the meeting begins.
|
||||||
- **Quick-join Teams meeting from URL** in the IN-CALL bar — paste a
|
|
||||||
`teams.microsoft.com/l/meetup-join/...` or `msteams:/l/meetup-join/...`
|
|
||||||
link, click Join, Teams launches into the meeting in one shot.
|
|
||||||
- **IN-CALL bar surfaces Teams meeting state** — `IN CALL · <meeting title>`
|
|
||||||
/ `READY` / empty. UIA probe at 1Hz for the Leave button, meeting title
|
|
||||||
extracted from Teams' window title with brand suffix stripped.
|
|
||||||
- **Auto-launch Teams + auto-hide windows** preferences for the headless
|
|
||||||
"I only see TeamsISO" workflow.
|
|
||||||
- **MUTED / CAM OFF pills** in the IN-CALL bar — UIA detects whether the
|
- **MUTED / CAM OFF pills** in the IN-CALL bar — UIA detects whether the
|
||||||
local user is muted or has their camera off, surfaces as coral pills.
|
local user is muted or has their camera off, surfaces as coral pills.
|
||||||
Operator with auto-hide knows the local state without restoring Teams.
|
Operator with auto-hide knows the local state without restoring Teams.
|
||||||
|
|
|
||||||
13
DESIGN.md
13
DESIGN.md
|
|
@ -219,9 +219,10 @@ the same job with less visual noise.
|
||||||
|
|
||||||
**Single icon system, one stroke width, one optical size.** The previous GUI
|
**Single icon system, one stroke width, one optical size.** The previous GUI
|
||||||
inlined ~12 bespoke `<Path Data="...">` icons with stroke widths varying
|
inlined ~12 bespoke `<Path Data="...">` icons with stroke widths varying
|
||||||
between 1.2 and 1.6. The redesign uses **WinUI 3's bundled Segoe Fluent Icons
|
between 1.2 and 1.6. The redesign uses **Segoe Fluent Icons font** (shipped
|
||||||
font** as the baseline, with a custom subset added only where a broadcast
|
with Windows 11; falls back to Segoe MDL2 Assets on Windows 10) as the
|
||||||
concept isn't covered (e.g. NDI signal lock, ISO routing state).
|
baseline, with a custom subset added only where a broadcast concept isn't
|
||||||
|
covered (e.g. NDI signal lock, ISO routing state).
|
||||||
|
|
||||||
Sizes: 16 (inline), 20 (button), 24 (rail / hero).
|
Sizes: 16 (inline), 20 (button), 24 (rail / hero).
|
||||||
Stroke: inherited from font; no hand-stroked paths.
|
Stroke: inherited from font; no hand-stroked paths.
|
||||||
|
|
@ -233,8 +234,8 @@ Stroke: inherited from font; no hand-stroked paths.
|
||||||
- Durations: 120ms for affordance feedback, 200ms for panel transitions,
|
- Durations: 120ms for affordance feedback, 200ms for panel transitions,
|
||||||
280ms hero (rarely used).
|
280ms hero (rarely used).
|
||||||
- No bounce. No elastic. No spring overshoots.
|
- No bounce. No elastic. No spring overshoots.
|
||||||
- **Never animate** layout properties. Animate `Translation` and `Opacity`
|
- **Never animate** layout properties. Animate `RenderTransform` and
|
||||||
(WinUI 3's composition layer handles these GPU-cheaply).
|
`Opacity` (WPF's composition layer handles these GPU-cheaply).
|
||||||
|
|
||||||
## Component decisions
|
## Component decisions
|
||||||
|
|
||||||
|
|
@ -329,7 +330,7 @@ no side-stripe borders, no glassmorphism). It does have:
|
||||||
## Migration boundary
|
## Migration boundary
|
||||||
|
|
||||||
The view-model surface in `src/TeamsISO.App/ViewModels/` is the contract.
|
The view-model surface in `src/TeamsISO.App/ViewModels/` is the contract.
|
||||||
The redesign rewrites everything in `Views/` (WinUI 3) but leaves view-model
|
The redesign rewrites `MainWindow.xaml` and `Themes/*` but leaves view-model
|
||||||
properties and commands untouched. Any place where the redesign needs a new
|
properties and commands untouched. Any place where the redesign needs a new
|
||||||
piece of view-model state, the contract widens via additive properties —
|
piece of view-model state, the contract widens via additive properties —
|
||||||
existing bindings keep working until the new view stops needing the old shape.
|
existing bindings keep working until the new view stops needing the old shape.
|
||||||
|
|
|
||||||
140
NEXT_STEPS.md
140
NEXT_STEPS.md
|
|
@ -1,89 +1,81 @@
|
||||||
# Where we left off — v2 "Studio Terminal" shell landed (2026-05-13 night)
|
# Where we left off — v2 "Studio Terminal" shell complete (2026-05-15)
|
||||||
|
|
||||||
## What's done (uncommitted on local main)
|
## What's done on 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.
|
**v2 shape locked.** Approved brief at
|
||||||
|
`docs/shapes/2026-05-13-teamsiso-v2-studio-terminal.md`. Aesthetic
|
||||||
|
register: "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.
|
**WinUI 3 replatform: abandoned.** The early-May scoping concluded that
|
||||||
|
the redesign is purely view-layer (XAML + theme tokens + view-models);
|
||||||
|
doing it in WPF is strictly less work than fighting WinUI 3 activation +
|
||||||
|
DataGrid replacement. The migration plan + bootstrap probe are archived
|
||||||
|
under `docs/archive/` for the record.
|
||||||
|
|
||||||
**Theme system split:**
|
**Shell:**
|
||||||
- `src/TeamsISO.App/Themes/Theme.Dark.xaml` — color brushes only, dark variant
|
- Default Windows title bar (no custom chromeless caption buttons).
|
||||||
- `src/TeamsISO.App/Themes/Theme.Light.xaml` — color brushes only, light variant
|
- 32px header — Wild Dragon mark + "TeamsISO" wordmark left; three icon
|
||||||
- `src/TeamsISO.App/Themes/WildDragonTheme.xaml` — styles + control templates (no color brushes anymore; uses `DynamicResource` for every brush ref)
|
buttons right (⌘K command palette, theme toggle, settings gear).
|
||||||
- `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`.
|
- 40px transport strip — single mono line:
|
||||||
- `App.xaml` merges Theme.Dark.xaml + WildDragonTheme.xaml by default; `App.xaml.cs.OnStartup` calls `ThemeManager.Current.Apply()` before MainWindow shows.
|
`● 02:14:32 PART 4 · LIVE 2 CTRL :9755`. Cyan dot + timer only when
|
||||||
- `UIPreferences.Prefs` record gets a new `Theme = "System"` field (forward-compatible — old json files still load).
|
at least one ISO live.
|
||||||
- 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.
|
- Body — alert banner + update banner + action toolbar + participants
|
||||||
|
DataGrid + (conditional) meeting bar at the bottom.
|
||||||
|
- Settings — slide-over drawer (420px from right) with OUTPUT / NETWORK /
|
||||||
|
APP tabs. Scrim click or Esc dismisses.
|
||||||
|
- v1 leftovers (72px rail, 380px permanent settings panel, six-column
|
||||||
|
footer) are gone.
|
||||||
|
|
||||||
**v2 main window shell:**
|
**Theme system:**
|
||||||
- Default Windows title bar (no more custom chromeless caption buttons — they looked generic and broke on DPI scaling).
|
- `Themes/Theme.Dark.xaml` + `Themes/Theme.Light.xaml` — color brushes
|
||||||
- 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.
|
only.
|
||||||
- 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.
|
- `Themes/WildDragonTheme.xaml` — styles + control templates (no color
|
||||||
- Body: alert banner + update banner + action toolbar (Enable / Refresh / Presets / Stop all + Teams launch/hide icons) + participants DataGrid.
|
brushes; every brush ref is `DynamicResource`).
|
||||||
- Conditional meeting bar at bottom — appears only when `IsTeamsInCall == true`, with Mute / Cam / Leave.
|
- `Services/ThemeManager.cs` — swaps the merged dictionary at runtime;
|
||||||
- 72px left rail: **gone**.
|
reads `HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Themes\Personalize\AppsUseLightTheme`
|
||||||
- 380px permanent settings panel: **gone**.
|
for System mode; subscribes to `SystemEvents.UserPreferenceChanged`;
|
||||||
- Six-column footer: **gone**.
|
persists via `UIPreferences.Theme`.
|
||||||
- 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:**
|
**Task 39 — participants table v2 (LANDED).**
|
||||||
- F1 help, Ctrl+R refresh, Ctrl+Shift+S panic stop, 1–9 / NumPad 1–9 toggle Nth participant — all preserved.
|
Five columns: 24px state LED, name + codec caption, 110px audio meter,
|
||||||
- **Ctrl+T toggle theme (NEW)** — cycles dark ↔ light. Hooked through `MainViewModel.ToggleThemeCommand` → `ThemeManager.Toggle()`.
|
130px mono output name, 100px ISO pill. 52px rows. Full-row
|
||||||
- **Ctrl+K command palette (placeholder)** — currently opens the help dialog. Task 40 replaces this with a real fuzzy-search palette window.
|
active-speaker tint (replaces the v1 left-stripe).
|
||||||
|
|
||||||
**View-model additions (MainViewModel):**
|
**Task 40 — Ctrl+K command palette (LANDED).**
|
||||||
- `ParticipantCount` and `LiveCount` — feed the transport strip's "PART N · LIVE N" readout. Updated on the 1Hz stats tick.
|
`Views/CommandPaletteWindow.xaml` + `ViewModels/CommandPaletteViewModel.cs`
|
||||||
- `ToggleThemeCommand` — wraps `ThemeManager.Current.Toggle()`.
|
ship a centered 560×360 floating window with fuzzy search across Quick /
|
||||||
|
Teams / Presets / Output / Network / App categories. ↑/↓ navigates,
|
||||||
|
Enter invokes, Esc closes. The header ⌘K button and Ctrl+K (also Ctrl+P)
|
||||||
|
keyboard binding both open it.
|
||||||
|
|
||||||
**MainWindow code-behind cleanup:**
|
**Hotkeys:**
|
||||||
- Removed `OnMinimize`, `OnMaximizeRestore`, `OnClose`, `OnWindowStateChanged`, the maximize-icon swap logic (no more custom title bar).
|
- `F1` — help / cheat sheet
|
||||||
- Added `OnCommandPaletteClick`, `OnSettingsScrimClick`, `OnPreviewKeyDown` (Esc to close drawer).
|
- `Ctrl+K` (also `Ctrl+P`) — command palette
|
||||||
- `OnSettingsToggleClick` now toggles `SettingsDrawerOverlay.Visibility` (the slide-over) instead of toggling the v1 right-column width.
|
- `Ctrl+T` — toggle theme (dark ↔ light)
|
||||||
|
- `Ctrl+M` — drop marker into every active recording
|
||||||
|
- `Ctrl+R` — refresh NDI discovery
|
||||||
|
- `Ctrl+Shift+S` — panic-stop every ISO
|
||||||
|
- `1`–`9` / `NumPad 1`–`9` — toggle the Nth visible participant's ISO
|
||||||
|
|
||||||
## To build, push, and demo
|
## What's queued
|
||||||
|
|
||||||
|
Pre-1.0 cut is gated on:
|
||||||
|
1. Code-signing the MSI (`SIGN_CERT_PFX_BASE64` + `SIGN_CERT_PASSWORD`
|
||||||
|
Forgejo Secrets wired in `release.yml`).
|
||||||
|
2. A real-meeting smoke pass on a host with a live NDI runtime.
|
||||||
|
|
||||||
|
## Build + run
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
cd "C:\Users\zacga\Documents\Claude\Projects\Teams ISO"
|
dotnet build TeamsISO.Windows.slnf -c Release
|
||||||
|
|
||||||
# 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
|
.\src\TeamsISO.App\bin\Release\net8.0-windows\TeamsISO.exe
|
||||||
```
|
```
|
||||||
|
|
||||||
In the running app, test:
|
The shipped helpers `build-and-test.ps1` and `commit-and-push.ps1`
|
||||||
1. **Theme toggle** — press `Ctrl+T`. Should swap dark ↔ light without restart. Header colors, surfaces, and text foregrounds all repaint.
|
wrap the build + test + push flow.
|
||||||
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.
|
If something regresses, `1d1ce6a` is the rollback point for the WPF v1
|
||||||
|
shell (recording was axed at that commit), and `c271303` is the v2
|
||||||
## Commit + push when ready
|
shell-without-table-redesign rollback point.
|
||||||
|
|
||||||
```powershell
|
|
||||||
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.
|
|
||||||
|
|
|
||||||
33
README.md
33
README.md
|
|
@ -44,22 +44,21 @@ Pre-1.0. The May 2026 batch is feature-complete; v1.0 cut is gated on
|
||||||
code-signing the MSI and a smoke pass against a real Teams meeting.
|
code-signing the MSI and a smoke pass against a real Teams meeting.
|
||||||
See `CHANGELOG.md` for the [Unreleased] entry.
|
See `CHANGELOG.md` for the [Unreleased] entry.
|
||||||
|
|
||||||
A ground-up GUI redesign is in flight on `main` (see
|
The May 2026 ground-up redesign — the v2 "Studio Terminal" shell — has
|
||||||
`docs/superpowers/plans/2026-05-12-winui3-migration.md`). The WPF host
|
landed on the WPF host (`src/TeamsISO.App/`). A WinUI 3 replatform was
|
||||||
(`src/TeamsISO.App/`) remains the shipping build; a parallel WinUI 3 host
|
explored in early May 2026 and abandoned (activation blockers + redundant
|
||||||
(`src/TeamsISO.App.WinUI/`) is scaffolded with the redesigned MainWindow,
|
work given the redesign is purely XAML / view-layer); the brief lives at
|
||||||
theme system (dark + light), and secondary surfaces. Activation of the
|
`docs/shapes/2026-05-13-teamsiso-v2-studio-terminal.md`, and the
|
||||||
unpackaged WinUI 3 .exe is the current blocker — diagnostics in the
|
abandoned migration plan + bootstrap probe are archived under
|
||||||
migration plan's Phase 3.
|
`docs/archive/`.
|
||||||
|
|
||||||
## Build
|
## Build
|
||||||
|
|
||||||
Requires .NET 8 SDK on Windows. The repo has two hosts:
|
Requires .NET 8 SDK on Windows. WPF is the only host:
|
||||||
|
|
||||||
- `src/TeamsISO.App` — WPF, `net8.0-windows`, current shipping build
|
- `src/TeamsISO.App` — WPF, `net8.0-windows`, the shipping build
|
||||||
- `src/TeamsISO.App.WinUI` — WinUI 3, `net8.0-windows10.0.19041.0`, in-flight
|
|
||||||
|
|
||||||
Both build together from the solution filter:
|
Build from the solution filter:
|
||||||
|
|
||||||
dotnet restore TeamsISO.Windows.slnf
|
dotnet restore TeamsISO.Windows.slnf
|
||||||
dotnet build TeamsISO.Windows.slnf -c Release
|
dotnet build TeamsISO.Windows.slnf -c Release
|
||||||
|
|
@ -80,21 +79,21 @@ The shipped helper scripts in the repo root automate this:
|
||||||
- [Embedded Teams orchestration spec](docs/superpowers/specs/2026-05-08-embedded-teams-orchestration.md)
|
- [Embedded Teams orchestration spec](docs/superpowers/specs/2026-05-08-embedded-teams-orchestration.md)
|
||||||
— Phase E roadmap.
|
— Phase E roadmap.
|
||||||
- [Redesign brief](PRODUCT.md) + [design system](DESIGN.md) — token-level
|
- [Redesign brief](PRODUCT.md) + [design system](DESIGN.md) — token-level
|
||||||
spec for the in-flight WinUI 3 redesign.
|
spec for the v2 "Studio Terminal" redesign.
|
||||||
- [WinUI 3 migration plan](docs/superpowers/plans/2026-05-12-winui3-migration.md)
|
- [v2 shape brief](docs/shapes/2026-05-13-teamsiso-v2-studio-terminal.md) —
|
||||||
— nine-phase plan covering scaffold through retiring the WPF host.
|
approved aesthetic + IA for the May 2026 WPF rebuild.
|
||||||
- [Interactive redesign preview](docs/preview/redesigned-mainwindow.html) —
|
|
||||||
open in any browser to see and toggle the redesigned MainWindow before
|
|
||||||
the WinUI 3 binary lands.
|
|
||||||
|
|
||||||
## Keyboard shortcuts
|
## Keyboard shortcuts
|
||||||
|
|
||||||
| Key | Action |
|
| Key | Action |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| `F1` | Open help / cheat sheet |
|
| `F1` | Open help / cheat sheet |
|
||||||
|
| `Ctrl + K` | Open the command palette (also `Ctrl + P`) |
|
||||||
|
| `Ctrl + T` | Toggle theme (dark ↔ light) |
|
||||||
| `Ctrl + M` | Drop a timestamped marker into every active recording |
|
| `Ctrl + M` | Drop a timestamped marker into every active recording |
|
||||||
| `Ctrl + Shift + S` | Stop every running ISO (emergency) |
|
| `Ctrl + Shift + S` | Stop every running ISO (emergency) |
|
||||||
| `Ctrl + R` | Refresh NDI discovery (rebuild finder) |
|
| `Ctrl + R` | Refresh NDI discovery (rebuild finder) |
|
||||||
|
| `1`–`9` / `NumPad 1`–`9` | Toggle the Nth visible participant's ISO |
|
||||||
|
|
||||||
## File locations
|
## File locations
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,6 @@
|
||||||
"src\\TeamsISO.Engine.NdiInterop\\TeamsISO.Engine.NdiInterop.csproj",
|
"src\\TeamsISO.Engine.NdiInterop\\TeamsISO.Engine.NdiInterop.csproj",
|
||||||
"src\\TeamsISO.Console\\TeamsISO.Console.csproj",
|
"src\\TeamsISO.Console\\TeamsISO.Console.csproj",
|
||||||
"src\\TeamsISO.App\\TeamsISO.App.csproj",
|
"src\\TeamsISO.App\\TeamsISO.App.csproj",
|
||||||
"src\\TeamsISO.App.WinUI\\TeamsISO.App.WinUI.csproj",
|
|
||||||
"src\\tests\\TeamsISO.Engine.Tests\\TeamsISO.Engine.Tests.csproj",
|
"src\\tests\\TeamsISO.Engine.Tests\\TeamsISO.Engine.Tests.csproj",
|
||||||
"src\\tests\\TeamsISO.Engine.IntegrationTests\\TeamsISO.Engine.IntegrationTests.csproj",
|
"src\\tests\\TeamsISO.Engine.IntegrationTests\\TeamsISO.Engine.IntegrationTests.csproj",
|
||||||
"src\\tests\\TeamsISO.App.Tests\\TeamsISO.App.Tests.csproj"
|
"src\\tests\\TeamsISO.App.Tests\\TeamsISO.App.Tests.csproj"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue