Projects

projects are hosted on either Github or Codeberg

Home Server 🏡

For this project, I reconfigured the services running on my thin client home-server to use Docker CE and Docker Compose. This simplified setup and reconfiguration, and made services more reproducible and easier to test. All services run on a Debian host from a non-root user. Important data is also regularly encrypted and backed up to an S3 host using docker-volume-backup.

To manage network access, each container routes all network traffic through Tailscale. Since I am the only user of server, using Tailscale as a VPN allows me to securely access the server from anywhere without having to expose it to the public internet. I also use Tailscale Serve as a reverse-proxy and ACME client to generate SSL certificates on-the-fly.

I also wrote a Python script to post package update summaries from unattended-upgrades to Discord, but the plugins feature it relies on is too new to be in Debian 12.

Unattended Upgrades Status on Discord

Rat Mapper 🐀

Rat Mapper was a group science fair project for Biology I. The aim was to create a website to help visualize the relationship between phenotypic (visual) traits and the genotypes (genetic) traits they relate to. The site allowed you to create pseudo-rat DNA from a set of traits, allowing the user to see how changing a trait (i.e. black or white hair) changes the underlying DNA. We also created a page to simulate meiosis, such that a user could cross two rats and see the resulting genome.

The logic for calculating genes and creating rats was handled in the frontend, to minimize latency and interactions between the client and server. The frontend was written in typescript with Preact, a lightweight dialect of React. For CSS, we used Tailwind. We also implemented a backend, to allow users to submit their rat to be displayed on the site. The backend was written in python using Flask and SQLAlchemy.

I mainly worked on the front end, implementing all the DNA generation logic, as well as page layouts, page display logic, and styles. I also contributed a bit to the backend, implementing a simple profanity filter to help moderate submissions (as users are free to enter any name they like). I also handled deployment of the site. This involved setting up a simple Apache web server on Debian, and creating the WSGI hooks needed to bind Flask to the Apache server.

U-Fund Dashboard Application 💰

This was my term project for SWEN 261. With a group of 4 other people, my team and I worked to complete a full-stack web application for to help a fictional orphanage process donations. In this application, Administrators can define “needs” they need funded (Blankets, food, water, etc). Then, “helpers” who wish to donate can create an account and purchase these needs, donating to the organization. The front end was written in Angular, with Bootstrap for CSS. The backend was a RESTful API written in Java, using the spring web framework.

The project was developed using Scrum for project management, through the OpenUP development process. This involved improving the product in iterations, while fielding feedback from the product owner. This involved first creating a proof-of-concept REST API, modeling interactions through cURL. Then, in the second sprint we established a basic frontend in Angular, while improving backend functionality. We then spent the third sprint finalizing these baseline feature, while also adding features to drive user interaction. One of these features is a testimonial component, so that when a helper checks out, they can leave a comment to encourage others to contribute. When approved, these comments appear on the login screen. Additionally, we added an opt-in “leaderboard” to show helpers’ total donations on the login screen.

Given this was a long-term project managed with Scrum, I contributed to every part of the application. Given the flow of the project, I started with working on stories for the backend. Then, as the project progressed I worked on more frontend stories, as those were more pressing. This format allowed us to collaborate more as a team.

Rotary Phone Hacking ☎️

This is a project on behalf of a local historical society to turn a rotary payphone into a device to play prerecorded messages when a number is dialed. To accomplish this, we are using python on a single board computer to interface with the phone, which accesses recordings and number information stored in a SQLite database. These entries can be modified and accessed from a control panel written in PHP.

Currently only the control panel is written.

Robotics Explorer 🤖

Robotics Explorer is an Android app I wrote for my AP Computer Science Principles Performance task to display various pieces of data from FIRST Robotics Competition events using The Blue Alliance’s API. It is primarily written in Java using standard Android APIs.