GitHub LinkedIn

// 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.

  1. 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

    Landing page: ask a question, or let the Ancients pick who answers
    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
  2. 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
    The reference chat app. The model answers with a real table and status badges
    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
  3. 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
    The editor: a photo as particles, with Depth and Looks to hand
    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
  4. 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
    The catalogue, as install.sh --list prints it: the three agents first, then the skills
    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
  5. 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
    Splash screen of ApplyKit
    Project page Private, not public