Projects

kvm
A custom KVM switch.
KiCad
C
STM8
An open-source HDMI Keyboard/Video/Mouse (KVM) switch, which lets you switch two monitors and four USB devices between up to three computers. Involved custom PCB design with impedance-controlled TMDS differential pairs.
Open source under the MIT and CERN OHL-S licenses

What is it?

Why was it made?

What am I proud of?

phone
A custom cell phone.
KiCad
C
FreeRTOS
A 2G GSM cell phone which I designed and built for my end-of-year project in my senior year of high school. It can make calls, receive texts, connect to the Internet, get your location, and do most things you’d expect a phone to be capable of.
Open source under the MIT and CERN OHL-S licenses

What is it?

Why was it made?

What am I proud of?

computer
An adventure in retrocomputing.
KiCad
Z80 Assembly
Go
A microcomputer, built from Soviet-era parts, designed for a History research project concerning the development of technology behind the Iron Curtain.
Featured in Hackaday and hackster.io
Open source under the MIT and CERN OHL licenses

What is it?

This project is a (working!) microcomputer, designed around a U880 microprocessor, a clone of the West’s Zilog Z80, using parts that were available in the Soviet Union during the Cold War. (although I did have to ‘cheat’ a bit with modern versions of some components when I could not find a Soviet version for sale, when the Soviet parts I received were defective, or, in the case of the display, when using an period-accurate part would have made the computer much more difficult to transport and use.)

Why was it made?

My history class had been assigned a research project, with the format being relatively open, and I had chosen my topic to be technology behind the Iron Curtain. As I was starting my research, I realized that several of the components that I was reading about could actually be purchased on eBay, at prices that were far lower than what I was expecting! The only logical next step was to design a computer around these parts, in the spirit of Soviet computer hobbyists from the time.

What am I proud of?

The fact that it works! This computer was definitely one of the more ambitious hardware projects I’ve designed. At the start of the project, while I had some experience with writing software for the Z80, I had never (successfully) designed a computer around any sort of microprocessor, let alone the Z80, and was concerned that I would make some trivial error in the (nine page!) schematic or the layout of the circuit board, resulting in a non-functioning computer. However, I made sure to be careful and methodical in my designing, breaking the system into components that could be prototyped and verified independently on a breadboard. This meant that the final design had very few issues, with the errors I made in the circuit board layout being fairly easy to work around, and I was able to actually get the entire system running properly and submit it as part of my project.

fe310-dev
A development board for a RISC-V microcontroller.
KiCad
C
RISC-V
A custom development board for the SiFive FE310, a RISC-V microcontroller. Required soldering a QFN chip with 0.4 mm pitch, using a stencil, solder paste, and hot air rework station!
Open source under the CERN OHL-S license

What is it?

Why was it made?

What am I proud of?

NoteToScreen
Your notes, anywhere.
Go
C++
OpenGL ES
Metal
RenderScript
Java
Objective-C
Swift
MySQL
Redis
JavaScript
Preact
HTML
CSS
A service (on the Web, iOS, and Android) that lets you scan paper notes with your phone, save them to the cloud, share them with others, and access them anywhere.

What is it?

NoteToScreen is a website that lets you quickly, easily, and securely save handwritten notes online. Once they’re online, you can access them from anywhere, share them with others, search for text, and collaborate in real time!

Why was it made?

I had realized that, in my classes, taking notes by computer was not a very effective strategy for me, but writing notes out inevitably meant that I would lose or somehow manage to destroy them. I wanted some way of getting the best of both worlds, and so NoteToScreen was born.

What am I proud of?

One of the challenges with NoteToScreen was the live collaboration feature, which required learning about WebSockets and how to integrate them with my programming language of choice, Go.

PartBolt
Part tracking made easy.
Go
MySQL
Redis
TypeScript
Preact
HTML
CSS
A website that makes it easy to track and organize electronic components, so you know exactly what you have and where it is. You’ll spend less time looking for stuff and more time on actual projects!

What is it?

Why was it made?

What am I proud of?

ShelfPage
Know your books.
Go
MySQL
Redis
TypeScript
Preact
HTML
CSS
A website that lets you track and share a collection of books, which you can share with anyone and access wherever you are.

What is it?

Why was it made?

What am I proud of?

MyHomeworkSpace
A smart homework planner.
Go
MySQL
Redis
JavaScript
Preact
HTML
CSS
A planner that lets you stay on top of your homework and tests—synced with the cloud, too, so you can access it anywhere you have an Internet connection.
Collaborated with MyHomeworkSpace team
Open source under the MIT license

What is it?

MyHomeworkSpace is an online homework planner I developed with some friends from high school. You can save your homework and other events in the planner, and it becomes accessible anywhere you go. It also connects with my school’s scheduling system, automatically pulling your class schedule data and displaying it side-by-side with events that you add.

Why was it made?

I wanted to see if it was possible to take the paper planner the school offered and digitize it, like I digitized my notes with NoteToScreen. There had already been an Online Planbook created by another student, but I wasn’t happy with the features it offered, so I decided to make my own.

What am I proud of?

Since its start, MyHomeworkSpace has grown to serving over 300 members of the my high school’s community, and has expanded to support automatic import of MIT students’ schedules—though anyone can use the website, even without any school affiliation.

Image of Zum Puzzler Pocket
Zum Puzzler Pocket
Z80 Assembly
A Gameboy game I wrote for my sister, entirely in LR35902 assembly. Created with an assembler that I also wrote!
Open source under the MIT license

What is it?

Zum Puzzler Pocket is a game I wrote. It was developed entirely in assembly language, and runs on a Nintendo Gameboy Color. (In fact, I produced a cartridge of it, which actually worked on a real Gameboy!)

Why was it made?

I’ve created almost a tradition of sorts in my family, creating a new game as a gift for my sister’s birthday every year. Zum Puzzler Pocket was one of these games, the next installment in this series.

What am I proud of?

Not only did I write the entire game in assembly language, but I wrote my own assembler, gbasm, specifically for developing Gameboy games. I’m very proud of the fact that I was able to take a system that I had basically zero prior experience with (knowing very little about the system’s processor, its assembly language, or its graphics hardware), create a fully-functional game (complete with my own tooling!), and produce a working, physical cartridge. The project was also a learning experience for me, helping me understand concepts and develop skills that could be used in future projects, like my Soviet computer replica.

Image of Duck Hacker
Duck Hacker
C++
OpenGL
SDL2
A game where you hack various things by programming DuckBots, small robots that run Lua code. Uses custom OpenGL code for 3D rendering.
Open source under the MIT license
Image of Duck Hero
Duck Hero
C++
SDL2
A 2D role-playing game I wrote for my sister in C++. You play as a duck named Ducky, saving the city of Duckville from the evil robots which have taken over.
Open source under the MIT license

What is it?

Why was it made?

What am I proud of?

Image of motorsim
motorsim
TypeScript
three.js
An interactive simulation of a (very basic, two pole) DC motor. It was my final project for the Spring 2020 offering of my physics class, ES.802.
Open source under the MIT license
Image of homemon
homemon
Go
PHP
A set of programs that let you check that your home’s power is on, meaning you can distinguish between an Internet outage and a power outage. You install a program on a central server and another on a physical device, and the device sends regular reports to your server via a cellular connection. Runs on the Alcatel MW41 hotspot I got root on.
Open source under the MIT license

What is it?

Why was it made?

What am I proud of?

Image of tasky
tasky
Java
JavaScript
Preact
HTML
CSS
A minimalistic to-do list website and Android app. Uses MyHomeworkSpace to synchronize data.
Open source under the MIT license

What is it?

tasky is a minimalistic service that let you keep a series of to-do lists. All of your data is stored in MyHomeworkSpace, meaning that the apps themselves are entirely client-side and just need you to grant access to your MyHomeworkSpace accounts.

Why was it made?

There were two main reasons I wanted to create tasky: first, I needed a to-do list app, and second, it served as a test of the MyHomeworkSpace API. By building a relatively functional app, as simple as it may be, it made sure that there was nothing missing in the API and verified that it is possible to build something useful on top of MyHomeworkSpace.

What am I proud of?

The apps themselves can rely entirely on MyHomeworkSpace for authentication and storage, meaning that they do not have nor need a backend, and can synchronize data between devices very easily. In addition, there were little to no changes necessary on the MyHomeworkSpace side of things, again proving that the API is pretty complete in terms of building apps to interact with MyHomeworkSpace.

gbasm
Go
An assembler for Gameboy Color games. Translates assembly code from text files into machine code that can be run by the Sharp LR35902 processor in the Gameboy.
Open source under the MIT license
roamer
Go
MySQL
A command-line tool that makes handling database migrations easy, independent of the programming language you use. Several of the projects on this page rely on it!
Open source under the MIT license
PrivateAuth
Lua (OpenResty)
An extension to the IndieAuth protocol, intended to protect small, personal applications, like a private media server, a home automation system, or a blog. Includes an implementation as an OpenResty script.
Open source under the MIT license
herald
Rust
MySQL
A tool that processes automated DMARC reports received from other email servers and stores their information in a MySQL database for further analysis.
Open source under the MIT license
awsipacl
Go
AWS API Gateway
AWS Lambda
A webapp that lets you manage the IPs associated with a specific port in an AWS VPC security group. For example, you could control which IP addresses can SSH into an EC2 server.
Open source under the MIT license
fsbrowse
Go
A Go module that provides a simple web UI to interactively browse an fs.FS. Effectively a slightly nicer-looking version of Go’s built-in http.FileServer.
Open source under the MIT license
htstools
C++
A collection of tools to efficiently perform certain types of analysis on large BAM files, which contain sequenced DNA data.
Open source
systemd-notify
Go
D-Bus
A small program that listens to notifications from systemd over D-Bus and notifies you when the status of a systemd unit changes.
Open source under the MIT license
espminitool
C
A tool that uploads code to an ESP32 microcontroller, communicating with its bootloader using a serial port and its custom SLIP-based protocol.
Open source under the MIT license
cloudflare-backup
Go
A tool that allows automated exporting of all DNS records and Page Rules in a CloudFlare account. Useful if you want to keep a backup of your domains.
Open source under the MIT license
hamster-report
Rust
A simple program that can export time tracking data from hamster to a CSV.
Open source under the MIT license
alphanum
Go
A library for sorting lists of strings with the alphanum algorithm in the Go programming language.
Open source under the MIT license
lsusbtree
Rust
A tool that prints out your USB devices (including manufacturer and product info) in a tree format.
Open source under the MIT license
unifi-blink
PHP
Script to allow easy blinking of a UniFi access point’s LED. Useful as a busy indicator or similar.
Open source under the MIT license
Image of CoursesPlus
CoursesPlus
JavaScript
HTML
CSS
SCSS
A Google Chrome extension that adds features and improvements to the (now defunct) Courses website my high school used.
Collaborated with some friends
Open source under the MIT license
Archived project (no longer useful, as Courses has since been replaced)

What is it?

CoursesPlus was a Chrome extension that took the Courses website, which my school used for teachers to post homework and assignments, and extended it. The extension provided extensive customization options for almost every page on the site, and also added several useful features, such as the ability to hide events.

Why was it made?

I wasn’t very happy with the look and feel of the Courses website, so I made some tweaks to the CSS, and realized that I could package these tweaks up as an extension, allowing me to easily distribute them to other students.

What am I proud of?

While it has become useless with the death of the Courses website, CoursesPlus had a long lifetime, with built-in analytics showing that, during its life, the extension’s code was cumulatively run over half a million times.

Image of DaltonTab
DaltonTab
JavaScript
Preact
HTML
CSS
A replacement for your new tab page that provides you with at-a-glance information about your upcoming classes and homework.
1st place at TigerHacks 2015 hackathon
Collaborated with some friends
Open source under the MIT license

What is it?

DaltonTab is a replacement for your new tab page, developed by a bunch of Dalton students, that lets you easily view your homework, schedules, classes, and more! It automatically retrieves your data from MyHomeworkSpace and other Dalton sites, and even brings you a different background every day!

Why was it made?

Originally, it was a project, started by @willbarkoff, for the TigerHacks 2015 hackathon hosted by my school.

What am I proud of?

While it was initially a project intended specifically for the hackathon, it is a useful product and we’ve been able to maintain and expand it since then, releasing several updates containing significant feature improvements, something which I don’t think is the case for many hackathon projects.

Image of FCAPlus
FCAPlus
Python
Smali
Java
A series of patches for the FirstClass Android app that improve the app’s usability and fix various bugs.
Open source under the MIT license

What is it?

FCAPlus is the name I gave to a series of patches (along with a Python script to apply them) that take the Android app for FirstClass, the email system my school uses, and resolve various issues I’ve encountered.

Why was it made?

The Android app for FirstClass isn’t the greatest, with a dated, glitchy interface that was last updated in 2013, and an average rating of 2 stars. (at least, until it ended up being taken off the Play Store entirely) While I can’t change what my school uses for email, I could try and fix some of these issues, which is why I created FCAPlus.

What am I proud of?

Even though the code itself is not super complex, it’s something that I’ve found to be incredibly useful and well worth the effort, even when it comes to minor changes like moving the send button on the “new email” screen. In addition, it was my first time with this sort of reverse-engineering and patching of an Android app, and I had to learn Smali in order for my patches to do anything really useful.

sprite-packer
Go
A program that packs multiple image files (of the same dimensions) into a single PNG spritesheet.
Open source under the MIT license
flash_programmer
Arduino
An Arduino-based programmer, mainly intended for the SST39SF010A flash memory chip.
Open source under the MIT license
slack-status-bot
Go
A bot for Slack that automatically changes your status to the class you’re currently in.
Open source under the MIT license
smsapi
Go
Server that exposes the SMS functionality of the SIMCom SIM800 cellular modem to the Internet.
Open source under the MIT license