Selected work
Projects
ai-news
Keeping up with AI had become a several-hours-a-day job. I built a pipeline that cuts that reading down to ten minutes: it filters a dozen sources with classic rules and brings in the language model only for the final stretch. People read it, and other agents query it.
- fastapi
- react
- pgvector
- mcp
a11y-crawler
Auditing a whole site's accessibility without checking it page by page. I group the pages that share a template, audit one, and propagate. The heavy lifting is deterministic; the model only steps in at the end to settle doubts. Later I found I'd reinvented a Princeton paper.
- typescript
- playwright
- axe-core
- postgres
recon
Most «deep research» tools produce convincing prose without telling you what to trust. Recon splits researching from verifying: several agents search, a fact-checker tags every claim —verified, contradicted, unsourced— and only then writes the report.
- python
- crewai
- sqlite
- embeddings
viz-components
A chart library that works the same in Next.js, Angular or plain HTML, with no adapters. The key was not marrying any framework: standard Web Components. Published on npm; the same <viz-chart> anywhere.
- lit
- web-components
- highcharts
- npm
vlm-dni-ocr
Pulling the fields off an ID card when the photo comes in crooked or smudged, where classic OCR gives up. Here the vision model earns its place: it reads the image. But with a safety net: if a value fails validation, it goes null. A made-up field on an ID is worse than none.
- python
- doctr
- qwen-vl
- fastapi
workflow-lint
Claude Code's agent workflows orchestrate, but won't warn you if the script has a silly bug: one of mine died in 15 ms after startup. This catches it before launch —in milliseconds, spending no tokens— because it was detectable without AI. It needed a linter, not a model.
- javascript
- static-analysis
- claude-code
lighthouses-bot
A Rust bot for a contest, eight generations. I tried MCTS, reinforcement learning, Thompson Sampling… and the explicit heuristic won. The smarter version lost to the simpler one: complexity adds failure modes faster than value. Zero AI.
- rust
- heuristics
- game-bot