Here are some things I've worked on. Some were work-related, others just for fun.


Spring 2016 - Present

BirdBlox is an app I'm working on for BirdBrain Technologies which allows beginners to easily program the company's robotics kits over Bluetooth.

While writing tutorials for BirdBrain, I had an idea for how to redesign an existing app to make it more mobile-friendly. I created a prototype of the application, which I sent to Dr. Tom Lauwers, the company's founder. He liked the idea, and I've been working on it since then.

The app has two main components: a JavaScript front-end, which handles the UI and most of the logic, and an iOS app which holds the JavaScript in a webview and interfaces with the robots over Bluetooth. This structure makes the application easily portable to Android, Chrome OS, and other platforms in the future.

I'm working on the JavaScript component, which now consists of over 13,000 lines of code. I also created the design mockups, and documentation.

View on GitHub


Portal Gun AR

Spring 2016

This is an augmented reality app based Valve's Portal 2 game. I made it last summer as part of an elaborate Portal 2 scavenger hunt for my cousins (who are also big Portal 2 fans). Here's a video of a test chamber created for the app. All AR graphics are being rendered live.

The app was made in Unity and uses the Vuforia augmented reality API. The images inside the portals are panoramas taken with my phone from the point of view of each portal target. The portal clips the panorama using a custom shader I found online, giving it a parallax effect.

In addition to the AR Portal Gun, the scavenger hunt involved a robotic safe, Aperture Science Command Prompt application, and synthesized GLaDOS voice, controlled via a custom Android app.

Augmented Reality


Summer 2014

I created this app for my high school's guidance department to help schedule career day. Each year, students rank which career day sessions they would like to attend. Previously, the guidance department would manually sort through these preferences and create rosters indicating where students should go. This application automates the process, using a custom algorithm to maximize the number of students receiving their top choice. In fact, on its first year, every student was able to attend their first choice, and over half received their second as well.

The scheduler is a WPF application that uses the Excel Automation API to create rosters in Excel. It uses on-screen instructions to guide users through the data import and roster generation processes. The scheduling algorithm first assigns each student to the highest available session on their list, then repeats this process for the desired number of sessions. This ensures that every student is given a chance to get one session they want before anyone is assigned two sessions they want.



Summer 2014

FlipIt! was my first Android application, which I created during a 2 week summer camp on Android App Development. It is a puzzle game which I've wanted to make since 8th grade, but wasn't able to until I took this camp.

The goal is to use the 6 controls at the bottom of the screen to make all the smileys happy. This can be surprisingly difficult, given that the commands are order-dependent and the number of possible command strings increases exponentially with length.

The levels I selected were generated using a computer program, which creates and solves random levels by brute-force until it finds one meeting certain parameters.



Summer 2013

I think many people would agree that Minesweeper is a pretty frustrating game. Most of the gameplay involves repeated application of two simple rules:

  1. If the number on a square equals the number of adjacent squares, all adjacent squares are bombs.
  2. If the number on a square equals the number of adjacent marked bombs, all adjacent unmarked squares are safe.

All too rare are those moments where more complicated reasoning is required. As with most tedious processes, the player is bound to make a mistake somewhere, and when they do, all their progress is lost. If only there was a way to cut through all the boring parts of a Minesweeper game and skip straight to when things get interesting...

MineAssist solves this problem by automatically applying the above rules, and leaving just the more interesting parts of the game for the user to solve. Here's a demonstration:

View on GitHub



Summer 2013

This WPF application identifies gem matches in the game Bejeweled faster than any human could. It determines the types of gems on the screen using the color of the pixel at the center of each grid space. When it finds gems that match, BlasterBot selects them with the mouse.

View on GitHub