Skip to content

Projects

Things I've built, in various states of done.

Run commands on remote machines over HTTPS. Paste one line on the machine you want to reach, get a code, and send commands to it with curl from anywhere. Plain text for people, JSON with the exit code, stdout and stderr for scripts and agents. One Cloudflare Worker, one Durable Object per session, and nothing to install on the target.

TypeScript Cloudflare Workers Durable Objects Hono Vite+

Regress

Continuous regression detection for web apps. Point it at a URL and it crawls your pages, fingerprints the DOM structure, classifies changes across deploys, generates test flows with an LLM, and runs them with self-healing selectors. Root cause analysis when something breaks.

TanStack Start Hono tRPC Cloudflare Workers D1 Durable Objects Queues

Record

Track your apps and projects locally on macOS. Tracks the apps and projects you work on, stores activity locally in SQLite, and shows daily and weekly breakdowns. Group projects into spaces and export their time to CSV. No cloud or account required.

Rust Tauri v2 Solid.js SQLite

Project Zap

A production-ready starter for modern web apps. Full auth flow with WorkOS, real-time data with Convex, 30+ UI components, mobile PWA support, and dark mode. The kind of boilerplate I kept rebuilding from scratch, so I turned it into something reusable.

TanStack Start Convex WorkOS shadcn/ui Tailwind v4

Share files from your terminal with a link. Share a file, your clipboard or command output and get a link back. Optional end-to-end encryption with AES-256-GCM, where the key lives in the link fragment and never reaches the server, plus expiry and one-download links. A Rust CLI on Homebrew, one Cloudflare Worker and one R2 bucket. No accounts.

Rust TypeScript Cloudflare Workers R2

CosmosQL

Query Azure Cosmos DB with a type-safe, zero-dependency client. Prisma-inspired API that enforces partition keys at compile time so you can't accidentally run expensive cross-partition queries. Direct REST calls, no SDK overhead. Published on npm.

TypeScript Azure CosmosDB npm

Contextly

An AI chat interface with persistent memory. Vector search across your conversation history so you stop explaining the same context to every new chat. Smart model routing that picks the right LLM for the task (Claude for code, GPT for writing). Built it because I was tired of starting from zero every session.

TypeScript React Vector Search Multi-Model

Zapbook

All-in-one booking and payment platform for event service providers. Custom intake forms, instant invoicing with deposit scheduling, Stripe payments, calendar sync, and automated email workflows. From Instagram DM to confirmed booking in minutes.

TypeScript React Stripe Email Automation

Share local servers through public HTTPS URLs. One command gives a local port a public https URL, with WebSockets passed through so hot reload works and nothing stored on the way. Grew out of cdt, my Cloudflare tunnel script, into one Worker, a Durable Object per URL and a small Rust CLI.

Rust TypeScript Cloudflare Workers Durable Objects

Capture, inspect and replay webhooks to localhost. One command gives you a URL that records every request, delivers each one to localhost as it arrives and replays any of them later, signature headers and all. Split out of beam so each tool does one job, built the same way with a Worker, a Durable Object per URL and a small Rust CLI.

Rust TypeScript Cloudflare Workers Durable Objects