Projects

Pragmatic tools I built for myself. If they make your life easier too, even better.

I prefer purposeful tools with small footprints. Everything here is open source; more lives on GitHub.

Status: maintained — accepting issues/PRs, releases ongoing; evergreen — feature-complete, fixes on request; legacy — kept for reference, no new work.

html2rss

Status: maintained

Open-source org — turns any website into RSS 2.0 or JSON Feed.

html2rss brings RSS back to sites that never had it (or quietly killed it). It reads what a page already says about itself before guessing, and starts a browser only when a page needs one. YAML selectors stay available when you know the markup.

The html2rss organization spans the Ruby gem, a self-hostable web app (paste a URL, get a feed), 220 ready-made site feeds, the docs site, and a headless scrape API.

Highlights

Extraction
Feeds from sites that never offered one, without writing selectors.
Dynamic sites
JavaScript-heavy pages work too; a browser starts only when needed.
Discovery
Finds the right listing page when the homepage says too little.
MCP
Agents build and ship feeds with the same tools people use.
Safety
Safe to self-host: it stays out of your private network by default.
Approach
Root causes over workarounds, loud failures, performance measured before tuned.
Self-hosted
Ruby gem plus a Docker web app that runs on your own hardware.
RubyGems
58k+ downloads
Docker Hub
16k+ pulls

Links


moodbar.rs

Status: maintained

Cross-platform Rust toolkit for audio moodbars.

moodbar.rs turns audio into visual fingerprints by combining signal processing with practical developer tooling. It is built for DJs and audio broadcasters who need to scan large libraries quickly and choose tracks with more confidence. Rust ships on crates.io; WASM and native packages ship on npm — including released Swift iOS bindings.

Highlights

Rust core
Pure-Rust stack powered by Symphonia + RustFFT.
WASM
Browser-ready WebAssembly bindings with a live demo.
Native
iOS and Android bindings alongside CLI releases.
Platforms
Linux and macOS are first-class release targets.
Legacy output
Supports legacy-compatible raw moodbar byte generation.
Batch workflows
Batch generation pipeline for processing whole music folders.

Links


.dotfiles

Status: evergreen

My macOS and CLI config in ~/.dotfiles, linked with rcup.

brew bundle installs the Brewfile.

Highlights

Workstation
Same Brewfile, zsh, and editor config on each Mac.
Agent skills
Planning, review, and delivery. Install with npx skills, or rcup.
Guided defaults
macos-defaults-apply prompts, then applies macOS defaults. Touch ID sudo and Apple Watch unlock stay manual.

Links


jekyll-loading-lazy

Status: legacy

Drop-in lazy loading for Jekyll (img/iframe). Instant performance wins.

Static sites deserve to be fast without extra chores. This plugin adds the native loading="lazy" attribute to images and iframes during the build, no template changes needed. Maintainers get Core Web Vitals improvements and one less script to ship.

Highlights

Automatic
Injects loading attributes into images/iframes at build time.
Low-touch
Works without editing content files or templates.
No JS
Native lazy-load via the loading attribute; removes third-party scripts.
Adoption
69k+ RubyGems downloads.

Links

▲