Technical support engineer in Windsor, Ontario, with eight years at 1Password and Applied Systems. These days most of what I build runs on AI developer tools: Claude Code, agent SDKs, MCP servers.
Support is where I learned the habit I still work by. Go watch the thing break for an actual person, then fix that.
chordstamp.app (private repo, live site)
Drop in a Guitar Pro or MusicXML file and get it back with a chord stamped above every bar, a fingering diagram for each one, and a strummed backing track that follows the changes. The chord-detection engine reads every note in a bar and works out the chord in the song's key, so it labels the bars the tab's author left blank. Indexes a whole tab library in the browser.
JavaScript, Python / FastAPI, SQL, Oracle Cloud, Cloudflare.
Gmail triage service
Runs 24/7 under systemd on a home Linux server. Gmail pushes new mail through Google Cloud Pub/Sub, Claude Haiku classifies it, the service applies the label before I ever open the inbox. Picked the smallest model that handles the job to keep token costs down.
Freqtrade research pipeline and operations dashboard (private)
A 20-page dashboard over the freqtrade REST API that monitors several bots at once, with health checks, auto-restarts and a read-only Claude Agent SDK assistant that talks through the data on any page. The research pipeline behind it runs hyperparameter optimization with walk-forward and out-of-sample gates, plus a causality auditor that rejects any signal peeking at future prices.
agent-skills
Skills written in the open SKILL.md standard that Claude Code and OpenAI's Codex both build on. One of them gets a person up to speed on a product or console they don't know yet: it drives the real interface in their browser, spotlights each control, sets a small task, then waits while they try it and ask questions. Not a video, not a docs page: the actual product, with someone riding along.
claude-messenger
A local MCP server that lets the Claude app send messages for me: WhatsApp from my own number, Discord DMs from my bot. It asks before every send by default and never guesses between two contacts with the same name. Small on purpose, and instrumented like something bigger: structured logs, OpenTelemetry traces and metrics into Jaeger and Prometheus, and a doctor script that connects the way a client does.
Python, MCP, OpenTelemetry.
- agent-skills Skills in the open SKILL.md format, each tested with and without the skill.
- claude-messenger Local MCP server for WhatsApp and Discord DMs, with logs, traces and metrics.
- gmail-triage Labels new Gmail within seconds of arrival: Pub/Sub push and Claude Haiku.
- monitor-switcher One hotkey moves a whole Windows session between desk and TV: primary display, every open window with its state preserved and each move verified and retried, and the default audio device. PowerShell and AutoHotkey.
- claude-default-search Brave and Chrome extension that routes address-bar searches to Claude.
- Docker-WSL-Disk-Cleanup-Compact-Script Prunes Docker and compacts the WSL virtual disk, which Windows otherwise never hands back.
Eight years in technical support. At 1Password I handled escalations for enterprise customers and IT admins, reproducing bugs across Windows, macOS, iOS, Android and browser extensions, and digging through Datadog and Kibana at the API layer whenever a ticket gave me a reason to. Before that, seven years at Applied Systems supporting insurance brokers on comparative quoting software, where I wrote a Python EDI service monitor that eliminated our biggest single call driver.
Avatar: generated locally in 2023 with Stable Diffusion (GhostMix, a psychedelic LoRA and a negative embedding).

