A steno pad is the reporter's notebook — narrow, ruled down the middle, made for shorthand taken at the speed of speech.
A fully-local meeting recorder, transcriber and minute-taker that runs in your browser.
Records your microphone and whatever your Mac is playing (Teams, Zoom, Meet, in-person), transcribes it with a local speech model, and writes meeting minutes with a local LLM. Nothing leaves your machine.
uv run stenopad-web
A tab opens at http://127.0.0.1:8477. That is the entire installation.
This is a port of the Tauri desktop build. The ML core, the React UI and the native audio-capture helper are unchanged; the Rust shell, the PyInstaller bundle, the DMG, the code-signing and the Gatekeeper dance are gone.
| Desktop (v0.1) | Web (v0.2) | |
|---|---|---|
| Shell | Tauri 2 + Rust (2 097 LOC) | FastAPI (909 LOC) |
| Frontend ↔ backend | Tauri invoke + 32 contract tests | one WebSocket, same JSON protocol |
| Install | build → sign → notarise → DMG → drag → xattr -dr | uv run stenopad-web, or make app for a 1.0 GB .app |
| Update | rebuild + redistribute a 385 MB DMG | git pull |
Two paths, because browsers cannot tap another application's audio:
native/stenopad-audio — a 288 KB Swift
binary using the Core Audio process-tap API (macOS 14.4+). Captures the
microphone on the left channel and system audio on the right, with no
picker dialog, including the Teams desktop app. The Python server
spawns it and speaks JSON-lines over stdio.getUserMedia for the mic plus
getDisplayMedia for a shared tab's audio. Works anywhere Chrome or Edge
runs, but only captures meetings joined in a browser tab, and the user
must pick the tab and tick "Share tab audio" each time.uvllama-server against the GGUF it downloadeddocs/ARCHITECTURE.md — how the pieces fitdocs/PORT.md — what changed from the Tauri build and whydocs/CURRENT_STATE.md — what works today, what does notdocs/DESIGN.md — the design system, and the references it is grounded indocs/adr/ — the decisions, and the alternatives that lostAGENTS.md — conventions for working in this repoMIT — see LICENSE.
2 commits
Python
55.5%
TypeScript
32.6%
CSS
6.3%
Swift
5.1%
A steno pad is the reporter's notebook — narrow, ruled down the middle, made for shorthand taken at the speed of speech.
A fully-local meeting recorder, transcriber and minute-taker that runs in your browser.
Records your microphone and whatever your Mac is playing (Teams, Zoom, Meet, in-person), transcribes it with a local speech model, and writes meeting minutes with a local LLM. Nothing leaves your machine.
uv run stenopad-web
A tab opens at http://127.0.0.1:8477. That is the entire installation.
This is a port of the Tauri desktop build. The ML core, the React UI and the native audio-capture helper are unchanged; the Rust shell, the PyInstaller bundle, the DMG, the code-signing and the Gatekeeper dance are gone.
| Desktop (v0.1) | Web (v0.2) | |
|---|---|---|
| Shell | Tauri 2 + Rust (2 097 LOC) | FastAPI (909 LOC) |
| Frontend ↔ backend | Tauri invoke + 32 contract tests | one WebSocket, same JSON protocol |
| Install | build → sign → notarise → DMG → drag → xattr -dr | uv run stenopad-web, or make app for a 1.0 GB .app |
| Update | rebuild + redistribute a 385 MB DMG | git pull |
Two paths, because browsers cannot tap another application's audio:
native/stenopad-audio — a 288 KB Swift
binary using the Core Audio process-tap API (macOS 14.4+). Captures the
microphone on the left channel and system audio on the right, with no
picker dialog, including the Teams desktop app. The Python server
spawns it and speaks JSON-lines over stdio.getUserMedia for the mic plus
getDisplayMedia for a shared tab's audio. Works anywhere Chrome or Edge
runs, but only captures meetings joined in a browser tab, and the user
must pick the tab and tick "Share tab audio" each time.uvllama-server against the GGUF it downloadeddocs/ARCHITECTURE.md — how the pieces fitdocs/PORT.md — what changed from the Tauri build and whydocs/CURRENT_STATE.md — what works today, what does notdocs/DESIGN.md — the design system, and the references it is grounded indocs/adr/ — the decisions, and the alternatives that lostAGENTS.md — conventions for working in this repoMIT — see LICENSE.
2 commits
Python
55.5%
TypeScript
32.6%
CSS
6.3%
Swift
5.1%