Skip to content

Commit 92d1618

Browse files
committed
design and docs
1 parent 23f8589 commit 92d1618

38 files changed

+1001
-445
lines changed

AGENTS.md

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@ Stack: `.NET 10`, Blazor WebAssembly, Razor Class Library, xUnit, bUnit, Playwri
88
`PrompterOne` is a standalone browser-first WebAssembly app.
99

1010
- `src/PrompterOne.App` is the only runnable host.
11-
- `src/PrompterOne.Shared` contains routed Razor UI, exact `new-design` styling, and browser interop.
11+
- `src/PrompterOne.Shared` contains routed Razor UI, exact `design` styling, and browser interop.
1212
- `src/PrompterOne.Core` contains TPS, RSVP, preview, workspace, media-scene, and streaming domain logic.
1313
- `tests/` contains all automated test projects.
14-
- `new-design/` is the visual and interaction source of truth.
14+
- `design/` is the visual and interaction source of truth.
1515

1616
There is no backend in the runtime shape. The app must boot directly in the browser from the WebAssembly host.
1717

@@ -289,10 +289,10 @@ Repo-specific design rules:
289289
- Keep shared build settings in `Directory.Build.props`.
290290
- Keep shared package versions in `Directory.Packages.props`.
291291
- Keep the pinned SDK version in `global.json`.
292-
- Treat `new-design/index.html`, `new-design/tokens.css`, `new-design/components.css`, `new-design/styles.css`, and `new-design/app.js` as the exact design reference.
293-
- Treat every file under `new-design/` as a static design/prototype reference only. Production UI must be implemented as Blazor components in `src/PrompterOne.Shared`; do not ship raw `new-design` HTML as runtime UI.
294-
- Do not re-invent the UI when the answer should be “port the markup and classes from `new-design`”.
295-
- For parity tasks, port the full routed screen from its matching `new-design/*.html` reference, not just isolated high-signal blocks. Settings, Editor, Learn, Teleprompter, and Go Live must match the reference screen in layout and intended interaction while staying Blazor/C# owned.
292+
- Treat `design/index.html`, `design/tokens.css`, `design/components.css`, `design/styles.css`, and `design/app.js` as the exact design reference.
293+
- Treat every file under `design/` as a static design/prototype reference only. Production UI must be implemented as Blazor components in `src/PrompterOne.Shared`; do not ship raw `design` HTML as runtime UI.
294+
- Do not re-invent the UI when the answer should be “port the markup and classes from `design`”.
295+
- For parity tasks, port the full routed screen from its matching `design/*.html` reference, not just isolated high-signal blocks. Settings, Editor, Learn, Teleprompter, and Go Live must match the reference screen in layout and intended interaction while staying Blazor/C# owned.
296296
- About content must stay factual and current: do not invent team members or contributor names; use Managed Code attribution and official company links only.
297297
- Do not introduce a server host for the app runtime.
298298
- Preserve stable `data-testid` selectors on core flows because the Playwright suite depends on them.
@@ -305,7 +305,7 @@ Repo-specific design rules:
305305
- Any vendored runtime JavaScript SDK that tracks an upstream GitHub repo MUST have an automated watcher job that checks new GitHub releases and opens a repo issue describing the required update when a newer release appears.
306306
- Teleprompter TPS speed modifiers MUST affect both playback timing and subtle word- or phrase-level letter spacing, so slower spans open up slightly and faster spans tighten slightly without hurting readability.
307307
- Teleprompter reader word styling MUST mirror TPS/editor inline semantics: explicit inline TPS tags control per-word emphasis and color, while section or block emotion sets card context and must not recolor every reader word.
308-
- Teleprompter block transitions MUST stay visually consistent: outgoing cards move upward and incoming cards rise from below in the same direction every time; alternating up/down travel is forbidden.
308+
- Teleprompter block transitions MUST stay visually consistent: outgoing cards move upward and incoming cards rise from below in the same direction every time; alternating up/down travel is forbidden, and extra settling, bounce, or intermediate card states are forbidden.
309309
- Learn and Teleprompter are separate screens with separate style ownership; do not bundle RSVP and teleprompter reader feature styles into one shared screen stylesheet or let one page inherit the other page's visual treatment.
310310
- User preferences persistence MUST sit behind a platform-agnostic user-settings abstraction, with browser storage implemented via local storage and room for other platform-specific implementations; theme, teleprompter layout preferences, camera/scene preferences, and similar saved settings belong there instead of ad-hoc feature stores.
311311
- Build quality gates must stay green under `-warnaserror`.
@@ -351,7 +351,7 @@ Ask first:
351351

352352
### Likes
353353

354-
- exact fidelity with `new-design`
354+
- exact fidelity with `design`
355355
- thin WASM host boundaries
356356
- browser-realistic UI verification
357357
- domain logic that stays reusable and serializable
@@ -364,13 +364,14 @@ Ask first:
364364
- progress updates that imply a fix is done before there is concrete implementation and verification evidence; keep status factual and let the user verify final behavior personally
365365
- automated test or coverage runs for UI-behavior fixes before the user has manually checked the change locally; wait for the user's confirmation before resuming automation
366366
- mixed-language root README or public entry docs; keep them English-only unless the user explicitly asks otherwise
367-
- design drift from `new-design`
367+
- design drift from `design`
368368
- made-up About/team content or stale attribution; About must point to real Managed Code ownership and official links
369369
- any visible typing latency in the editor; plain input must feel immediate with no observable delay
370370
- teleprompter controls that fade so much they become hard to see during real reading
371-
- teleprompter paragraph repositioning or per-word vertical transform updates that make the text jump; `new-design/teleprompter.html` motion is the required reference
371+
- teleprompter paragraph repositioning, line hopping, or per-word vertical transform updates that make the text jump; `design/teleprompter.html` motion is the required reference, with steady bottom-to-top movement and no extra animation layers beyond the reference
372372
- any green teleprompter shell or background treatment; Teleprompter must stay on its dark reader palette and use emotion only for accents, not green screen-wide fills
373373
- Learn and Teleprompter style boundaries bleeding through a shared feature stylesheet; their visuals must stay isolated by page-owned style manifests
374+
- Learn RSVP compositions that shift when shorter or longer words render; changing word length must not move the overall RSVP component or its anchored centerline
374375
- teleprompter camera starting enabled by default; default reader startup should keep the camera off until the user explicitly enables it
375376
- editor keystroke paths that persist, compile, or rebuild shared session state; keep plain typing in memory and move heavier local sync to debounce or autosave
376377
- murky JavaScript or interop layers that keep product UI behavior in JS when Blazor can own it cleanly

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ Architecture map: [docs/Architecture.md](docs/Architecture.md)
2727
## Key Properties
2828

2929
- standalone Blazor WebAssembly runtime with no server backend
30-
- UI ported from [`new-design/`](new-design/) as the design source of truth
30+
- UI ported from [`design/`](design/) as the design source of truth
3131
- TPS-focused editor for prompt-ready scripts
3232
- RSVP/Learn mode with ORP-style word rendering
3333
- browser-side media scene, device setup, and live preview
@@ -54,7 +54,7 @@ Canonical inspiration: [cameron/squirt](https://github.com/cameron/squirt)
5454
- routed UI, CSS, browser interop: [`src/PrompterOne.Shared`](src/PrompterOne.Shared)
5555
- reusable domain logic: [`src/PrompterOne.Core`](src/PrompterOne.Core)
5656
- automated tests: [`tests/`](tests/)
57-
- visual reference: [`new-design/`](new-design/)
57+
- visual reference: [`design/`](design/)
5858

5959
Further reading:
6060

docs/ADR/ADR-0002-go-live-operational-studio-surface.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ Related Features: [Go Live Runtime](/Users/ksemenenko/Developer/PrompterOne/docs
66

77
## Implementation plan (step-by-step)
88

9-
- [x] Audit the existing routed `Go Live` page against `new-design/golive.html`.
9+
- [x] Audit the existing routed `Go Live` page against `design/golive.html`.
1010
- [x] Replace the design drifted routing form layout with a studio shell that matches the design rails and canvas.
1111
- [x] Bind the studio shell to real browser media state, real scene cameras, and honest destination readiness summaries.
1212
- [x] Keep detailed provider setup in `Settings` and reduce `Go Live` to operational toggles plus links back to setup.
@@ -16,13 +16,13 @@ Related Features: [Go Live Runtime](/Users/ksemenenko/Developer/PrompterOne/docs
1616
## Context
1717

1818
- The prior `Go Live` page mixed an operational studio surface with a large lower deck of inline provider forms.
19-
- That shape diverged from `new-design/golive.html`, pushed the most important controls below the fold, and encouraged duplicate ownership of provider credentials between `Go Live` and `Settings`.
19+
- That shape diverged from `design/golive.html`, pushed the most important controls below the fold, and encouraged duplicate ownership of provider credentials between `Go Live` and `Settings`.
2020
- The product already has browser media services, scene state, output runtime services, and persisted provider settings. The problem was not missing capability; it was a blurred page contract.
2121
- The user explicitly asked for a real `Go Live` studio with camera switching, live preview, honest data, and design fidelity instead of a fake or placeholder surface.
2222

2323
Goals:
2424

25-
- Keep `Go Live` visually faithful to `new-design/golive.html`.
25+
- Keep `Go Live` visually faithful to `design/golive.html`.
2626
- Make `Go Live` operational, not administrative.
2727
- Keep live status, room state, and destination readiness truthful to what the browser runtime actually knows.
2828
- Cover the main studio flow with automated component and browser tests.
@@ -157,6 +157,6 @@ flowchart LR
157157

158158
## References
159159

160-
- [new-design/golive.html](/Users/ksemenenko/Developer/PrompterOne/new-design/golive.html)
160+
- [design/golive.html](/Users/ksemenenko/Developer/PrompterOne/design/golive.html)
161161
- [docs/Features/GoLiveRuntime.md](/Users/ksemenenko/Developer/PrompterOne/docs/Features/GoLiveRuntime.md)
162162
- [docs/Architecture.md](/Users/ksemenenko/Developer/PrompterOne/docs/Architecture.md)

docs/Architecture.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
The acceptance target is a browser-only runtime that:
88

9-
- matches the local `new-design/` UI closely
9+
- matches the local `design/` UI closely
1010
- parses and exports TPS content
1111
- supports RSVP learn mode and teleprompter reading mode
1212
- keeps media, scene, and streaming state client-side
@@ -49,7 +49,7 @@ flowchart LR
4949
App["src/PrompterOne.App<br/>Standalone WASM host"]
5050
Shared["src/PrompterOne.Shared<br/>Razor pages, layout, CSS, JS interop"]
5151
Core["src/PrompterOne.Core<br/>TPS, RSVP, workspace, media, streaming"]
52-
NewDesign["new-design/<br/>HTML/CSS/JS reference + parser sources"]
52+
NewDesign["design/<br/>HTML/CSS/JS reference + parser sources"]
5353
Tests["tests/*<br/>xUnit + bUnit + Playwright"]
5454
5555
App --> Shared
@@ -71,8 +71,8 @@ flowchart LR
7171

7272
### UI Design Principles
7373

74-
- `new-design/` is the visual source of truth for layout, hierarchy, spacing, controls, color direction, and interaction tone.
75-
- UI work should port markup, structure, and class intent from `new-design/` instead of inventing a parallel design language.
74+
- `design/` is the visual source of truth for layout, hierarchy, spacing, controls, color direction, and interaction tone.
75+
- UI work should port markup, structure, and class intent from `design/` instead of inventing a parallel design language.
7676
- Routed screens should keep strong visual identities while still using the shared shell and contracts from `AppShell`.
7777
- Stable `data-testid` hooks are part of the UI contract, not optional test-only extras.
7878
- Browser-first behavior matters more than server assumptions. Media, storage, and stream state stay client-side.
@@ -366,7 +366,7 @@ If a native embedded browser host returns later, media access must not rely on s
366366
- routed Razor screens: `library`, `editor`, `learn`, `teleprompter`, `go-live`, `settings`
367367
- vertical slices own their routed pages, components, renderers, and feature-local services under folders such as `Editor/`, `Library/`, `Teleprompter/`, and `GoLive/`
368368
- only true cross-cutting UI assets stay outside feature slices: `Contracts/`, `Localization/`, `wwwroot/`, root bootstrap files, and `AppShell/`
369-
- exact design shell and imported `new-design` assets
369+
- exact design shell and imported `design` assets
370370
- shared UI localization catalog for supported browser cultures
371371
- browser interop and app DI wiring
372372
- browser-backed `IUserSettingsStore` wiring for persisted reader, theme, scene, and studio preferences
@@ -381,7 +381,7 @@ If a native embedded browser host returns later, media access must not rely on s
381381

382382
Rules:
383383

384-
- keep markup aligned with `new-design`
384+
- keep markup aligned with `design`
385385
- do not move business logic here if it belongs in `Core`
386386
- preserve `data-testid` selectors for browser tests
387387

docs/Features/GoLiveRuntime.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@
66

77
The current page layout is a production-style studio surface:
88

9-
- top session bar follows `new-design/golive.html`: back to Read, script title + session badge, centered session timer, panel toggles, mode switch, settings shortcut, REC, and the main stream action on the far right
10-
- the studio shell follows the same three-column grid as `new-design/golive.html`: a compact left input rail, a dominant center canvas/program stage, and a dedicated right operational rail
9+
- the routed `Go Live` page owns its own studio chrome and suppresses the shared app header while the route is active, so `design/golive.html` remains the only topbar on that screen
10+
- top session bar follows `design/golive.html`: back to Read, script title + session badge, centered session timer, panel toggles, mode switch, settings shortcut, REC, and the main stream action on the far right
11+
- the studio shell follows the same three-column grid as `design/golive.html`: a compact left input rail, a dominant center canvas/program stage, and a dedicated right operational rail
1112
- left input rail for scene cameras, add-camera action, utility sources, and microphone route status
1213
- center program stage for the selected program source and current script/session state
1314
- scene controls bar for scene chips, layout controls, transitions, and the primary `Take To Air` action
@@ -184,6 +185,7 @@ flowchart LR
184185
- `Go Live` must auto-seed the first available browser camera into the scene when the scene is empty and devices are available.
185186
- `Go Live` must show the selected program source in the center monitor and the currently on-air source in the right preview rail until the operator explicitly takes the selected source live.
186187
- `Go Live` must show a stable empty preview state instead of mounting camera interop when the current scene has no cameras.
188+
- the routed `Go Live` page must not stack the shared app header above the studio topbar; the studio topbar is the only route chrome on that screen
187189
- any shared `Go Live` localized copy must come from `PrompterOne.Shared.Localization.UiTextCatalog`, so supported browser cultures localize the studio surface without feature-local string copies.
188190
- quick destination cards must only expose honest readiness summaries and arm/disarm toggles; fake in-page credential editors are forbidden on the operational studio surface
189191
- legacy streaming settings must normalize to the current included program cameras so existing browser storage keeps working

0 commit comments

Comments
 (0)