Jump To

Github Gitlab Sourcerer.io


In reverse chronological order:

2Pic Gallery


Or what was previously known as the Vaccine Passport app. A simple Android app that toggles between 2 images when you tap the image (or the volume button, whichever is more convenient). Created so that I would just need to open an app to show my ID and vaccine passport, instead of opening the gallery and scrolling a bunch. Uses Java.

Decently popular with friends. Apparently they are quite lazy as well.

Rocket 2

Github codecov

Inertia Documentation Status

Rocket 2 is a slack bot management utility used for dealing with UBC Launch Pad. This project was a group effort by a team of people over a few months of the school year. We have spent 18 months on it. It basically functions as an all-in-one command line that relays commands directed at our slack bot to our servers.

I helped in designing and implementing our database backend, creating and automating documentation deployment, automating testing on our database, and just helping around whereever I could.

I also had the pleasure of deploying the project for our club’s use, which gave me a bit of experience in the things that happen when you deploy a project, such as finding bugs that you would never expect to find, and trying to fix the broken things as quickly as possible.

For this project, we made sure to include as much documentation as possible, and the end result was a docs page that was nice to look at.

Technologies used:

Link to in-depth article on the project.


Gitlab Website Youtube

During COVID-19 quarantine, we played games with friends/fellowship over Zoom. I had my first game of Jeopardy over Zoom. It went adequately well, and the game was presented over PowerPoint. But that got me thinking: what if there was a more efficient way to create, share, and present Jeopardy-style games? And that’s how this little project was born. Seeing that there was no good Jeopardy editor/player, I decided to make my own.

Technologies used:

I wanted the tool to be simple and cross-platform so that everyone could easily use it, which is why I made it a web-based serverless app. I placed heavy emphasis on the user experience, which is why I took strides to have a few people (who have also made Jeopardy games) test it out without help and gather feedback. The feedback proved to be extremely valuable in improving the ease-of-use of the app.

Graph Visualizer

Github Website

A small project that spiralled to a medium-sized project. Spawned from the idea of trying to draw the mutual friendships between my Facebook friends. Seeing that there were no good and free online graphing tools available, I decided to make my own.

This project makes use of 2 libraries: p5js to draw the graphs, and matterjs for physics. I chose to strap a physics engine to this project because it made allocating space and handling collision for the nodes and edges of a graph trivial.

The minor amount of DOM manipulation is done with pure JavaScript instead of other external libraries to decrease bloat.

I experimented with UX by adding tutorials that trigger when you do certain actions. For example, a tutorial would trigger when you delete a node, telling you how to delete edges; the tutorial won’t trigger if you have already deleted an edge.

A small graph A bigger graph

Tom’s Parable

Github Youtube trailer

This is, to this point, the only group programming project consisting of 4 people that I’m proud of. Tom’s Parable is a game where you investigate a murder mystery within a university similar to Trinity Western. The game was made almost completely from scratch in Unity (apart from a JSON deserializer from the internet). I was the only programmer in the project, and thus designed the architecture, mechanics, and most of the experience.

This project is fairly modular in that all the dialog is handled with JSON files. This means that you can easily change the story by adding or subtracting dialog from the corresponding JSON files. A basic control system is also implemented with the JSON, so one could add new rooms and the dialog for the rooms separately.

Feel free to download the latest (and only usable) release and play around with it a little. Windows only.

Tom's Parable title screen Tom's Parable title screen Tom's Parable title screen

Chip-8 Toolset

Github Travis Codecov

I created the Chip-8 Toolset to learn more about emulation and interpreting. Inside is an emulator that runs Chip-8 binaries, a disassembler to disassemble binaries into assembler code, and an assembler to build binaries yourself, if you so choose.

I built this program with C++ on top of SFML. The disassembler was made because I wanted a reliable way to debug the emulator. I didn’t plan on making the assembler because I thought that it was too complex, but since at the time I had already built the disassembler, I thought “why not”, and went ahead doing it anyway.

In addition to being able to turn mnemonics into opcodes, the assembler can also handle symbols/labels by storing their positions and bringing them up if needed.

Blinker Program Tetris Program Pong Program Brix Program



tinybasic was made because I wanted to learn a bit about parsing. I didn’t use lexing libraries for obvious reasons. I wanted to get a better feel of how interpreters (and compilers) work under the hood. I chose the (arguably) easiest language to implement, and just read up a bit on parsing.

The idea is to use recursion to turn a string into a list of tokens, parse through the list of tokens and turn that into an abstract syntax tree, and execute it.

I have to admit that it isn’t perfect, and that it sometimes seg. faults while running (probably need more tests). But it runs most of the time, and that’s what counts. And besides, this was just a teaching tool.

Tinybasic Prompt

Tower Defense


Tower Defense is my attempt at cloning a modern tower defense game. I made it as a kind of ‘proof of concept’, which is why most things are implemented, but not extended. It is written in Python and pygame.

This game heavily relies on JSON configuration files for all of it’s sprites, enemy informations, and user preferences. I wrote it with modularity in mind, so that you could easily extend on game features such as enemies, towers, sprites, and even maps.

One of the things I had to do was to implement an event handling system because of buttons. The implementation ended up looking a lot like pyFLTK’s.

Main Menu Sandbox Mode Sandbox Mode Sandbox Mode Freeplay Mode