A picture of me!

My Projects

A selection of my personal / school projects.

For my professional work, see my LinkedIn.

Generalized String Art Generator


Generate photo realistic images using a single thread and a peg board. My algorithm generalizes the string art making process to allow for arbitrary frame shapes, any number of colors, and any resolution of image.

Technologies used: D3.js, Javascript, HTML, CSS

Teaching Cheap Robots Expensive Tricks


Using an inexpensive toy car, some basic sensors, and a little software wizardry, I created a robot capable of mapping, localization, and path planning. Read about my experiences with sensor fusion, modeling dynamics, PID control, Bayesian estimation, wireless communication, and more... and it can also do stunts!

Technologies used: Artemis Nano Microcontroller, Time of Flight Sensors, IMU, BLE, C++, Python, Fusion360

An Introduction to Ray Marching


An introduction to the wonders of the ray marching algorithm. Ray marching enables performant real time renderings of fractals, infinite collections of objects, and more. Featuring interactive demos and mesmerizing visualizations.

Technologies used: Three.js, WebGL, GLSL

Holographic POV Display


My open source persistance of vision display. 30 FPS, full RGB color, and 26" diameter. Updates remotely over WIFI. Includes my first experiments with ECAD and PCB fabrication!

Technologies used: Fusion360, KiCad, Raspberry Pi Pico C-SDK, Protothreads, C, Python, TCP, PIO
Tools used: Prusa I3 MK3S 3D Printer, Epilog M2 Laser Cuter

CNC Lock Cracking Robot


A robot designed to efficiently find the combination to any master lock brand combination lock. Programmed bare-metal on the FRDM-KL46Z board using C and assembly. Electronics control board custom made, interfacing with the FRDM-KL46Z through purpose built drivers. Fabricated using a PRUSA I3 MK3S 3D printer and an Epilog Fusion M2 laser cuter.

Technologies used: OnShape, MCUXpresso, C, Assembly
Tools used: Prusa I3 MK3S 3D Printer, Epilog M2 Laser Cuter

Spinout: A Fully Custom Multiplayer Online Racing Game


Spinout is an online muli-player, top down, arcade style racer. Slide, drift, and bounce your way to victory on recreations of real F1 tracks. I built Spinout over the course of two years, creating both the front and back end from scratch. This includes networking, graphics, physics, database management, AI, and more.

Technologies used: Node.js, Express, Socket.io, Processing.js, Docker, AWS Elastic Beanstalk

FRC - Infinite Recharge


An overview of my robotics work as team lead for the 2020 FRC season. I was responsible for the robot's software and the mechanical development of two subsystems: the turreted shooter and the powercell intake. This bot placed 8th in the Utah regional and was being prepared for the Denver regional when it was canceled due to COVID-19.

Technologies used: OnShape, Java
Tools used: CNC Machining, various metal shop tools

Processing Arcade: A Collection of Javascript Games


A collection of Javascript games I built as a kid. Built using Processing.js on Khan Academy, my games became some of the most popular ever made on the site.

Technologies used: Processing.js


Smaller projects, write-ups, and thoughts.

Zero to Bare Metal AVR Programming with the ATtiny1616


The ATtiny microchip line is a wildly popular choice for low cost microcontrollers. Despite this, online documentation is full of gaps and misinformation about how to actually program the chips. This article attempts to fill that gap, providing a step by step guide to programming the ATtiny1616 microchip over UPDI.

Technologies used: C++, avrdude, gcc-avr, UPDI

Building a 100 Line Static Site Generator


Webpage generating frameworks are, to put it kindly, a huge pain. Instead of learning how to use someone else's package, I decided to spend a weekend writing my own! The system was designed for simplicity and maintainability, and is just over 100 lines of code. Oh, and it generated the website you're on right now!

Technologies used: Node.js, HTML, CSS, Javascript