Projects

mzhan.dev

The website you’re currently on! I recently revamped this using a new framework I found called Astro, which takes an HTML-first approach to building websites, and only incorporates JS when necessary. View source code on GitHub.

Stock Data Generator

This was inspired by an interview question from a friend’s team: given a stream of stock data, design a system to query the max price in a recent time range. I thought it would be fun to build a simple version of this and visualize it. The Go backend simulates stock data with geometric brownian motion and serves it to the frontend through SSE. The frontend uses a sliding-window max algorithm to track the min and max prices in real time, with ChartGPU for visualization.

Mock Log System

I started this project mainly as a way to get more familiar with Kafka, but it also ended up being an exploration into HTTP and database best practices. The project is a simplified version of a log-tracking system like Humio. Logs are produced to a Kafka topic, distributed across multiple consumers, and are stored in TimescaleDB. A frontend then provides a simple interface for querying logs and viewing summary statistics, through a raw C++ HTTP server.

Monkey Interpreter

I wrote this project following Thorsten Ball’s book Writing an Interpreter in Go. It’s a interpreter for a simple language called Monkey, but includes all of the components of an interpreter, including lexing, parsing, and evaluation.

Pickleball Reservation System

A manager for automating pickleball reservations. Cron jobs automatically attempt court reservations through Playwright and are managed through an Express.js server. This is something I built to help my family out, who are currently addicted to pickleball. I first used Puppeteer to manage browser interactions, but later switched to Playwright after finding more success with it at work.

Multi-Agent RL Stakeholder Mapping

My master’s capstone project, a collaboration with the Frontline Negotiations organization, using multi-agent reinforcement learning to simulate a stakeholder negotiation scenario. We built a pipeline that digests background context using LLMs and suggests MARL-based strategies for negotiators to use to build consensus among stakeholders, with the goal of acting as a tool to be used in the field.

Hybrid Optimization Methods

This was an exploration of various optimization methods for a numerical methods class (Harvard’s AM205). It explores a combination of CMA-ES and ES (genetic algorithms) with Newton’s methods to optimize over a variety of functions.

Parallelized Chess Engine

This was a final project for a parallel computing class (Harvard’s CS2050), where we implemented a parallelized tree search chess engine using OpenMP and MPI in C++. The actual engine is pretty bad (around 1200 Lichess rating) given that none of us were good chess players, but it was a fun exploration into parallel computing on a less-traditional problem.

Rotating Camera Self-Calibration

An exploration of self-calibration techniques for a rotating camera, done for a computer vision class project (Harvard’s CS2831). In it, I implemented and analyzed the performance of a general self-calibration algorithm proposed by a paper I had read for the class. The class as a whole (taught by Todd Zickler) was pretty interesting, and I’m glad that I had the chance to take it.

Advent of Code 2024

This was the the one time I finished all 25 days of Advent of Code, with a couple top 1000 times. All of my solutions were done in Python. I did think that the later questions in the 2024 event were a bit easier than the later questions in other years, but a completion is a completion ¯\(ツ)/¯.

Split

A clone of Splitwise that I’ve used for vacations with my friends. It’s not the prettiest (due to my significant lack of an eye for design) and it still has some bugs, but it works well as a very minimal expense tracker. It’s a React frontend with a Go backend, using Postgres as a database. View source on GitHub.

Online Poker Chips

An online poker chips application I built when my friends and I were really big into poker but didn’t have an actual set of chips. It’s a room-based real-time application that uses websockets to work as a digital poker chip set.

Maze Generator

One of my friends in my Masters program gave a lecture series about mathematical visualization, and one of the topics was about maze generation. This inspired me to code up my own little maze generation, which uses randomized DFS. There are other approaches such as the MST algorithms (Kruskal’s and Prim’s) and other algorithms I’ve never heard of before, but I haven’t dug that deep into them yet.

Sort Algorithm Visualizer

This was inspired by that one “sounds of sorting” video that I’m sure we’ve all seen at some point in our lives. It’s a similar visualizer of various sorting algorithms that I threw together, getting a better feel for React patterns and TypeScript generators.

Conway's Game of Life

A C++ implementation of Conway’s Game of Life using the gtkmm API. This was a very brief foray into C++ for me, but I was also trying to figure out how much I cared about UI design and visuals in these side projects.

Book Recommender

I didn’t really know where to go with this project when I built it, but I ended up learning about integrating with Google’s SSO process and dealing with authentication in Next.js. It’s a fairly simple book recommendation app that lets users store books, then queries the Google Books API to get recommendations based on these books.

Minesweeper

A minesweeper clone I built in Java using the (probably outdated) Swing library. This was in a time where I was addicted to playing Google’s browser minesweeper, but it’s not a bad project to think through game logic and UI design.

Fairshare

This was the very first project I ever made. It’s a cost-splitting web app that splits spending across a group of people. I spent a long time figuring out how to deploy this (since I really didn’t know anything at the time). I have since revisited this idea and rebuilt it as Split.

bioRxiv Newsletter

A weekly email newsletter that I made for my dad to push him recent bioRxiv preprints. Includes searching and filtering, and hits the public bioRxiv API. This was my first introduction to sending automated emails over SMTP.

Weather App

I was messing around with public weather APIs and decided to make a simple weather app that lets users display the current and forecasted weather for a given location. It was definitely a slop project, but it helped me learn a bit more about best practices and work with Next.js, so a win’s a win.