I'm a multipurpose nerd from London. Lately I've been writing a lot of small tools around Claude Code, and I'm slowly teaching myself Rust by rewriting belt in it. You can find my contact details on syn.horse.
If you're after a senior DevOps engineer or something similar, get in touch through syn.horse.
| Project | Technologies | Description |
|---|---|---|
claude-commit |
TypeScript | Git commit messages from Claude, using your Claude Code subscription. |
| Project | Technologies | Description |
|---|---|---|
syn-horse |
TypeScript, Nuxt.js | Personal website. |
syn-horse-notifications |
TypeScript, Cloudflare Workers | Notification pipeline with rate limits and AI moderation. |
triage |
TypeScript, Vue | iPhone-first web app for triaging Linear issues. |
genderbase |
Ruby | Learn and get answers about gender issues. |
bigqueernerds-com |
TypeScript, Vue | They're big. They're queer. And they're nerds. |
| Project | Technologies | Description |
|---|---|---|
belt |
Rust | A CLI toolbelt, mid-rewrite. Did nothing in Python. Now does nothing in Rust. |
rhymepass |
Python | Memorable, rhyming passphrases. Imperfect; generates weak passwords if forced to use too few characters. |
sweep |
Go | Remove empty directories, .DS_Store and all. Uses Jev to classify files it doesn't know. |
yt-pdlp |
Python | Parallel YouTube (and other sites) downloader. Wrapper for yt-dlp. |
tg |
TypeScript | Turn file hashes into four memorable words, or generate four random words. |
| Project | Technologies | Description |
|---|---|---|
dotfiles-fish |
Fish | My fish shell config. Watch out for funcs.fish, she's girthy. |






