// projects
Things I built.
5 projects
Products I designed, built and run. Each one links to its write-ups, if you want the long version.
-
A philosophy app where every answer arrives with the page it came from. I designed it, I run it, and I charge for it.
Built with
- Frontend
- Next.js 16, React 19, Tailwind CSS
- Backend
- Convex, Clerk
- Language
- TypeScript
- AI / ML
- OpenRouter, Hybrid RAG
- Infrastructure
- Cloudflare Workers, AI Gateway, GitHub Actions
- Observability
- Langfuse, Sentry, PostHog, Better Stack
- Testing
- Vitest, Playwright
- Tooling
- Bun
Write-ups
- RAG Is Plumbing. I Wanted to Build a House.25 Sep 2026
1 / 5 Landing page: ask a question, or let the Ancients pick who answersEvery claim links to the passage it came from, with book, section and translationThe Agora: two philosophers, one question, and a note on where they part waysTen philosophers across Stoic, Greek, Indian and rationalist traditionsFree to start. Paying changes how far you can explore, never the grounding -
A canvas that AI assistants can draw on. The model sends plain JSON, Easel checks it twice, and what comes back is real interface that keeps working after the reply is over.
Built with
- Frontend
- React 19, Next.js 15, Tailwind CSS 4, Base UI, d3
- Backend
- Node.js, Express 5
- Language
- TypeScript
- AI / ML
- Model Context Protocol, MCP Apps, Anthropic API, OpenAI-compatible APIs
- Infrastructure
- Cloudflare Tunnel, OAuth 2.1, Claude Desktop Extension
- Testing
- Vitest, Playwright
- Tooling
- Vite, esbuild, GitHub Actions
1 / 4 The reference chat app. The model answers with a real table and status badgesA marketing dashboard the model drew in Claude Desktop, on sample dataAn IT ticket queue in claude.ai. Resolve calls a tool directly and patches one badge in placeThe same queue in ChatGPT. Actions run on the server, with no round trip through the model Project page Private, demo on request -
Turns a photo or a line of text into living 3D particles, and hands back a loop that closes on itself. The depth model runs on your device, so the photo never leaves it.
Built with
- Frontend
- Three.js, WebGL, React 19, Tailwind CSS 4, Base UI
- Language
- TypeScript
- AI / ML
- Transformers.js, ONNX Runtime Web, Hugging Face
- Infrastructure
- Cloudflare Workers, Cloudflare R2
- Testing
- Playwright
- Tooling
- Vite
1 / 3 The editor: a photo as particles, with Depth and Looks to handRelief turns the picture so the depth reads, here in dark modeExport a video, GIF, still, sticker or link, at the stage's exact frame Project page In preview, launching soon -
A small stable of agents and skills for Claude Code, curated by hand. Every piece has to earn its place in the context window, and Garry, the dispatcher, never merges on his own.
Built with
- AI / ML
- Claude Code, Claude Opus, OpenCode, Codex CLI, Pi
- Language
- Bash, Markdown, JSON
- Tooling
- Herdr, Git worktrees, jq
1 / 3 The catalogue, as install.sh --list prints it: the three agents first, then the skillsGarry, in his own words. He carries the brief and the diff, and he never merges without being told toThe guardrail. A plain question gets a plain answer, with no planning ceremony -
Automated job discovery pipeline. Aggregates listings, scores each job description against résumé fit, and generates gap-mitigation strategies with AI-assisted research.
Built with
- Language
- TypeScript
- TUI
- OpenTUI
- Data
- Web Scraping
- AI / ML
- LLM Scoring, AI Research
- Systems
- Automation
Splash screen of ApplyKit Project page Private, not public












