An AI companion that runs entirely in the browser — a full voice loop from mic to synthesized speech, with no backend state and bring-your-own keys.

Dot is a fully client-rendered AI companion built on Next.js. It implements a complete real-time voice conversation loop — speech recognition, streaming inference, and synthesized speech — entirely in the browser. The question it explores: what does a personal AI interface feel like when you own your own keys, your own memory, and your own choice of model?
The inference layer is provider-agnostic. A single streaming chat route proxies to OpenAI or Google Gemini behind a unified interface, validating models against an allowlist and normalising upstream errors into structured, user-actionable payloads. Each request assembles its system prompt at runtime from four layers — base character, switchable persona, two continuous tuning sliders, and the eight most recent memories — so behaviour is shaped by user state, not prompt engineering.
The voice pipeline chains Web Speech → LLM → ElevenLabs TTS → Web Audio, with single-tap interruption at any phase via AbortController and a browser-synthesis fallback. A 5-band FFT decomposition drives the avatar's reactivity at 60fps. Keys live in a client-side AES-GCM vault (PBKDF2, 200k iterations) and are never persisted server-side.


