$ ls ~/build-log/
// build log
A running note on how I think through products, systems, and interaction.
Short, direct snapshots of the ideas shaping the products I build.
// What it took to go from idea to a shipped macOS menu bar app — and why the hardest constraint was staying invisible.
PointerSense is live. The idea is simple: hover over any text on your Mac and get an AI explanation near your cursor — no copy-paste, no app-switching, no new window. The implementation is not simple at all.
$ cat full_note// What Oliver is teaching me about native windowing, screen-capture exclusion, and keeping AI useful during live calls.
Desktop AI has different constraints than web: OS permissions, audio routing, and screen-capture exclusion all show up in the first week.
$ cat full_note// A note from building Work Search and enterprise agentic systems: leverage appears when intelligence sits inside a workflow with memory and outcomes.
Every time I have built something with an AI model at its center, the product work turned out to be everything around the model, not the model itself.
$ cat full_note// Bhasha pushed me to think more carefully about pacing, motivation, and the feeling of returning to a product.
When I built Bhasha I kept reaching for more features — more languages, more challenge types, more analytics. Every time I shipped one, the users who stayed were not using the new features. They were completing one more lesson before closing the tab.
$ cat full_note// Building an on-premise RAG system for HIPAA-sensitive documents at UHG — the failure modes nobody writes about until they ship.
The part of RAG that gets discussed most — model choice, chunk size, similarity threshold — is not the part that breaks in production. What breaks is everything around it.
$ cat full_note// A practical comparison from building Oliver and PointerSense: where Tauri wins, where it costs you, and what the tradeoff actually looks like day-to-day.
When I started building Oliver, Electron was the obvious choice — large community, mature tooling, and a JavaScript runtime I already knew. I chose Tauri instead. A year later building PointerSense, I made the same call. Here is what the tradeoff actually looks like.
$ cat full_note