PrompterLive is a browser-first teleprompter and rehearsal tool for authors, speakers, streamers, editors, and production teams.
It is not a server product and not a desktop wrapper. The current runtime shape is a standalone Blazor WebAssembly app that boots directly in the browser, stores working state on the client, uses browser camera and microphone APIs, and can publish its WebAssembly build to GitHub Pages.
- GitHub Pages target: https://managedcode.github.io/PrompterLive/
- Publish workflow:
.github/workflows/deploy-github-pages.yml
PrompterLive is published as a repository Pages site. After the publish workflow runs, the WebAssembly artifact is served as a static site with no separate backend.
PrompterLive combines several workflows into a single product:
Libraryfor script and folder managementEditorfor TPS authoring and speech-structure editingLearnfor RSVP rehearsal modeTeleprompterfor the classic reading surfaceGo Livefor browser-side live output, preview, and routingSettingsfor camera, microphone, theme, and runtime preferences
Architecture map: docs/Architecture.md
- standalone Blazor WebAssembly runtime with no server backend
- UI ported from
new-design/as the design source of truth - TPS-focused editor for prompt-ready scripts
- RSVP/Learn mode with ORP-style word rendering
- browser-side media scene, device setup, and live preview
- Go Live runtime with LiveKit and VDO.Ninja outputs
- browser-local document and settings storage
- browser-realistic acceptance tests through Playwright
PrompterLive does not visually copy Squirt, but the Learn mode is directly inspired by the RSVP logic and pacing approach behind Squirt-style readers.
In practice that means:
- ORP-style focus on a key letter inside each word
- word timing that reacts to word length and punctuation
- natural pauses after commas, periods, and stronger phrase boundaries
- a custom UI and layout adapted to
PrompterLive, not a raw Squirt clone
Canonical inspiration: cameron/squirt
- host:
src/PrompterLive.App - routed UI, CSS, browser interop:
src/PrompterLive.Shared - reusable domain logic:
src/PrompterLive.Core - automated tests:
tests/ - visual reference:
new-design/
Further reading:
- architecture: docs/Architecture.md
- settings media feedback: docs/Features/SettingsMediaFeedback.md
- go live runtime: docs/Features/GoLiveRuntime.md
- vendored streaming SDK policy: docs/Features/VendoredStreamingSdkReleases.md
- versioning and Pages publish: docs/Features/AppVersioningAndGitHubPages.md
The app version is shown in Settings > About.
Current scheme:
- local builds:
0.1.0 - CI builds:
0.1.<github.run_number>
Version source of truth:
Versioning and Pages workflow details: docs/Features/AppVersioningAndGitHubPages.md
Requirements:
Run:
cd src/PrompterLive.App
dotnet runUseful commands:
dotnet build /Users/ksemenenko/Developer/PrompterLive/PrompterLive.slnx -warnaserror
dotnet test /Users/ksemenenko/Developer/PrompterLive/PrompterLive.slnx
dotnet format /Users/ksemenenko/Developer/PrompterLive/PrompterLive.slnx
dotnet test /Users/ksemenenko/Developer/PrompterLive/PrompterLive.slnx --collect:"XPlat Code Coverage"Publish runs through the GitHub Actions workflow:
What it does:
- builds
src/PrompterLive.App - injects the CI build number into the app version
- takes the published
wwwroot - rewrites
base hreffor the repository Pages path - adds
404.htmlfor client-side routing - deploys the artifact to GitHub Pages
Official platform reference: GitHub Pages
- .NET 10
- Blazor
- Razor Class Library
- xUnit
- bUnit
- Playwright
PrompterLive is a browser-first media app, so it relies on standard Web APIs and a thin interop layer:
Integrated streaming and media projects:
- LiveKit
docs: Connecting to LiveKit
repo: livekit/client-sdk-js - VDO.Ninja
repo: steveseguin/vdo.ninja
Pinned vendored SDK policy and version tracking:
Currently pinned in the repository:
livekit/client-sdk-jsv2.18.0steveseguin/vdo.ninjav29.0
These are the external projects, APIs, and references that PrompterLive builds on:
- LiveKit
- LiveKit connection docs
- livekit/client-sdk-js
- VDO.Ninja
- steveseguin/vdo.ninja
- WebRTC API
getUserMedia()- MediaRecorder
- Web Audio API
If we missed someone in the credits, open an issue or PR and add the attribution explicitly instead of leaving the dependency implicit.
This project is licensed under MIT.