Projects
Like many programmers, I've worked on countless personal projects throughout the years. I've listed several of those here (including some that have never seen a public release).
I host many of these projects either on my home Raspberry Pi (which I've set up to manage far more of my life than just the projects listed here) or on a small VPS. I manage these two devices with Ansible, and I'm also quite experienced as a Linux system administrator.
Click on a tab above for more details!
revocatio
revocatio is a backup health monitor. It can verify that many different types of backups are present, recently updated, and valid.
I have it set to run daily on my personal server, where it verifies that many different backups are present and emails me if something is missing. It has caught missing backups many times over the past several years!
Technologies
Rust, Podman, complex automated testing
Burro
Burro is a new typesetting language for text-heavy documents. It is inspired by groff with the mom macro set.
I have a deep love of digital typography (I've said before that it's my personal visual art form) and have used at least six different typesetting languages over the last decade. I wanted to add my own language to the mix for quite some time before finally building Burro.
Technologies
Rust, harfbuzz
scorecord
scorecord is a system I've built (along with my partner) to keep track of our board game scores over time. We have recorded the result of every game we've played with anyone since January 1, 2020.
I have written the backend and a CLI frontend for data insertion. My partner has written an iOS shortcut and is working on a web frontend.
The server has a robust REST API. The database schema is surprisingly complex, as we need to handle all sorts of possible games, outcomes, expansions....
There is currently no public release since a few details in the codebase are still tied to our particular instance. We hope to make this available soon.
Technologies
Rust, Nim, Docker, Haskell, PostgreSQL, Buildbot
Chant Pointer
Project Website • Project Repository
Chant Pointer is a website that I wrote to be an easy frontend for high-quality typesetting of Anglican chants. It allows musicians to enter a chant score along with a very simple DSL that get translated into the symbols used in chant.Technologies
Go, LaTeX, Docker, Tailwindroman
roman is a command-line RSS feed reader. It includes a nice interface for browsing feeds, reading post content, extracting links from the text, opening those links in a browser, and many other features.
As part of building roman, I ended up writing my own HTML to Markdown converter for Nim.
Technologies
Nim, RSS
WebWhir
WebWhir is an attempt at building a small HTML rendering engine. It's a project I began in high school because I was interested in rendering engines following the announcement that Opera was shifting away from Presto. It's mostly inactive these days, but I included it here because it is still a very special project to me.
WebWhir was a rather ambitious project for a high school student! The initial version was able to successfully parse and render a few HTML tags. I've come back to it several times throughout the years since then. The original version was in C++, and I've rewritten it C++ (again), Rust, and Zig.
Technologies
C++, Rust, Zig, HTML, CSSWrangell
Wrangell is a work-in-progress operating system. So far, it can boot on x86 and do a few simple operations (such as set up paging, load itself into the higher half, and so on).
I do plan to extend it to be able to run user processes as well as add support for a few other architectures, such as ARM and RISC-V.
congrego
congrego is a toy assembler I wrote during my batch at the Recurse Center. It began as a project for "Impossible Day," during which you have a few hours to tackle something that seems impossible to do in that timeframe. By the end of the day, I was able to present something that could assemble a few opcodes. I also wrote all of my own ELF logic (i.e., it does not call into an existing ELF library).
Following my Impossible Day success, I extended congrego to support a few more basic operations and gave a presentation to my Recurse Center batchmates about assemblers, assembly language, and ELF files.
Technologies
OCaml, x86 assembly, ELFLiturgiCal
LiturgiCal was a tool I built to help church musicians manage their weekly repertoire. It is dormant now that I'm retired from my organ career, but I may return to it someday.
I wrote an initial version in Go. When I became Acting Director of Music at Fourth Presbyterian, I rewrote the website in Rust and HTMX and dramatically extended it to be able to import and search our sprawling music library. I ended up using it to plan music across several months worth of services there.
Technologies
Go, Rust, Axum, HTMX, Tailwind, PostgreSQL
hemlig
hemlig is a work-in-progress password manager. It is inspired by Himitsu with several extensions. My eventual goal is to allow easy access over a network while also being useful for OTPs, SSH keys, and other secret storage related tasks.
Technologies
OCaml, ChaCha20
Technologies
Languages
Rust, C++, OCaml, Python, Haskell, Nim, Zig, HTML/CSS/JavaScript (among others)
Miscellaneous Skills
PostgreSQL, Linux system administration, Docker