This page is out of date! Will be updated with my recent projects soon.

PixelShot 300: One-pixel Camera

Java, Arduino, C++

One-pixel camera that can capture a 300-by-300 photo in under 5 minutes. This was achieved using a lens-phototransistor module with two stepper motors to control direction. It was created by a team of four with nothing more than basic electrical components along with an Arduino MEGA2560.

The software controls the motors and sensors, undistorts the captured fisheye image, can demosaic a Bayer colour filter image, and balances colours and brightness.

View on Github

Competitive Pokemon Analysis

Python, Pandas, Scipy, Scikit-learn, Seaborn, Jupyter

I set out to predict a Pokemon’s competitive tier based on its in-game characteristics. So, I scraped data from Smogon, Bulbapedia, and Veekun using BeautifulSoup for Python. I then cleaned and analyzed various properties about pokemon with respect to their tiers in a Jupyter Notebook. Finally, I built a regression model using Scikit-learn.

View on GitHub     Read about Lessons I Learned

Thrive Life Simulator


Simulates a complex dinosaur ecosystem. Over a dozen species of carnivores, herbivores, and omnivores interact in a forest-type environment. Phenomena such as natural disasters, breeding, hunting, disease, aging, and simple genetic variation are factored in. For this project, I wrote a 3D ray-casting engine from scratch.

View on Github

Chrome Tab Predictor

Javascript, Synaptic

Every time a tab is opened, this extension will predict what website the user will want to visit. Given a user’s browsing history, this chrome extension will train an artificial neural network to make these predictions based on the day and time.

View on Github       View on Chrome Webstore

Kaggle - Quora Insincere Questions Classification

Python, TensorFlow, Matplotlib, Jupyter/Colab

This kernels-only competition involved classifying insincere questions. I experimented with 1D CNNs and various types of RNNs, particularly LSTMs and GRUs. For each of these, I tried adaptive optimization technique such as RMSProp and Adam. Since there was a limited training time of 2 hours, I elected to use a custom training loop along with an efficient text preprocessing pipeline.

View on Kaggle

Python, TensorFlow, Keras, Flask, HTML/CSS, Javascript, Heroku

Created at Hack the North 2017, this web app helped users find and purchase a sofa. The app presents users with photos of sofas that they rate. Each rating will train a convolutional neural network with their preferences to suggest sofas that they may like.

View on DevPost       View on Github


Node.JS, Amazon Web Services

App receives a keyword through Facebook messenger or the Amazon Echo and finds a matching rap line based on rhyming and context. Created in a team of 5 using Node.JS, Amazon Alexa, and Heroku, this application won top developer hack and top use of Amazon Web Services out of 40 teams at StarterHacks 2017.

View on Github

Kaggle TED Talk Dataset Analysis

Python, Pandas, TensorFlow, Keras, Matplotlib, Jupyter

A quantitative measure of rating was extracted from qualitative descriptors in the data set. Two neural networks were trained on various features, including talk sentiment and themes, to predict this measure, achieving good accuracy. Created with Lawrence Pang.

View on Kaggle


Android (Java), MYO SDK, Google Location Services

Android application that allows users to discretely call for help using the MYO armband. A simple hand gesture will make your smartphone send out a distress call or text to trusted contacts.

View on DevPost     View on GitHub     View Live Demo

Magnetic Field Simulator


Simulates and visualizes magnetic field interactions between two or more solenoids. Parameters include the physical and magnetic properties of the solenoids, including the length, width, thickness of coils, number of windings, and strength of the current.

View on Github

Collision Simulator

Written in C#, this program simulates a 2D elastic collision between two identical stress balls. The compression of the balls is factored into the simulation. A spreadsheet is outputted with the force, acceleration, velocity, and positions of both balls with respect to a dynamic time interval.

View on Github


Python, PyMongo, Flask, Heroku, HTML/CSS, JavaScript

Created at Hack the 6ix, this web app keeps track of money you owe and money owed to you.

View on Github       View on DevPost       Try it out!