Projects

Things I've built.

Open-source experiments, reference implementations, and tools I use day-to-day. Each one is a working answer to a question worth answering.

Aletheia

2026Active

A tool for reverse-engineering software — taking a finished program apart to understand how it works — built on one idea: every step of the analysis is a stackable, undoable layer, like git history crossed with Photoshop layers.

  • Treats every step of picking a program apart as a stackable, undoable layer (think Photoshop layers, or git history): hide a layer to see the raw program underneath, branch to test a theory without losing your place, or compare two interpretations side by side
  • Nothing is ever overwritten — so undo is instant, results are remembered and only recomputed when something they depend on changes, and any piece of analysis can be handed to a teammate as something they can independently reproduce
  • Debugs suspicious programs, including malware, with a built-in simulated processor that never actually runs them — so nothing can escape — and live debugging state flows into the same views as the rest of the analysis
  • One shared engine behind many front doors: a desktop app, a command-line tool, a team server, an install-nothing browser playground, and a Python package — with no duplicated logic between them
  • Understands several processor families (the Intel/AMD chips in laptops, the ARM chips in phones, and RISC-V) and is hardened never to crash on the hostile, malformed files it is built to take apart
  • Rust
  • Vue 3
  • TypeScript
  • WebAssembly
  • Python
  • Rhai

CodePenMCP ↗

2026Active

A Model Context Protocol server that lets AI agents drive the live CodePen editor through a Chrome extension bridge — no browser automation required.

  • Mirror mode bundles multiple local files into a single pen, sidestepping CodePen free accounts' 3-file-per-pen limit
  • ~70 MCP tools spanning pen CRUD, file-aware editing, assets, blocks, templates, collaborators, comments, deployment, screenshots, and console capture
  • Purpose-built Chrome MV3 extension operates the editor DOM directly — no Playwright, no headless browser, no remote-control scripting
  • Local folder mirror with one-shot push/pull and continuous watch mode that survives VS Code's atomic save behavior on Windows
  • Works with both classic pens and modern Project Pens, including a page-world round-trip to read and write CodeMirror 6 instances from the isolated content script
  • TypeScript
  • Node.js
  • MCP SDK
  • Chrome MV3
  • SignalR

Vuetify 4 documentation packaged as an installable agent skill for Claude Code, GitHub Copilot, and OpenAI Responses.

  • Generates a 394-page skills corpus from live Vuetify 4 docs, pinned to v4.0.5 for reproducibility
  • Outputs structured markdown with per-page section indexes plus a top-level manifest
  • Multi-target build: Claude Code, GitHub Copilot, and OpenAI Responses skill formats from one source
  • Tracks per-page parse failures so partial regenerations stay observable
  • TypeScript
  • Node
  • Vuetify 4
  • Agent Skills

Catan

2026Coming soon

Full-stack digital Settlers of Catan: one C# rules engine driving Blazor WebAssembly, MAUI Hybrid, and a SignalR multiplayer server, with dual SVG and Three.js boards.

  • One transport- and UI-agnostic GameCore library powers five hosts: WebAssembly multiplayer, MAUI desktop/mobile, hot-seat single-device play, the SignalR server, and the test suite
  • Typed command/event protocol dispatched through MediatR, with a SignalR hub filter that unwraps envelopes so the rules engine never knows it is networked
  • Dual board renderers sharing the same hex-coordinate math: a 2D SVG view for fast first paint and a modular ~2k-line Three.js scene (camera, animations, hit-targets, mesh and prop factories) interop'd from Blazor
  • Autofac modules compose per-host service graphs; ~52-file xUnit suite covers unit, integration, and end-to-end tests against the real hub, MediatR pipeline, and serialization stack
  • .NET 10
  • C# 13
  • Blazor WebAssembly
  • MAUI Blazor Hybrid
  • ASP.NET Core
  • SignalR
  • MediatR
  • Autofac
  • Three.js
  • SVG
  • xUnit

Angular State Hydration

2026Reference

A reusable Angular library that captures and restores whole-application state — signal stores, DOM form state, browser state, and Mapbox GL maps — behind a plugin API with a swappable persistence backend.

  • Plugin-based capture/restore: a ResourceRegistry + HydrationRuntime snapshot signal stores, DOM form/`<details>` state, browser state (storage/scroll/URL), and Mapbox GL maps — each behind its own ResourceHydrationPlugin
  • SignalStorePlugin reflects over a store's own WritableSignals, so a plain @Injectable store registers directly with no capture/restore boilerplate
  • Change detection via a deterministic content hash (cyrb53 over canonicalized state) — unchanged resources are skipped, not re-persisted
  • SnapshotStore is a swappable seam: the default IndexedDB store keeps one manifest row plus one row per resource, rewriting only what changed
  • Optional AutoHydrationCoordinator wires restore-on-init and debounced auto-capture purely through DI config — no app-level effect/lifecycle plumbing
  • Angular
  • TypeScript
  • Signals
  • IndexedDB
  • Mapbox GL