Hi! I'm a student at the University of Waterloo studying software engineering. I have an interest in large scale distributed algorithms and infrastructure for data analytics. I also enjoy working with low level systems.

Circuit Buddy

Interactive circuit builder that has an auto-updating truth table and a simple drag-and-drop interface. It also supports multiple tabls, importing and exporting circuits with JSON, circuit simplification, and custom components. Built with FabricJS,and Vue.js.


Android background service that sends optimized GPS and network locations by text to a specified number every time 911 is called. The companion operator dashboard supports routing of emergency vehicles simulated by the Waterloo bus system. Built with Android, Twilio, Node, React, and Firebase.

React Chess

Chess clone developed with Node, Express, React, and Socket. Supports room creation, different game modes (Bughouse, Crazyhouse, Regular), timer, a chatroom, and a history of moves.

Intelligario clone that allows for human input through the live adjustment of an "aggression" factor. Spikes will automatically kill any blob. Communication is done through Socket and the graphics is done through FabricJS. The underlying implementation of the search algorithm is an optimized, multithreated Dijkstra's algorithm.

React Reddit

Reddit clone developed with Node, Express, Firebase, and React. The features include self-posting, linked posts, voting, account management, and live post and commrent creation. The styling is very minimal.

MAL Recommender

Python application that uses collaborative filtering to predict scores for MyAnimeList users. Computes 1000 features and weights for both users and anime. Since MAL did not have a developed API, user and anime data were crawled using BeautifulSoup. Machine learning framework is NumPy and SciPy.

Snatch N' Go

Android application for customers and web application for restaurant managers that faciliate easy food ordering and pick-ups. The web app essentially serves as a work-flow tool to track and manage placed orders, while the Android app is a clean interface to find and order from nearby restaurants. Built with Firebase and Twilio.


3D model that dances to the beat of any music. Built with WebGL, three.js, Web Audio API, and Twilio. It currently can take the "url" of any Soundcloud link, but integration with other music sharing sites like Spotify is doable.

In the Loop

AngularJS application and Python backend that aggregates current news information in live time. Built with Twitter API, Bing Search API, Newspaper, Firebase, Indico, Google Places, and Wolfram Alpha. It also uses a custom matching algorithm to select the best paragraphs.


Web and iOS application that provides a buyer-oriented marketplace for tech support. The job posting process is accountless, secure, and convenient, and each job is associated with a temporary hash. Built with Twilio and BrainTree.


Android application that determines the resistance of various resistors using the camera. It uses a custom image analysis algorithm based on the saturation and lightness of each vertical strip when the image is converted to HSL.

Competitive Programming

Repository containing all my competitive programming work. The codebook package stores useful algorithms and data structures, and the contest package stores my solutions.

Five Hundred Miles for Parkison's

Developed stable AngularJS website for Five Hundred Miles for Parkison's.

Gravity Collision Simulator

java.swing application that emulates two dimensional collisions. The coefficient of resistitution, frames per second, the accleration of gravity, and the path size are all adjustable. Upon creation, ball overlap is automatically detected and adjusted.

Single Player Tetris

java.awt clone of single player Tetris. Mechanics are ones you would typically find in a modern Tetris clone.

Multiplayer Tetris

java.awt clone of local multiplayer Tetris. Mechanics are ones you would typically find in a modern Tetris clone. Combos are factored into account when sending garbage lines.

Genetic Programming Reversi

Java application that uses genetic programming to create artificial intelligence to play Reversi. Each genetic player uses the symmetry of the board to evaluate moves. It plays relatively well against random players and 2-3 look greedy players.