Projects

This page describes a few personal projects I've made, in no particular order. Generally, I make these in order to deepen my understanding of a topic I'm interested in, or practice some aspect of software engineering I've learned. If I happen to come up with ideas that help other people, that's a big plus as well. You can find all of my projects on my Github.

MapIT

View the site: https://mitmapit.org

A screenshot of MapIT

A full stack interactive campus map of MIT, displaying 900 floor plans containing the locations of over 40,000 rooms, complete with a search feature. Definitely my biggest undertaking to date; I worked on this with others from AppDev@MIT for several weeks over summer 2025. The site currently serves hundreds of students (and growing) after our initial launch at the start of the full semester.

There were a lot of very interesting technical challenges involved. The first was how to even get the location of each individual rooms to put a map pin on each one. We ended up deciding to overlay the floor plans on the map; this made handing rooms easy, since we could just store the room's location relative to the floor plan. Then, once we had the translation, rotating, and scaling of the floor plan, we can apply this same transform on the "relative" room location to get an absolute location. There was a lot of webscraping to make this possible.

But how to actually get these relative locations? I experimented with several methods combining OCR and manual labeling. Eventually, working with a friend, we realized that by a complete stroke of luck, we could separate out the text from the lines; then, with some clustering, the OCR algorithm had much higher accuracy.

The last challenge was loading and displaying the floor plans. I contributed the most to this sector of the codebase; I was able to apply many design patterns I was learning in order to handle some fairly complex UI logic concerning which map to display and how exactly to show them (png, svg, canvas, etc.). We dug up and redesigned the underlying architecture and libraries to do this no less than five times, but the end result is quite clean and performant, I quite like it.

The tech stack includes React, Vite, Express, and MongoDB. Currently deployed on AWS, but I'm hoping to self host somewhere closer to MIT (since where that's the vast majority of our traffic comes from).

Brass Rat Puzzle Hunt

View the site: https://brassrathunt.org

A full stack website to host the 2025 Brass Rat Puzzle Hunt, a promotional event for the annual class ring. I built the site from scratch without using existing puzzle hunt frameworks so it would feel like an early internet style minimalist email system. It also features a progressional unlock system and answer checking. The site served roughly 200 teams that participated.

I built it with React, Vite, Django, and SQLite. It's deployed on AWS with a custom nginx configuration, because some middleware I used for integration made traditional deployment a bit difficult. See the source code here.

Omegacat

A discord bot for the MIT Class of 2028 discord server I developed over the summer of 2024. It's primary purpose is to conveniently lookup class information from a course number, as MIT's obsession with numbers is often cryptic, and provides a system to help students find other freshmen in their classes. It also has a few games for fun; notably, a variant of Reaper by AoPS, a currency and gambling system, and a surprisingly difficult collaborative counting challenge.

I built it with discord.py and SQLite; it is currently hosted on AWS. You can view the source code here.

Technologic

An automatic solver for grid-based logic puzzles. It currently supports sudoku and Nurikabe type puzzles, although the implementation is designed to be flexible and accomodate other puzzle types as well. It was inspired by a homework assignment in 6.101 (Fundamentals of Programming) regarding boolean satisfiability problems and conjunctive normal form. Unlike other solvers, I wrote the core SAT solver from scratch with custom optimization for the grid based nature.

It performs fairly well; sudoku is quite easy (typically under 0.1s, it can solve the World's Hardest Logic Puzzle in under a second). Nurikabe is a bigger challenge, and it does time out on some of the more difficult puzzles.

You can find the source code here, as well as a few tests and examples. It's currently work in progress; text file input should hopefully be coming very soon.

Personal Website

The website that is displaying the text describing this website, which displays text describing this website, which displays text... woah.

I built it with the Next.js framework and TailwindCSS. You can find the source code here.