Read my recent thoughts on design, development, and the tech industry.
7 min read
What Happened When I Measured My Vision Pipeline
I had been saying "roughly 90% accurate" for months without measuring it. The eval showed that effort and model choice both move the result more than I expected, and that one config scored 59.4%, 59.4% and 90.6% on the same page.
9 min read
Open-Sourcing One Package from a Private Monorepo
You want one package public and the rest of the monorepo private, without copy-paste drift and without giving up the monorepo. git subtree split does it, the monorepo stays the source of truth, and the whole thing fits in a script with four guards.
6 min read
Rendering Bhatkhande Notation Without a Font
Bhatkhande notation has always needed a custom font on the web, which means the text is not really text. Swarlipi takes an ASCII grammar and renders real Unicode letters in five scripts, with every mark drawn in CSS and inline SVG.
7 min read
Identifying the Raga from the Notes
A weighted heuristic gets the raga right 67.3% of the time. Reranking against a corpus of published compositions takes it to 72.7%, which is the version I can actually ship — and on a 55-composition eval that number carries an interval wide enough to be worth writing down. Here is the method and the number, including the unflattering parts.
11 min read
Scanning Bhatkhande Notation with Claude Vision
Bhatkhande notation isn't a character set, so OCR doesn't apply and no model has meaningful training data on it. Four things took this pipeline from confidently wrong to useful, and the one that mattered most was giving the model a reference in the same modality as the problem.
5 min read
Building Highlight Reels in the Browser with WebCodecs
A highlight reel needs to know which moments mattered. The scoreboard already knew, so the clips come from replaying the scoring engine over the event log — and the render happens client-side with WebCodecs, no server and no upload.