Tusk is a browser extension for filling passwords from a KeePass database stored in the cloud. I didn't start this project (it began as CKP) but I created a fork with a new UI since the original project lost steam. You can install Tusk for Chrome or Firefox. I've since abandoned the project due to difficulties with cloud storage APIs, particularly Google Drive.
kobodl is a command-line tool and web service to download and remove DRM from books purchased from kobo.com. I forked it from another project to add audiobook support, multi-user support, a web interface, and create proper distribution packages with pypi and docker.
Frustrated with inflexible and flaky RSS digest services, I made my own flaky one. RSS Glue can take arbitrary chronological feeds and merge, digest, filter, and transform them into whatever you like.
This website was built with Hugo and Tailwind CSS. I migrated from Vue.js and Nuxt to simplify the tech stack and eliminate the need for runtime JavaScript. My last personal site was a table-layout throwback intended to render well in text-based browsers like lynx and links.
bikegroups.org is a simple directory for the Minneapolis cycling community. It grew out of my frustration with how social media platforms gatekeep and bury information.
WorkspacesIO is a data management tool built on MinIO, ElasticSearch, and Filestash.app that provides excellent browser and command line interfaces for managing data collections called workspaces. It uses AWS STS tokens to provide coarse-grained access control that allows client tooling to interact directly with the storage backend.
This is a git repository where I keep compose configurations for all the services I host. It's also a tutorial for how to set these services up, and represents a lot of time and research about how to best configure docker and traefik. /r/selfhosted provided a lot of inspiration.
Media annotation and analysis tools for web and desktop. Challenges include rendering performance and managing code complexity, as traditional MVC patterns often lead to performance bottlenecks.
In the summer and fall of 2016, I lead the development team to build the website for HackNC, the annual undergraduate-run hackathon at UNC Chapel Hill. This is the first real web design I was involved in, and my first time working alongside a talented dsgraphic designer.
I implemented an infinite version of the classic Conway's Game in native javascript. This is one of the first pieces of code I was ever proud of, and the project was my first foray into browser animation with canvases.