Drag to look around. Pick a project to take its seat.
LiveIn progress
Livesince 2026
One-Button DVD Archiver
At RETRO
RETRO: Retrofire Officer
Planned the burns that brought a crew home safely, including every abort.
It brings a family's movies home before the discs give out.

A 2009 MacBook Pro, rebuilt so a grandfather can archive his own DVD shelf.
Insert a disc, get a lossless rip, transferred to network staging, auto-ejected, with a chime. No terminal, no login, no decisions. A FastAPI and htmx interface with server-sent events shows progress in plain language. The ripper is an explicit SQLite-backed state machine, so a bad disc, a dropped network, or a power cut picks up where it left off. The only decision left is which disc goes in next.
- Pull-based deployment so the appliance updates itself over the mesh network
- TMDB metadata lookup so discs land in the library correctly named
- Audio CD support in progress
Python · FastAPI · htmx · SQLite · ffmpeg · mkvmerge
Private source
In progresssince 2026
MekChess Engine
At FIDO
FIDO: Flight Dynamics Officer
Planned the trajectory and every maneuver, working out where the spacecraft would be long before it got there.
Chess engines plan many moves ahead too, just with less fuel at stake.

A chess engine in Rust, starting from a move generator tested against a reference.
Partly an excuse to learn Rust, and partly because I'm bad at chess. It's really fun to build a program that's far better at one thing than you, or almost anyone else, will ever be. In a silly sort of way, that makes you the best at it. So far the move generator and board representation are done and tested. A search engine and a Lichess bot come next.
- FEN parsing and board representation with property-style tests against a reference library
Rust
In progresssince 2026
Pocket AGC
At GUIDO
GUIDO: Guidance Officer
Watched the spacecraft's guidance computers and their software, including the Apollo Guidance Computer.
It runs the computer GUIDO watched. When Apollo 11's computer threw 1202 alarms during the landing, GUIDO Steve Bales was the one who called go.

Turning a jailbroken smartphone into a stand-in for the Apollo Guidance Computer, DSKY and all.
Research and a design plan so far.
Livesince 2026
Scribe Summary Bot
At CAPCOM
CAPCOM: Capsule Communicator
The one voice that talked to the crew, usually a fellow astronaut. When Apollo 11 landed, it was Charlie Duke telling them, "You got a bunch of guys about to turn blue."
The crew talked only to CAPCOM. People send Scribe everything through one Slack channel.


Send a link, PDF, or image to Slack; get a summary, the full note, and a narrated version back in thread.
A Slack bot running in the cluster. It reads a document's embedded text first and falls back to OCR only for pages with none, so a 39-page PDF finishes in about half a second instead of an estimated 15 to 25 minutes. Everything runs on local, CPU-only models, so documents never leave my own hardware.
- Full note delivered in thread as PDF, Markdown, or Word, chosen per user
- Optional narrated audio as chaptered m4b files in the audiobook library
Python · Slack API · Ollama · Kokoro TTS
Livesince 2026
YardWise Garden Journal
At EECOM
EECOM: Electrical, Environmental and Consumables Manager
Watched the spacecraft's power, life support and consumables: the oxygen, water and air the crew lived on. On Apollo 13, EECOM Sy Liebergot was on console when the oxygen tank exploded.
EECOM kept the crew's environment alive. YardWise keeps track of a garden's.

A garden journal built for one family, handed over with an AI-readable maintainer manual.
A phone-first garden journal for a non-technical owner: a property map, a plant inventory, and shared family accounts. The repo includes a manual written for an AI assistant, so the owner can ask for changes and the release pipeline checks them before they go live.
- Release is a semver tag; Flux image automation promotes it with no manual deploy step
- Project-only membership and a scoped token keep the blast radius to one repo
Python · Django · htmx · PostgreSQL · Flux
In progresssince 2026
Vinyl Record Digitizer
At INCO
INCO: Instrumentation and Communications Officer
Kept the spacecraft's data, television and radio links working, and commanded playback of its onboard tape recorders.
INCO played back the spacecraft's tapes. The Vinyl Digitizer plays back records.

An inherited record collection, digitized one side at a time.
A capture station with a kiosk interface, an inventory server with barcode accession cards, and a pipeline from raw capture through track splitting and quality checks into the media library. Built so a non-technical operator can run a whole session alone.
- Two-pass silence-detection track splitting with ffmpeg, after rejecting in-memory approaches that fail on long sides
- Acoustic fingerprinting through AcoustID and MusicBrainz, with fingerprint failure used as a signal that a recording is home-made
- Printed accession cards with barcodes tie the physical record to its digital master
Python · FastAPI · ffmpeg · Chromaprint · MusicBrainz · ReportLab
In progresssince 2026
OpenClef Sheet Music Library
At O&P
O&P: Operations and Procedures Officer
Kept the control center's procedures and the mission rules the whole room worked from.
O&P kept the book the room worked from. OpenClef keeps the music a performer works from.

An open-source, self-hosted sheet music library for performers.
It started when my sister and I were getting ready to play a piece together for the millionth time. We were sending music back and forth and hunting for a copy of something we'd played years ago, and I thought it would be nice to self-host something like Mealie, but for sheet music. Existing tools are locked to one tablet and one user, or treat scores as plain files. OpenClef organizes music the way musicians look for it: by work, arrangement, part, instrument, and composer. I checked the design with other musicians before writing code, and full export to forScore keeps it compatible with how performers already work.
Python · FastAPI · PostgreSQL · SQLAlchemy
Livesince 2025
Meklab Home Cluster
At FLIGHT
FLIGHT: Flight Director
Ran the room. Every console reported to FLIGHT, and FLIGHT made the final call. Gene Kranz was FLIGHT for Apollo 11's landing, and again when Apollo 13's tank exploded.
Most of the other projects here run on it.



A Kubernetes cluster in my house, run like production so I can learn how production fails.
A highly available k3s cluster on six Proxmox hosts, reconciled from Git by Flux. Monitoring went in before any app did, and every service sits behind single sign-on. I've restored it from backup for real once, after Vault's storage came back empty. I don't recommend it as a testing strategy.
- GitOps from a self-hosted GitLab CE, with CI reaching the cluster through an agent tunnel rather than a kubeconfig secret
- Split-horizon DNS across three resolvers, all managed by ExternalDNS
- Backups across VMs, cluster volumes, and an offsite archive
k3s · Flux · Vault · Longhorn · Traefik · Prometheus · Loki · Authentik · Proxmox · Tailscale
Private source
Livesince 2026
Recipe Card Digitizer
At FAO
FAO: Flight Activities Officer
Kept the flight plan and the crew's checklists: the step-by-step procedure for every task.
FAO kept the crew's step-by-step checklists. Recipe cards are a family's.

A grandmother's handwritten recipe cards, read by OCR and served from a family recipe app.
Scans go through a handwriting OCR model, then a text model turns noisy output into well-formed recipe records with title, ingredients, steps, and provenance. Hard cases escalate to a stronger cloud vision model, and only the failed tail ever leaves the machine. Results land in a self-hosted Mealie instance in the cluster.
- Prompt regression harness that checks the structuring stage against every sample card
- Ingredient parsing on import, with a backfill for existing recipes
- Worker runs in-cluster against CPU-only inference sized deliberately for the hardware
Python · FastAPI · Ollama · Mealie · S3
In progresssince 2026
Archival Audio Sorter
At NETWORK
NETWORK: Network Controller
Ran the worldwide tracking stations and the voice and data circuits that brought their signals to Houston.
NETWORK routed signals in from around the world. This routes decades of recordings to the right place.
Hours-long tape, record, and CD transfers, split into tracks, identified, and sorted.
Fingerprinting identifies commercial recordings; anything unmatched is treated as a home recording and transcribed with a CPU-sized speech-to-text model so decades of unlabeled audio can be classified at all. Also untangled a library fractured by playlist names written into album tags. Next step is folding it into the Vinyl Digitizer as the stage that splits record captures and delivers the tracks into Jellyfin.
ffmpeg · beets · AcoustID · faster-whisper · Python
Private source
Livesince 2025
Long Odds
At PAO
PAO: Public Affairs Officer
The voice of Mission Control for the public, giving live commentary to the press and television.
PAO spoke to the public. Long Odds is played by a room full of them.


A party game played on phones. Everyone guesses a number, then bets on whose guess is closest.
I tested whether a language model could write the trivia. Small models got the format right and the facts wrong, so the game plays from an original pack of 303 questions, each with a cited source.
TypeScript · Next.js
Private source
Platform and services
The cluster itself, and the services the family uses on it.
-
Live since 2025
Meklab Home Cluster
A Kubernetes cluster in my house, run like production so I can learn how production fails.
A highly available k3s cluster on six Proxmox hosts, reconciled from Git by Flux. Monitoring went in before any app did, and every service sits behind single sign-on. I've restored it from backup for real once, after Vault's storage came back empty. I don't recommend it as a testing strategy.
- GitOps from a self-hosted GitLab CE, with CI reaching the cluster through an agent tunnel rather than a kubeconfig secret
- Split-horizon DNS across three resolvers, all managed by ExternalDNS
- Backups across VMs, cluster volumes, and an offsite archive
k3s · Flux · Vault · Longhorn · Traefik · Prometheus · Loki · Authentik · Proxmox · Tailscale
Private source
-
Live since 2026
Scribe Summary Bot
Send a link, PDF, or image to Slack; get a summary, the full note, and a narrated version back in thread.
A Slack bot running in the cluster. It reads a document's embedded text first and falls back to OCR only for pages with none, so a 39-page PDF finishes in about half a second instead of an estimated 15 to 25 minutes. Everything runs on local, CPU-only models, so documents never leave my own hardware.
- Full note delivered in thread as PDF, Markdown, or Word, chosen per user
- Optional narrated audio as chaptered m4b files in the audiobook library
Python · Slack API · Ollama · Kokoro TTS
Archival and digitization
Getting decades of family media off formats that won't last much longer.
-
Live since 2026
One-Button DVD Archiver
A 2009 MacBook Pro, rebuilt so a grandfather can archive his own DVD shelf.
Insert a disc, get a lossless rip, transferred to network staging, auto-ejected, with a chime. No terminal, no login, no decisions. A FastAPI and htmx interface with server-sent events shows progress in plain language. The ripper is an explicit SQLite-backed state machine, so a bad disc, a dropped network, or a power cut picks up where it left off. The only decision left is which disc goes in next.
- Pull-based deployment so the appliance updates itself over the mesh network
- TMDB metadata lookup so discs land in the library correctly named
- Audio CD support in progress
Python · FastAPI · htmx · SQLite · ffmpeg · mkvmerge
Private source
-
In progress since 2026
Vinyl Record Digitizer
An inherited record collection, digitized one side at a time.
A capture station with a kiosk interface, an inventory server with barcode accession cards, and a pipeline from raw capture through track splitting and quality checks into the media library. Built so a non-technical operator can run a whole session alone.
- Two-pass silence-detection track splitting with ffmpeg, after rejecting in-memory approaches that fail on long sides
- Acoustic fingerprinting through AcoustID and MusicBrainz, with fingerprint failure used as a signal that a recording is home-made
- Printed accession cards with barcodes tie the physical record to its digital master
Python · FastAPI · ffmpeg · Chromaprint · MusicBrainz · ReportLab
-
Live since 2026
Recipe Card Digitizer
A grandmother's handwritten recipe cards, read by OCR and served from a family recipe app.
Scans go through a handwriting OCR model, then a text model turns noisy output into well-formed recipe records with title, ingredients, steps, and provenance. Hard cases escalate to a stronger cloud vision model, and only the failed tail ever leaves the machine. Results land in a self-hosted Mealie instance in the cluster.
- Prompt regression harness that checks the structuring stage against every sample card
- Ingredient parsing on import, with a backfill for existing recipes
- Worker runs in-cluster against CPU-only inference sized deliberately for the hardware
Python · FastAPI · Ollama · Mealie · S3
-
In progress since 2026
Archival Audio Sorter
Hours-long tape, record, and CD transfers, split into tracks, identified, and sorted.
Fingerprinting identifies commercial recordings; anything unmatched is treated as a home recording and transcribed with a CPU-sized speech-to-text model so decades of unlabeled audio can be classified at all. Also untangled a library fractured by playlist names written into album tags. Next step is folding it into the Vinyl Digitizer as the stage that splits record captures and delivers the tracks into Jellyfin.
ffmpeg · beets · AcoustID · faster-whisper · Python
Private source
Apps
Software built for specific people and the problems they actually have.
-
In progress since 2026
OpenClef Sheet Music Library
An open-source, self-hosted sheet music library for performers.
It started when my sister and I were getting ready to play a piece together for the millionth time. We were sending music back and forth and hunting for a copy of something we'd played years ago, and I thought it would be nice to self-host something like Mealie, but for sheet music. Existing tools are locked to one tablet and one user, or treat scores as plain files. OpenClef organizes music the way musicians look for it: by work, arrangement, part, instrument, and composer. I checked the design with other musicians before writing code, and full export to forScore keeps it compatible with how performers already work.
Python · FastAPI · PostgreSQL · SQLAlchemy
-
Live since 2026
YardWise Garden Journal
A garden journal built for one family, handed over with an AI-readable maintainer manual.
A phone-first garden journal for a non-technical owner: a property map, a plant inventory, and shared family accounts. The repo includes a manual written for an AI assistant, so the owner can ask for changes and the release pipeline checks them before they go live.
- Release is a semver tag; Flux image automation promotes it with no manual deploy step
- Project-only membership and a scoped token keep the blast radius to one repo
Python · Django · htmx · PostgreSQL · Flux
-
Live since 2025
Long Odds
A party game played on phones. Everyone guesses a number, then bets on whose guess is closest.
I tested whether a language model could write the trivia. Small models got the format right and the facts wrong, so the game plays from an original pack of 303 questions, each with a cited source.
TypeScript · Next.js
Private source
Experiments
Long-running side quests, mostly for the learning.
-
In progress since 2026
MekChess Engine
A chess engine in Rust, starting from a move generator tested against a reference.
Partly an excuse to learn Rust, and partly because I'm bad at chess. It's really fun to build a program that's far better at one thing than you, or almost anyone else, will ever be. In a silly sort of way, that makes you the best at it. So far the move generator and board representation are done and tested. A search engine and a Lichess bot come next.
- FEN parsing and board representation with property-style tests against a reference library
Rust
-
In progress since 2026
Pocket AGC
Turning a jailbroken smartphone into a stand-in for the Apollo Guidance Computer, DSKY and all.
Research and a design plan so far.
The room is Mission Operations Control Room 2 in Houston, as it was for the lunar landings. Each project sits at the console whose job it most resembles. Some resemblances are more of a stretch than others.