
PDF Accessibility Tool
PDF Accessibility is a constant challenge not only in my day-to-day work environment, but across all sorts of workplaces. I wanted to build a tool to help make it easier to check and automatically make PDFs accessible.
What I build
Things I'm actively working on, have shipped, or am planning to build.

PDF Accessibility is a constant challenge not only in my day-to-day work environment, but across all sorts of workplaces. I wanted to build a tool to help make it easier to check and automatically make PDFs accessible.
A Python CLI I wrote to move years of my own Daylio journal entries into a self-hosted Memos instance, since nothing out there bridged the two. It also happened to be my first real Python project, so there was a fair bit of learning-as-I-went baked in.

A custom Dynacat widget that pulls my Todoist stats — karma, open tasks, active projects, top labels — straight onto my homelab dashboard. It's the first widget I've built for Dynacat, and hopefully not the last.

A ground-up rebuild of my professional site with Astro 6 and Tailwind CSS v4, replacing a scattered mess of old CMS platforms with one fast, accessible home base I'm actually proud to point people to.

Handy scripts to help migrate your data from Trakt or Tautulli to SIMKL.

Started as a fix for a broken World of Warcraft addon the community still relied on, and turned into building a new one from scratch — TitanSpecsLoadouts — entirely in Lua, a language I'd never touched before.

My take on a browser-based bullet hell game, starring an overworked web developer fighting off scope creep and buggy assets instead of monsters. It's partly an excuse to actually learn how game loops work, and partly a fun side project I keep coming back to with friends.

I have been incredibly impressed with Playnite and have made it a mission to integrate all my game libraries into my own local installation, ensuring the metadata and look is *just* right. It's a powerful open source tool for any gamer out there.

A ground-up rebuild of scootr.ca on Astro 6, Keystatic CMS, and Vercel — replacing an aging WordPress/DreamHost setup with a fast, fully static site, a custom 3D shattered-cube logo, and live GitHub/Last.fm/Steam activity feeds.


A tiny, anonymous web app where people can share (and read) small reasons they deserve a break today. I built it to learn full-stack development end to end — HTML and Tailwind up front, Firebase doing the heavy lifting behind the scenes.