How this is built
The development work is the content. Each post here describes a decision this project actually made — the mechanism, the trade, and the part that is worse than it sounds.
Posts
- How an answer finds its way back to its page20 Sept 2026Citations are decided when a document is cut up, not when the answer is written. Here is where the offsets come from and what they do and do not prove.Source citations
- Why the embedder runs inside the app18 Sept 2026The default embedding model is an ONNX model loaded in-process, pinned to one revision, with remote loading switched off. What that buys, and what it costs.Local embeddings
- One vector table per notebook16 Sept 2026Vectors from two different embedding models are not comparable, and cosine similarity between them returns a number rather than an error. A structural fix.Embedding spaces
- What a Docker-free desktop app costs14 Sept 2026Not shipping a container removes a real barrier, and it removes a lot of other things too. An honest accounting of what this project gives up.Trade-offs
Why a blog on a product site
Because a download page goes stale and an article does not. The plan recorded for this site is that a change worth making is a change worth writing up: the pull request explains it to a reviewer, the article explains it to everyone else, and the article keeps bringing people in long after the release stopped being news.