This page lists some of my personal, work, and school projects. You can find the source code for (almost) all of these projects and more on GitHub.

All of my open-source projects receive continued maintenance when needed. The dates below, however, show when most of the major development happened.

Currently working on

  • Riju (Summer 2020 – Winter 2021; source): Extremely fast online playground for every programming language.
  • Shallan (Spring – Summer 2021; not yet published): Personal music library player combining the user-friendly interface and cross-device synchronization of YouTube Music with the flexibility and ownership of a self-hosted open-source solution. Attempt #5 at a personal music library manager.
  • Veidt (Summer – Fall 2021; not yet published): Online webcomic aggregator, reader, and notification service.
  • osscount (Fall 2021; not yet published): Python application to generate fun graphs and metrics about the composition of my (and your) open-source work.
  • Silhouette (Fall 2021; not yet published): Python webapp that shows you visual silhouettes of your code from GitHub and challenges you to guess the language based on the visual appearance of the code.
  • TerrariaCloneClone (Winter 2021; not yet published): Rewrite of TerrariaClone in C++ on SFML, an experiment to see how much less bad at programming I have gotten since my very first project over a decade ago.
  • Tinyku (Spring 2022 – Present; not yet published): Miniature educational clone of the Heroku platform deployed on Kubernetes.

Emacs projects

Games and apps

  • TerrariaClone (Spring 2011 – Spring 2013; HackerNews thread): My first major project, a clone of Terraria, preserved as an example of how terrible code can be if you don’t pay attention to its quality.
  • Chrono Count (Summer 2013 – Spring 2014): iOS app to manage countdowns and countups under arbitrarily complex schedules, previously available from the iOS App Store.
  • Mother’s Day (Summer 2013): Small Java applet that I made for Mother’s Day.
  • Watching Paint Dry: The Game (Summer 2013): Small Java applet where you can paint things with the mouse, and then watch the paint dry. Yes, really. For Father’s Day.
  • tetris-processing (Winter 2013): Simple clone of Tetris from high school, this one in Processing and featuring music.
  • funwithframes (Winter 2013): Simple game in Processing where you try to dodge certain squares while being distracted by other squares.
  • Gravity (Winter 2013): Christmas present for my father. iOS app that simulates many-body Newtonian gravity.
  • 2048 (Spring – Summer 2014): Simple clone of the game 2048, implemented in Java with graphical and command-line interfaces as well as a few auto-solving algorithms.
  • tetris-python (Summer 2014): Slightly more advanced clone of Tetris from high school, this one in Python and featuring pentominoes and other nonstandard pieces.
  • Christmas Rogue (Winter 2014): Christmas present for my father. Roguelike game inspired by Brogue and implemented in Java. Likely the most over-the-top Christmas present I will ever give.
  • Hyperschedule (Fall 2017 – Fall 2019; source): Fast and powerful course scheduler for the Claremont Colleges. Current maintainer: Kye Shi.
  • GitHub Email Backlog (Summer 2020): Simple Chrome extension which abuses the GitHub notifications API to automatically update my profile status with an estimate of how long you will wait for a response when you report an issue.
  • Python in a Box (Summer 2021; source): Interactive online Python REPL in 30 lines of JavaScript.
  • Messenger Mirror (Fall 2021): Small Python application using Selenium to bypass Facebook Messenger’s anti-bot protections and allow message notifications to be automatically forwarded to email. Part of my initiative to stop using the products of companies I despise.
  • Unzuckify (Winter 2021): Small Python application using reverse-engineered Facebook login and GraphQL APIs to exfiltrate message notifications and forward them to email. Replaces Messenger Mirror after Facebook blocked my VPS IP address.


Other personal projects

Work projects

(See also my resume.)

  • Ecofasten and Alpine Snowboards pricing calculators (Summer 2015, ThinkTopic; proprietary): Frontend and backend work on existing Clojure/ClojureScript/Datomic web applications for generating price quotes for roof-mounted solar panels and alpine snowboards. Teammates: Charles Gruenwald, Keren Megory-Cohen.
  • think.recommend (Winter 2015 – Summer 2016, ThinkTopic; proprietary): Library for testing and benchmarking collaborative filtering algorithms.
  • cortex.optimise (Spring – Summer 2016, ThinkTopic): General-purpose library for analyzing, visualizing, and comparing gradient descent algorithms.
  • think.quality (Summer – Winter 2016, ThinkTopic; proprietary): Tool for running company-wide Clojure code quality audits and dashboard to visualize results.
  • CMS Changeset Dashboard (Summer 2017, Quantcast; proprietary): Full-stack administrator dashboard for an internal team to manage an internal database used by an internal webapp used by another internal team to manage another internal database. You can imagine the customer-facing impact.
  • lazy-map (Fall 2017, ThinkTopic): Lazy map implementation for Clojure.
  • UPM (Summer 2019, Universal package-management interface for Python, Node.js, Ruby, and Emacs Lisp.

School projects

Deprecated projects

  • CAS (Summer 2014): Failed attempt to create a computer algebra system, like Mathematica.
  • minimal-webapp (Summer 2016): Noble effort to create a ClojureScript webapp that did not require a huge number of incomprehensible build system configuration files that nobody quite understood. It almost worked.
  • mood-tracker (Spring 2017): Small AppleScript utility to record data about personal mood at regular intervals. This project was abandoned when I realized that trying to systematize everything in my life was actually not making me happier.
  • acc (Summer 2017 – Summer 2018): Command-line accounting tool with first-class support for reconciling multiple ledgers interactively. This project was abandoned when it was pointed out to me by a friend that I didn’t actually have to track every single one of my financial transactions.
  • Dotman (Summer 2017 – Summer 2018): A very silly idea I had to write a unified package manager (with Ruby DSL) for my entire system configuration (e.g. software installation, configuration, dotfiles, misc scripts, etc.). This was abandoned when I realized I could just manually write down what I did to configure my laptop. If you actually want declarative system configuration, you should probably be using Nix.
  • elint (Summer – Fall 2017): An attempt at deduplicating various CI utilities for my Emacs packages. It didn’t provide enough value to justify the overhead, although there are other projects which provide the same functionality in a more powerful manner.
  • etunes (Fall 2017 – Summer 2018): Declarative, version-controlled music library manager for Emacs. Attempt #1 at a personal music library manager.
  • Madeline (Summer 2018): Novel approach to directory syncing, used to maintain complementary mirroring of two filesystem trees via SSH. This idea, while interesting, never served my use case terribly well in the end, and the implementation is terrible. I now use a smaller and better-targeted personal script to serve a similar function.
  • fstunes (Winter 2018): Extremely minimal music library manager leveraging UNIX filesystem abstractions. Attempt #2 at a personal music library manager.
  • µTunes (Spring – Winter 2019): Aggressively minimal command-line music player and library manager following the UNIX philosophy, with Emacs interface. Attempt #3 at a personal music library manager.
  • Pyrelight (Spring – Summer 2020): More sophisticated command-line music player and library manager. Attempt #4 at a personal music library manager.

Abandoned and on-hiatus projects