Art Gallery
A gallery of studies and finished pieces across pen and ink, charcoal, watercolor, graphite, and digital work, organized by series with a full-screen lightbox.
Software projects, experiments, and open source contributions. 50 projects.
A gallery of studies and finished pieces across pen and ink, charcoal, watercolor, graphite, and digital work, organized by series with a full-screen lightbox.
A cross-platform audiobook player built with Tauri, Rust, and React. Streams from Google Drive, plays offline, syncs progress, and runs on macOS, Windows, Linux, and iOS.
A local-first RSS reader and read-it-later desktop app (Tauri 2 shell, Rust core, React frontend, SQLite with FTS5 search, and a CLI that shares the same business logic).
A terminal UI for managing dozens of Git repositories at once: status dashboard, batch git operations, GitHub integration, and background fetches.
An Obsidian plugin that generates live AI writing insights, connections, counter-arguments, and suggested edits while you write.
A CLI, REST API, and MCP server for fast audio transcription on Apple Silicon, built on parakeet-mlx and the Parakeet TDT model.
A minimal, modular Entity Component System (ECS) game engine in TypeScript. Browser-first, plugin-driven, and tuned for WebGL, Canvas, and modern web APIs.
A CLI RSS/Atom feed reader with OPML support, smart caching, full-text search, content extraction, broken link repair, and an interactive TUI.
Local RAG search for markdown files. SQLite FTS5 keyword search and HNSW vector search fused with Reciprocal Rank Fusion, running fully offline on a local ONNX embedding model.
A high-performance vector database for Bun, Node.js, and the browser. HNSW indexing, Int8 quantization, and pluggable storage backends.
A lofi coding room with ambient beats, streaming terminal diffs, Codex and Claude-style themes, and keyboard-friendly controls.
Create and share beautiful digital postcards with custom images, messages, map stamps, and a copyable link.
A Hawaii rainbow tracker that combines weather, rain chances, cloud cover, humidity, and sun angle to forecast when and where to look.
An Obsidian plugin that opens .csv files in a spreadsheet-like grid with keyboard navigation, range selection, copy/paste, sorting, and debounced auto-save.
An Obsidian plugin that opens .json, .yaml, and .yml files in a visual tree editor, with inline editing, schema validation, and a CodeMirror source mode.
Headless React primitives for building TikTok and Reels-style swipe feeds: a render-prop component and hook with virtualization, gestures, keyboard, and accessibility built in.
A unified CLI wrapper that routes coding requests across Gemini, OpenCode, Qwen Code, and Codex with automatic fallback, daily-credit tracking, and a built-in MCP server.
Unified command-line interface and MCP server for Z.AI services: image generation, OCR, vision, web search, web reader, and Zread code research.
An Obsidian plugin that validates note frontmatter against user-defined JSON Schema rules, with tag-driven selectors, a results sidebar, and inline error reporting.
Semantic search over your own documents, running entirely in the browser. Drop in PDFs, Markdown, or text; embeddings are generated on-device with Transformers.js.
A 3D cuckoo-clock that lives in your macOS menu bar. Every 30 minutes the doors swing open and a tiny bird reminds you the morning is gone.
Trace artwork directly on your screen. Load any reference image, dial the opacity down, and draw over it on phone or tablet.
An infinite-canvas moodboard with sticky notes and images. Pan, zoom, drop things wherever they make sense.
A web reader for your Calibre library. Cursor pagination and virtualised lists keep it fast on million-book collections; EPUB and PDF readers are built in.
A dead-man's switch for Prometheus / Alertmanager, running on Cloudflare Workers and Durable Objects. Alerts you when your monitoring goes silent.
A library of reusable skills (prompts plus references and templates) that any Agent Skills–compatible coding agent can install and use.
A pizza-dough calculator that works backwards from when you want to eat. Tell it the style, the timing, and the kitchen temperature; it figures out the recipe.
Fetch a URL, get clean Markdown back. Plain HTTP first, Playwright fallback for JS-heavy pages, and quality gates that throw out paywalls and login walls before they reach you.
OpenTofu modules for Oracle Cloud's Always Free tier. One `apply` gives you a 4-core ARM box with 24 GB RAM, 200 GB storage, and optional MySQL, S3, monitoring, and budget alerts.
One CLI/MCP front-end for Tavily, Brave, Linkup, and self-hosted SearXNG. Tries free providers first, falls back to paid ones, tracks credits.
An MCP server that exposes 45 Anki tools to Claude. Generate cards from text, audit decks, reschedule failures, and analyse your review history.
An MCP server for Raindrop.io, letting Claude (or any MCP client) read, write, and reorganise your bookmarks, collections, tags, and highlights.
An RSVP speed reader where words flash one at a time at a fixed point, so your eyes don't have to track across lines.
An MCP server that hooks Claude into your Logseq graph. Search blocks, draft daily notes, surface TODOs, and run Datalog queries in plain English.
An MCP server for Pokémon TCG Pocket. Claude can search the full card pool, find synergies, build 20-card decks, and read the meta.
A Logseq plugin that exports a page to clean Markdown and bundles every referenced image and asset alongside it. Works as a drop-in for Jekyll, Hugo, Astro, etc.
A Kubernetes-native uptime monitor. Monitors are CRDs, state lives on the CRD's status subresource, and each check runs in its own throw-away Job pod.
Real-time multiplayer Connect Four with a 3D board. Create a room, share the link, drop pieces.
An email-signup API that writes straight into a Google Sheet. Cloudflare Turnstile blocks bots, Bun or Workers as the runtime, no separate database to operate.
A collection of professionally-designed business card templates built with Typst, featuring multiple styles from minimalist to luxury.
Conversation-starter cards for dinners, parties, and road trips. Swipe through prompts the way you'd shuffle a real deck.
This site. Astro, MDX, Tailwind v4: blog, projects, recipes, photos, and a pin collection, all built statically.
My photography portfolio: collections grouped by trip and theme, with EXIF data, GPS pins on a map, and a full-screen lightbox.
A digital display case for my lapel-pin collection. Each pin is photographed, background-removed, and pinned (sorry) to a velvet-style backdrop with notes on where it came from.
My recipes, written in Cooklang and rendered with a custom Astro integration. Ingredients scale, steps are linked, and everything is plain text on disk.
Embed thousands of Wikipedia articles, project them into 3D with UMAP, and fly through the result in the browser. Articles cluster by what they're about, not by what folder they live in.
A TypeScript parser for Cooklang, the plain-text recipe markup language. Turns .cook files into structured recipe data.
A Logseq plugin that wires OpenAI's text models into the editor — type a prompt in a block, get the completion back in place.
A Logseq plugin that grabs the captions for any YouTube link in a block and pastes the transcript in below it.
I had myself body-scanned at a 3D-printing kiosk in San Francisco, then loaded the resulting mesh into a three.js scene so you can spin it around in the browser.