A runnable, self-hosted web interface so the whole workflow can be tested end to
end: record or upload audio in the browser, watch it transcribe and summarise,
browse a library, play back, and export.
What changed:
- server/app/store.py: SQLite + on-disk audio storage for recordings (stdlib only).
- server/app/pipeline.py: background task audio -> transcribe -> summarise via the
existing provider layer, updating status (queued/transcribing/summarising/done/error).
- server/app/main.py: web API - POST upload, list, detail, audio (Range), delete, and
export (txt/md/srt/vtt/json) - and serves the SPA at /.
- server/app/web/: Plaud-style single-page UI (index.html, styles.css, app.js). Sidebar
library, in-browser recording (MediaRecorder) + file upload, live status polling,
audio player, summary (overview/key points/actions), timestamped transcript, exports.
- server/Dockerfile + README: two-minute run instructions (default provider: Groq free
tier for both Whisper + LLM), and a Docker option.
- config: env prefix switched OPENSCRIBE_ -> NIGHTJAR_ to match the brand and the site
tutorials; .env.example rewritten with a ready Groq quick-start.
- state/TODO: web app recorded as done.
Why:
- User asked for a Plaud-like web interface to test how it all works. Nothing testable
existed before (marketing site is a brochure; pipeline was unwired). This delivers a
real, runnable product demo and effectively lands M5/M6 for the HTTP providers.
Notes:
- Slim by design: AI is offloaded to the configured provider, so no local ML deps needed
for the demo. Byte-compiles clean; JS passes node --check. Local faster-whisper still
needs its model (M5) for the fully-offline path.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>