Inspired by the game Apex Legends, Ping is an iOS app that lets you notify your friends about specific real-world locations using context-sensitive messages. Tap a location on the map and Ping will give you a list of canned messages - like “Mexican Food here!” or “Mozambique here!” - using reverse geocoding and Mapbox’s point of interest data. You can then send a rich push notification to your squadmates including an address and map of the location. Ping includes Auth0-based signup and squad management functionality, and helped me learn more about authentication, push notifications, and geocoding.

App Store

Body Smasher

Built in 48 hours for the Ludum Dare 43 compo, Body Smasher is a puzzle platformer with the theme “Sacrifices must be made”. This was my first time making a video game, and I had a lot of fun figuring out how to create pixel art tiles, compose background music, and design thoughtful levels under the strict time limit. Body Smasher was written in Wren for the TIC-80 fantasy console, a platform with high level scripting support but the color palette, file size, sound channel, and other technical limitations of 8-bit retro computers. It helped me learn to work within the constraints of less powerful hardware as well as balance programming with all the other tasks needed to make a game.

Website Github Repo

Bloom Boys

This project was built together with 4 other students for my first year college engineering class. It was designed to monitor dissolved oxygen at various depths, and detect algal blooms or lake turnover near a drinking water intake. Building it was a challenge in many ways, but especially in debugging the communications between the microcontroller and peripherals, as we found that problems could be anything from faulty hardware and incorrect wiring to typos in the code. Testing it in the field was also educational, as we struggled with broken wires, insufficient waterproofing, and incompatible power cables in the cold. We made a lot of mistakes, but in the process learned many valuable lessons about building field-ready embedded systems.

Github Repo

Frame Boy

Frame Boy emulates early model Game Boy (DMG) hardware in the browser using C++ and webassembly. Though I had created a Chip8 emulator before, the Game Boy’s PPU, stereo audio, memory banking, and other features made for a significant jump in complexity, necessitating better code organization and performance. I had to learn about topics from static analysis and cache efficiency to signal decimation and the emscripten toolchain - not to mention the complexities of Game Boy hardware, which is often surprisingly poorly documented. Though there are many faster and more accurate game boy emulators out there, I can’t imagine a more engaging way to learn the inner workings of computers than emulating one yourself.

Website Github Repo

MASA Dashboard

Conceived as a way to allow more people to check on rocket engine hotfire tests, MASA Dashboard provides a flexible solution to real time data visualization, without all the complexity of a time series database and grafana plugins. It is well suited to projects where you need more than a serial monitor, but not a whole IoT system - just constantly update a CSV with your data and MASA Dashboard will create a web accessible interface with draggable panels and several configurable graph types. Building it was a good exercise in UI design, structuring React apps, and writing server side javascript.

Github Repo


Geodoodle is an augmented reality game inspired by reddit’s r/place. Like in r/place, you can only place one pixel at a time on a large canvas, so players must work together to create pixel art images. In Geodoodle, however, the canvas covers the entire globe, and you have to be in a particular location to place a pixel there. This encourages players to explore their local area and collaborate with neighbors to create an ever-changing piece of digital art. Originally built for Pennapps Spring 2018, the current Geodoodle app is written in Swift using Mapbox and Auth0 (earlier versions used React Native or Cordova), while the backend uses aiohttp,, and Postgres. Through Geodoodle, I learned how to build cross platform apps, work with mapping software and geohashes, and write asynchronous backend servers.

App Store

Chip8 Emulator

This project replicates the functionality of the Chip8, a simple virtual computer. Like most emulators, it reads machine codes, 1s and 0s that encode simple tasks like adding 2 numbers, and replicates their effects using a higher level language - in this case, Swift. This emulator also uses mac APIs to replicate the Chip8’s timers, keypad, and black-and-white display. While the Chip8 is simple, emulating it quickly enough is still difficult for Swift Playgrounds, which encouraged me to learn ways of improving efficiency. Overall, this project was a useful, hands-on way to understand CPUs and learn how to write higher performance code.

Github Repo


kbrenders creates automated, professional quality 3D renders of keycap set designs. By programmatically converting keyboard layout files into 3D scenes, it cuts the time required for photorealistic set visualizations from weeks to hours. Built using a microservice architecture, kbrenders uses Flask for taking orders and charging customers, Redis for queuing, and Blender-based worker nodes for scene generation and ray tracing. Building it was a fantastic way to put my experience in 3D modelling and cloud computing to use, while setting up a real business for the first time.

Website Github Repo


Grifbot seeks to imitate Grif, a character from the show Red vs. Blue, with a deep learning language model - specifically, a character-level recurrent neural network trained on hundreds of scripts from the show. By running facebook messages through this model, Grifbot can generate in-character responses that, while usually incoherent, can be entertaining nevertheless. Grifbot was built with Python and Keras, and deployed on DigitalOcean. Building it was a fun way to apply deep learning to a real data set and learn about the challenges of deploying models in the cloud.

Website Github Repo

AR Orbitals

AR Orbitals is a mobile app that visualizes the shapes of electron clouds by solving Schrodinger’s equations, volume tracing the result, and displaying the volume traced field visualization within the real world. It was written over a weekend with C#, Unity, and Vuforia. To create AR Orbitals, I had to implement the Legendre and Laguerre polynomials, write volume tracing code for mobile GPUs, and integrate Vuforia’s augmented reality toolkit with my custom shaders. This taught me a lot about not only wavefunctions, but also C#, Unity, and GPU programming.

App Store Play Store


Strobr is an iOS app that uses variable framerate imaging to measure the frequency of a cyclical process, for example the speed of a spinning car wheel. Traditionally, these frequencies are measured with stroboscopes, devices that combine persistence of vision with flashing lights. By changing the frequency of flashes until it looks like the car wheel stays still, you can measure the wheel’s speed. Strobr works similarly, but you change the imaging framerate instead, allowing you to measure more diverse processes, more conveniently. Two friends and I built Strobr in 36 hours at Pennapps Fall 2017, where it won top 30. We had a lot of fun while learning about Swift programming, iOS APIs, and high framerate imaging.

App Store Github Repo


Astronote is a markdown-based note taking app that can automatically save image and webpage links, work with LaTeX equations, and sync with your local file system. It helps you take more useful notes with links and diagrams, while ensuring you’ll be able to read them later. My first major Javascript app, Astronote uses Electron for cross-platform desktop support, React for the user interface, and Travis/Appveyor for continuous integration. This tech stack helped me create the entire app within 2 weeks and learn a great deal about front-end programming in the process.

Latest Release Github Repo


A free online tool for visualizing custom keycap set designs, KLE-Render has been widely adopted by the mechanical keyboard community and is used in the majority of set designs posted on the internet today. To create its visualizations, it parses JSON layout files, generates individual key images, and composites them together, all in under a second. I wrote KLE-Render in Python using Flask, Pillow, Solidworks, and Blender. Building it was a great way for me to learn about maintaining open source projects while building useful tools for a larger community.

Website Github Repo


With over 16,000 categorized questions, ScibowlDB is the largest database of DOE Science Bowl questions available online, and an invaluable resource for high school science bowl teams across the US. Its web interface helps you search for specific questions to study, simulate infinite practice rounds, and create randomized questions sets for team meetings or scrimmages. SciBowlDB was built with Python, Flask, and SQL, and deployed on Heroku. As my first major web application, it taught me a great deal about full-stack web development and handling large, irregular data sets.

Website Github Repo