Desktop App
Vocal Teleprompter
Desktop app that listens to the speaker in real time and scrolls the script automatically to match. Built with Tauri (Rust + React) — lightweight native binary with a web-based UI. Uses the Web Speech API with fuzzy word matching to track position in the text.
The Problem
Recording video content while reading a script requires either memorizing it or manually scrolling — both options break the reading flow. I wanted a teleprompter that tracks my voice and scrolls automatically, so I never have to look away or touch the keyboard. The hard part isn't the scrolling; it's making the speech-to-position tracking reliable enough that it doesn't fall out of sync.
Key Decisions
Tauri over Electron for the desktop shell
Electron bundles a full Chromium instance, which means a binary over 100MB and memory usage that competes with a browser tab. Tauri uses the OS's native webview (WebView2 on Windows, WKWebView on macOS), resulting in a ~3MB binary and significantly lower RAM usage. For a simple utility app that runs in the background during recordings, that weight difference matters.
Web Speech API over local Whisper or a cloud STT service
The use case is live, real-time reading — latency is the primary constraint, not accuracy. Local Whisper adds 1–2 seconds of processing delay per audio chunk, which makes the scroll lag visibly behind the voice. Cloud services add network round-trip latency and cost per minute. The Web Speech API is streaming and fires word-by-word as you speak, which is exactly what a teleprompter needs. The tradeoff is it requires an internet connection, but that's acceptable.
Fuzzy word matching instead of exact string matching for position tracking
Exact matching breaks constantly in practice: the speaker hesitates, inserts filler words, mispronounces a technical term, or the STT returns a near-miss transcription. A fuzzy matcher using Levenshtein distance on a sliding window of the next expected words finds the most likely current position even when the transcription isn't perfect. This made the difference between a demo that works in ideal conditions and one that works during an actual recording session.
Outcome
The app is stable and I use it for my own recordings. The fuzzy matching approach proved the most important design decision — exact matching would have made the tracker fall out of sync within the first 30 seconds of any real session. The project also gave me a practical introduction to Tauri's architecture and the boundary between the Rust backend and the React frontend.
Highlights
- —Real-time speech recognition via Web Speech API
- —Fuzzy word matching — tolerant to mispronunciations and variations
- —Word-level highlighting with smooth auto-scroll
- —Multilanguage support and microphone selection
- —Tauri desktop app: native binary, no Electron overhead