Blog
Notes on what we're building, what we're learning, and where the thinking is heading.
Why the interface stays quiet
Most assistants compete for your attention. We took the opposite approach — no streaks, no badges, no reasons to come back other than needing something. A short piece on designing for absence.
Streaming responses without a framework
How the chat renders tokens as they arrive using nothing but the Fetch API and a text decoder, and why we kept the whole client in a single file.
Storing nothing, on purpose
Conversations live in your browser and nowhere else. What that buys you, what it costs, and the trade-offs we accepted to keep it that way.
What we got wrong in the first build
An honest list — the assumptions that didn't survive contact with real use, and what changed as a result.
More soon. Posts land here as they're written. For anything you'd like us to cover, the contact page is open.