Live Brainstorm
A real-time collaborative word cloud powered by DJI wireless mics and ElevenLabs Scribe v2 live transcription.
Clip on a DJI wireless mic and watch a real-time, color-coded word cloud grow on a shareable screen. Audio stays in the browser; only transcribed words reach the server. Two speakers map to L/R stereo channels, each feeds ElevenLabs live transcription, and deltas fan out to everyone watching.
- TypeScript
- React 18
- Fastify 5
- WebSocket
- Canvas 2D
- d3-force
- d3-scale
- ElevenLabs Scribe v2 Realtime
- Vite
- Tailwind CSS
The core flow is dead simple: host opens the app on the machine plugged into the DJI receiver, taps each TX transmitter to bind L/R channels to speakers, then goes live. The browser captures stereo audio, split into two independent channels, each streamed straight to ElevenLabs' Scribe v2 Realtime API. Committed transcripts land on a Fastify WebSocket server which tokenizes, counts words per speaker, and broadcasts deltas to all connected viewers. Audio never touches the server — only words do, and the server sees them after ElevenLabs commits them, with speaker attribution intact.
The word model tracks both committed (final) and provisional (in-flight) counts per speaker. Each speaker has a pair of color slots (TX01=amber, TX02=aqua), and words displayed on screen reflect both; if both speakers mention it, the canvas renders a hard split down the middle proportional to who said it more. Bigrams (adjacent word pairs) also count, but only enter the cloud after 3 committed mentions—a threshold that keeps the display clean early on. The canvas caps at 85 words for readability.
On the frontend, a d3-force-driven simulation lays out words to avoid overlap. A hand-rolled camera system lets viewers pan with inertia flicking and zoom with wheel/touch pinch. Words pulse when mentioned again and grow via a soft spring toward their target size. Fully immersive: crosshair cursor, infinite grid background, auto-fit on reset, and per-word hover that surfaces who said it how many times.
- DJI stereo receiver splits into two independent WebRTC-grade PCM streams—each speaker gets their own channel without mixing
- ElevenLabs Scribe v2 Realtime driving live transcription with adaptive VAD commit strategy (0.6s silence threshold); tokens minted server-side, never exposed to client
- Dual word model layer: provisional count from live partials appears instantly; committed count locks in on utterance end. Bigrams tracked separately with minimum-frequency thresholds
- Hand-rolled Canvas animation: d3-force layout, per-word springs, auto-framing camera with inertia pan and anchored zoom, 85-word cap, gradient split-text for shared words
- Session registry with TTL reaping (2h default + 4h hard cap), QR code share links, shareable viewer URLs, and real-time delta broadcast over WebSocket