Projects
Patient Portal Backend
In May of 2024, a family member reached out in need of a CRUD backend to support a database of dental patients. The frontend was already implemented, so I was tasked with implementing the endpoints that the frontend used. I decided to use the Django REST Framework in order to build the backend. I chose to use Django both because of quick setup time as well as easy to implement authentication.
TTC Tracker
During the fall of 2023, I worked on a project with three colleagues to build a web application that would allow users to view Toronto Transit Commission (TTC) stops, routes, and vehicles in real time, as well as calculate and offer arrival time predictions. We used the Umoiq NextBus API in order to collect real-time data from the TTC. We built a frontend using React.js and used the Google Maps API to display a map of Toronto for the user. We also built a backend using the Java Spring Boot framework to handle all business logic and data processing. In order to reduce latency, we decided to cache location data (such as stop locations, which are very unlikely to change) into csv files. In case our arrival time predictions fail, the backend defaults to TTC scheduled arrival times. You can check out our project here.
Niniboard V1
In July of 2023, I began working on designing a new one-handed keyboard from scratch. I had already built the Niniergo Split keyboard (see below), but rather than routing a custom PCB to wire the keyboard, I decided to create a model for a case in Fusion360, a CAD software, and 3d print the case. Afterwards, I handwired the entire keyboard, eliminating the need for a PCB. I wrote the firmware for the keyboard using ZMK.
Guess Who? Decision Tree Bots
During early 2023, I teamed up with a friend to build a bot that was capable of consistently winning games of the popular children's game Guess Who?. Our approach was to build a strategically optimal decision tree where the bot would be given a list of various character attributes that it could ask its opponent about. We decided to build five different decision trees using the following decision tree algorithms: ID3, CART, C4.5, Chi-Square Automatic Interaction Detection, and Reduction in Variation. We then built a UI where a human could play against any decision tree generated.
Since we built multiple decision trees using different algorithms, we were also able to compare the performance of each decision tree algorithm. We decided to modify our UI to allow a human to have each algorithm run multiple simulations, and present the results of those simulations as well as various statistics in a bar graph. You can find our project here.
Niniergo Split
During the summer of 2022, I decided to design a custom ergonomic keyboard molded specifically for my hand, which I called the "Niniergo Split." I used Ergogen, a utility that allows you to generate a custom keyboard layout, in order to produce a rough sketch of a pcb. I decided to generate a 36-key split-board layout, and designed a pcb using KiCAD. For the microcontroller, I chose to use a nice!nano chip, which would allow the keyboard to be bluetooth, and wrote the firmware using ZMK.
Controlling LED Strip with Webserver
In December of 2020, my friend and I began a project that would allow us to control the color of a strip of LEDs. Our plan was to connect a strip of WS2812B LEDs to an Arduino, which was connected to a Raspberry Pi. We would host a frontend and backend server on the Raspberry Pi, which would take a list of rgb values from the user and feed it to the LED strip via the Arduino.
While my friend focused on building the frontend for our project, I focused on building the backend. I built a web server that would wait for a list of rgb values from the frontend. Once received, the server would send the rgb values to the Arduino through a serial port on the Raspberry Pi, and the LED strip would then display the associated colors. You can check out the project here.