My Personal Projects

Financial Management App

Screenshot of... Screenshot of... Screenshot of...
Sept 3, 2025 – Sept 15, 2025

A fully functional web application for personal finance tracking and planning. Users can register and log in securely with JWT-based authentication, which uses long-lived refresh tokens and short-lived access tokens. Passwords are stored as cryptographic hashes to ensure confidentiality. Once logged in, users can:

  • Open accounts and create spending categories
  • Record deposits and withdrawals with full transaction history
  • Set category budgets and visualize progress with interactive charts
  • View spending by category with a pie chart
  • Access a dashboard with summaries of savings, spending trends, and monthly breakdowns

The intention behind this project was to gain practical experience building a single-page application (SPA) with a modern, scalable tech stack. Beyond working with Flask, React, PostgreSQL, and Nginx, I implemented my own authentication system, deployed on a self-managed Linux server, and integrated custom data visualizations. This experience gave me valuable insight into how web applications function end-to-end, from backend services to user-facing features.

  • Tech stack: React, TailwindCSS, Material UI, ApexCharts, Node (Express, bcrypt), PostgreSQL, Nginx, DigitalOcean, pm2

Operations Management Software

July 2025 - Present

An enterprise web app built for Meals On the Move to automate core operations. The project included:

  • Secure admin dashboard protected by encrypted credentials.
  • A form-based tool that accepts a Google Sheet URL and returns a zip file containing packing slips, labels, and a shopping list formatted to company specifications.
  • Professional development practices were followed, with a strong emphasis on reliability and maintainability.
  • The product was thoroughly tested before delivery to ensure smooth operations.
  • This was the first contracted project I developed and delivered successfully.
  • Tech stack: Python (Flask, Pandas, bcrypt, ReportLab), JavaScript (HTMX), TailwindCSS, SQLite, Nginx, Gunicorn, DigitalOcean

Gambit

Screenshot of... Screenshot of... Screenshot of... Screenshot of... Screenshot of...
May 2025 - June 2025

A fully functional betting web app that allowed users to sign up, stake fake tokens, create bets, challenge others, and settle wagers. Unlike platforms such as Polymarket, which focus on markets, this app emphasized 1-vs-1 challenges where each bet was created by one user and accepted by exactly one challenger.

  • Implemented user authentication and token-based staking system.
  • Developed a front end interface from scratch and handled most of the business logic and database queries.
  • Collaborative project, but I primarily served as the full-stack developer, providing well over 90% contribution
  • Tech stack: Python (Flask), JavaScript (HTMX), TailwindCSS, SQLite, Nginx, Gunicorn, DigitalOcean

Polll

November 2024 - March 2025

A fully functional social media platform for polls. Users could sign up, create one poll per day, vote on polls created by others, and share their opinions through comments.

  • Joined the project about one month into development.
  • Contributed primarily to the front end, improving the user experience and interface design.
  • Implemented key features for poll creation, voting, and commenting.

As of September 2025, the site has been taken down.

  • Tech stack: Python (Flask, SciPy), JavaScript (HTMX, ApexCharts.js), TailwindCSS, PostgreSQL, Supabase, Gunicorn, Heroku

Guitar Tab Generator

December 2024 - Present

The intention with this app is to convert a soundfile to guitar tablature. Conceputally this is simple, but the details of it's implementation are exceedinly nontrivial. Currently, I am able to determine the notes and overtones of a sound file with a single, relatively clean, guitar note. I've always loved guitar and the math behind signials and sound, so I refuse to scrap this project entirely, but as it stands it is very low on the priority list. Also I do not intend on using machine learning for this project.

  • Tech stack: Python (Numpy, SciPy)

Canadian Varsity Web Scraper

November 2024 - December 2024

This project is a web app that aggregates information on Canadian varsity athletes from universities that use SIDEARM Sports platform to host their athletics website. It began as a tool for my own school (UBC), but I realized that this company uses the exact same format for all schools they are under contract with. This means the web scraping code didn't need to change at all.

  • Initially built for UBC, the scraper was later generalized to include all Canadian universities using SIDEARM Sports (about two-thirds of them), without requiring changes to the underlying scraping logic.
  • Athlete data is organized by school for easier browsing and comparison across institutions.
  • The consistent structure of SIDEARM Sports websites allowed the original hard-coded HTML parsing built for UBC to be reused across multiple schools without modification.
  • As an experimental extension, I implemented a CNN for facial analysis on athlete headshots. The model worked well technically, but due to the sensitive nature of the application, this feature was not released publicly.
  • Tech stack: Python (Flask, beautifulsoup4), TailwindCSS, SQLite, Nginx, Gunicorn, DigitalOcean

WJ Water Level Monitor

July 2024 - August 2024

This project automated the manual process of logging water pressure levels for a construction company. During a summer job, I was tasked with monitoring water pressure in a compromised area and recording updates every few minutes. To streamline this repetitive task, I developed the following solution:

  • A JavaScript script, run directly in the Chrome console, which fetched real-time data from the server’s API, cleaned the data, and generated .csv-formatted logs replicating the paper sheets I was using.
  • The script enabled automated tracking even when the website front-end was down, as long as the API remained available — something not previously possible.
  • A supporting Python utility was written to convert large chained .csv files into individual .xlsx files for easier reporting and archival.
  • This project saved time, reduced error risk, and provided a more resilient method of monitoring water levels.

The job was successfully completed and thus the monitoring server was shut down. The API is no longer accessible.

  • Tech stack: JavaScript, Python

Strava Activty Tracker

Screenshot of... Screenshot of... Screenshot of...
January 2024 - February 2024

This project visualizes my personal Strava data by connecting to the Strava API and graphing the results. Alongside data visualization, it also provides simple utilities for race pace calculations and mileage scheduling.

  • Originally hosted locally through VS Code’s “Live Server” extension before I understood how web servers worked.
  • Later restructured using Flask as a web framework, which allowed it to be deployed as a subdomain of this site.
  • Began as a small set of tools, with the long-term goal of evolving into a full training and scheduling hub. While I lost interest before reaching that scope, the project still gave me valuable hands-on experience with APIs, deployment, and Flask-based app design.
  • Tech stack: Python (Flask), JavaScript (Chart.js, FullCalendar), TailwindCSS, Nginx, Gunicorn, DigitalOcean