Most of my time is spent now on research-related projects; I haven’t ever done a great job of maintaining this page, which mostly catalogues technical but non-research-related projects, since around 2019.

I thought maybe I’d split this page by how public the projects are, whether or not they’re still around (indeed, some were ephemeral to begin with). Not every project is described very well, and some do not have their code or materials made public, so you may have to use your imagination.

Public-facing projects

Note that some of my usage analytics are powered by a self-hosted build of Plausible, which will in some cases fail to track users with ad blockers.

reagent is an open-source Web platform designed to facilitate rapid prototyping of AI-backed software for developers. The platform offers a prompt authoring interface for generative AI models, creating a hosted API for each prompt that can be used immediately in software prototypes, with instrumentation that allows for quick debugging and refinement.

As of early 2025, most users are my research colleagues and my students (so, one or two hundred a year). I may expand access more explicitly upon presenting this work at ITiCSE 2025.

This is a tool aimed at improving compatibility within the Gridfinity ecosystem.

I set up https://gridfinity.tools/ largely just to have some place to host the tool, and apparently the domain name struck a search engine optimization chord — I receive more traffic on that homepage (~600 unique visitors per month) than I do on the rebase tool, which sees around 200 visitors per month.

I earned my first dollar from open-source software as a result of adding a donation button to this tool! A warm thank you to Brian Cerveny.

OmniFill was a research project that makes its way into this “public projects” section by virtue of being associated with a research publication. It doesn’t have any real users!

This one is a funny story. Old School RuneScape had launched an ephemeral gamemode that I really enjoyed playing, but it quickly became clear that the temporary gamemode had a major UI design flaw that the developers couldn’t invest time into fixing.

The night I learned that no improvements were forthcoming, I wrote a plugin for the game to address the issues. Although the gamemode only lasted another month or two, this quickly became some of the highest-impact code I had ever authored outside of my industry work; according to the plugin’s download metrics, it was ultimately used by ~70k players, roughly one third of the playerbase for that gamemode.

I wouldn’t go so far as to say that the plugin saved Leagues III, but I also wouldn’t stop someone else from saying it...

This project is dear to me because it was my first public project whose goal was not to create a technical artifact that would serve some purpose but rather to use design to communicate a new concept, an idea for a crowdsourcing platform that the open stenography community might find valuable.

The idea was quickly picked up by the community, even though I wasn’t really able to dedicate my own time to the development of the actual software project. I don’t think it has come to fruition yet, but even years later, the community discusses this idea largely in the framing of my original pitch, including using the name “chordial”.

Now, although I teach User Interface Design and Development, much of my background is in the development side of things. I’m grateful to have such a concrete example of the value of design as a communication tool, and that’s why I take such pride in this project.

The official dedicated app built in React Native to serve Language Transfer courses. Free, open-source software.

Installed 500k times on Android, with >10k ratings! View on Google Play

An early tool to help people learn the OLL algorithm set for solving Rubik’s cubes. This application has seen modest steady use in the many years since I released it (in 2016); occasionally I’d see a new popularity spike in my analytics after someone linked it on Reddit. It has hung at around 300 monthly users for many years now.

A web-based tool for quickly mapping song lyrics to a karaoke track. Developed for the open-source stenography community.

This still sees occasional use!

SpleefUltimate

There was a time that I was one of the two developers of what was, if I remember correctly, the most popular Minecraft server plugin for playing Spleef. SpleefUltimate was a fork of SpleefExtreme, but any details beyond that may be lost to time; my memory ain’t what it used to be. I remember that my contributions weren’t exactly good code, but back in 2012 you really did not need to be writing good code to be a successful Minecraft plugin developer.

Fun additional fact: I also wrote one of the very first Minecraft plugins that would automatically synchronize your donations, made on a companion website, to the game server, offering in-game perks. It’s possible there were others before me, but none were known to me at the time; this was well before there were well-established megaservers. We were a bunch of kids running around in a block land.

Alpha background image generator

When I was a kid, you couldn’t use alpha values for HTML/CSS colors, at least not reliably. We were still trying to support IE6, remember?

But what you could do was use a 1x1 pixel image as your background. I wrote a script with PHP-GD to generate these images dynamically, based on the URL (good ol’ mod_rewrite so it’d look like a real image), and I used it on my Neopets pages.

After mentioning it on a Neopets forum, it started to see steady usage. It might be the true first “public service” project I made as a young software developer, and I still see occasional requests to my server logs for those little pngs. Unfortunately, I’m pretty sure I've purged PHP from that web server many times over by now.

Other projects

Plenty of these are still public-facing in the sense that other people could use them, but they are not / weren’t ever really used by a large audience.

Built in one hour for 2024’s 0-hour game jam, this game uses Llama 3 to tell a story collaboratively with the user. I built this while I was thinking more broadly about LLM-supported game mechanics and how we might allow for freeform exploration of natural language paths while maintaining some constraints and requiring that the user meet particular objectives.

This project really reminded me of the value of prototyping, since it provoked more thought over the subsequent few weeks than the hour I had put into making it.

UC Berkeley’s User Interface Design and Development course includes programming assignments. These involved a pretty heavy manual grading load, since TAs had to grade both functionality and aesthetics. To help the class scale, I converted the course’s programming assignments so that their functionality could be graded automatically.

This turns out to be a handy skeleton for building any autograder that needs to automate a web browser.

salle.live

salle.live is a tool I developed in advance of teaching UC Berkeley’s User Interface Design and Development course in summer 2024. I folded in my desires to deliver interactive lectures, take attendance smoothly, and offer frequent spaced-repetition formative assessment to my students.

Ultimately, I emerged with a tool that provided a live view of lecture slides (similar to a Zoom screenshare) to all attendees, alongside an optionally-anonymous chat that my students used (mooostly responsibly) to contribute with less friction than having to raise their hands. The site served as a framework for my React-based slides so that I could add dynamic, collaborative content to my lectures.

This is a short book-like writeup — not quite finished, as it turns out — that I offer to fellow researchers who need to overcome the hurdle of getting code running somewhere web-accessible (e.g. for the purpose of running a user study).

Speedy Smarts

Speedy Smarts is a programming assignment for UC Berkeley’s User Interface Design and Development course that (alongside reagent) helps students get comfortable developing intelligent features for their software projects.

It will be released soon as auxiliary material for our ITiCSE 2025 work.

stint

This is a project I worked on in Sarah Chasins’s Building User-Centered Programming Tools class with some of my research colleagues. We discovered that many creative coders could benefit from having more concrete handles on the random number generation in their procedural art.

SuiteScry

This is a project from Koushik Sen’s Program Synthesis, Compilation, and Debugging class, which sought to use symbolic execution to generate and provide insight into autograder tests for programming assignments.

qrtwheel

You can do pretty clever things with QR codes if you get an SMT solver involved.

You’ll have to excuse the lack of detail on this one... this is a pretty fun idea, and I want to keep its powder dry in case I do try to actually put it out there someday (the source code is an absolute dumpster fire at the moment).

When YouTube removed the “dislike” count from videos, a bunch of people scrambled to crowdsource the information so that it could be restored to YouTube videos. Video creators could, in theory, use the YouTube API to upload their own videos’ dislike counts to a public server (and there was some appetite for this), but YouTube’s OAuth scopes were too permissive for creators to be comfortable handing over the relevant data to the authors of the “Return YouTube Dislike” browser extension.

Interested in the technical challenge (while simultaneously being a bit pessimistic about the likelihood of any movement in this direction), I investigated and crafted a solution that could (theoretically) leave everyone happy. The solution involved a whole lot of hackery and a deep-dive into how TLS encryption works.

A grading assistant tool built to streamline and simplify homework grading for teaching assistants for Georgia Tech's data structures and algorithms class (CS 1332).

I’m told that this was used for a few semesters after I graduated, which is a pretty long lifespan when it comes to self-built tools for CS courses!

PluckLock (retired)

An Android app with 250+ installs across the Google Play Store and F-Droid. When your phone is plucked from your hands, the lock screen is activated so the thief can't see your messages.

Some ten years later, Google finally included this as an actual Android feature!

A realtime web game and learning experience for microeconomics.
An online 3D implementation of Camel Up (a board game) using CSS and JavaScript.
A cloud tool for controlling Google Slides presentations with a cell phone without any prior setup on the phone or presentation computer.
A keyboard built by hand for use with the open-source stenography project Plover.
A JavaScript application that uses your microphone and speakers to run lines with you for practice for theatrical performances.
A networked Java game created in a group of four in a month for an AP Computer Science course.
A Chrome extension for showing Georgia Tech classes in OSCAR from any website.
An interactive real-world game designed for a high school STEM club demonstration.
A script to sync Clipper card transactions into YNAB.
A hackathon project to track the content of customers' carts and their path through physical stores. Won Best Data Visualization and Best Improvement to the Shopping Experience at HackGT 2016.