Commit

3dead6d

mattpocock-skills is already installed as a plugin here. For the per-repo setup, my defaults: 1. Issues: GitHub Issues on dtinth/live-speech 2. Triage labels: the default five 3. Docs: single GLOSSARY.md + docs/adr/ 4. Agent file: AGENTS.md (with CLAUDE.md pointing to it) OK, or…
All agree. More re.directions: - Have a simple web interface. Admin can create room. To create room requires a master password from env file. - Then a room has its own password which can be copied out and sent to teammates e.g. to the audio crew for streaming.
Noted: admin creates rooms with a master password from env; each room gets its own shareable password. Writing setup files now. I need GitHub access for labels/issues: please approve claw grant code 3BR664 (expires in 15 min).
Setup is committed locally on v2 (AGENTS.md, CLAUDE.md, docs/agents/). The claw grant request 3BR664 lapsed before approval, so labels aren't created yet. Want me to request a new code?
Grant approved, thanks. Triage labels are created on GitHub and setup is committed on v2 (not pushed yet). Next: push v2, then turn your directions into a spec issue? I'd grill you on open questions first, e.g. "server-side VAD": our server, or Qwen's server_vad mode?
Please push for server-side VAD. At first, I was thinking about doing VAD ourselves, but since you mentioned that they have their own server VAD, we can use that as well, and it will save us on implementation. In the future, we may be supporting multiple transcription models.…
Bun it is: bun:sqlite, Bun.serve WebSockets, a Dockerfile with one data volume for Dokploy. Next: frontend. Default is React via Bun's HTML imports, served by the same process (no separate build server). OK?
Ok as long as we can deploy new server version robustly. Existing connection can cut, but can recover with no data loss. I also have a Sockudo instance, maybe viewers can get notified of changes through it instead? What do you think?
Good idea. Viewers stay connected while our server redeploys, and fan-out is off our process. Plan: viewer loads a snapshot over HTTP, then applies Sockudo events carrying a sequence number; on a gap or reconnect it refetches. Sender still talks WS to us directly. Sound right?
Next: should the sender's local buffer survive a tab reload or browser crash? Default: write chunks to IndexedDB, so a reopened sender page resumes uploading what the server hasn't acked, and old acked chunks get pruned.
Yes, but it is possible that we will be streaming for the whole day. So just make sure we don't run into problems with the storage space on the browser
Raw PCM is ~115 MB/hour, so a day would be over 1 GB. But acked chunks are deleted right away, so the browser only holds the unsent backlog. The sender shows the backlog size and warns as it nears the browser's quota.
Next: the transcript. Default: a list of segments, each tied to an audio time range, so any segment can be re-transcribed or LLM-cleaned later and replayed as audio. Should admins also be able to hand-edit text live?
Yes, it should also provide a simple REST-based API so that the admin can hand it over to the AI agent to edit. Let's aim for an append-only architecture so that we can recover from bad edits. To reclaim the storage space on the server, we can delete the room as a whole after…
Timestamps: qwen3-asr-flash-realtime gives none on transcripts, but its server VAD emits speech_started/stopped with audio_start_ms/audio_end_ms, so we get segment-level times. qwen-audio-3.1-asr-flash-streaming has word-level begin/end times. Both take opus input.

commit 3dead6d

Clock sync idea: ignore the client wall clock. A stream gets a random id; chunk n is at stream offset n*100ms. While connected, client pings with its elapsed time since stream start (monotonic); server estimates stream start in server time from the lowest-RTT ping. Good?