My Projects

Things I've built from scratch. No frameworks — I wanted to actually understand what I was doing.

Twixt — Command Line Game

C Algorithms Graph Traversal Data Structures

Twixt is a connection board game — you're building a network of pegs and bridges across the board and trying to link your two sides before your opponent links theirs. I built a command-line version of it in C for my first-semester CPRO course.

It runs entirely in the terminal. No graphics, just coordinates and state. That was a deliberate choice: keeping it to standard C libraries meant I couldn't lean on anything external, so I actually had to think about how to represent the board and detect wins through graph traversal. It also meant the hardest part of the project was the logic, not the setup.

If I built it again, I'd clean up the pathfinding code into proper modules, and maybe try ncurses for a better terminal interface. The current version works, but the code structure shows its age.

What I learned

Graph traversal for win detection, manual memory management in C, and why you should design your data structures before you start writing functions around them.

Terminal Spotify Clone

C Linked Lists Data Structures Memory Management

A command-line music manager in C — you can browse a song pool, build playlists, and move between tracks with next/previous. I built it to get hands-on with linked lists, which are the obvious fit for playlist ordering since you're constantly inserting and removing in the middle.

It doesn't play audio. That sounds like a failure but it was actually the constraint I needed — no external libraries meant the whole project was just memory management and state tracking, which is what I was trying to learn.

The main thing missing: file I/O. Your playlists exist exactly as long as the process does. Close the program and everything's gone. I'd add that first if I went back to it.

What I learned

Linked list implementation, dynamic memory allocation, and how to track state across multiple operations without letting things get out of sync.

ESP32 Obstacle Detection System

C++ ESP32 IoT Hardware Sensors

An ultrasonic distance sensor and an ESP32 microcontroller. The sensor pings, measures the echo return time, and the ESP32 calculates how far away the obstacle is. Built for an IoT lab — the goal was to get something working in hardware, not just simulate it.

If I built it again, I'd push the sensor data over Wi-Fi to a live cloud dashboard, which the ESP32 actually supports natively — I just didn't get there during the lab.

The tradeoff I made was keeping it wired rather than wireless. The ESP32 supports Wi-Fi natively and you could push the sensor data to a cloud dashboard, which would've been more impressive. But I had enough to figure out on the C++ and sensor polling side, and adding network overhead on top of that during a lab seemed like a good way to break everything and not know why.

It works, the numbers are accurate, and I actually understand what every line of the firmware does. That felt like the right outcome for a first hardware project.

What I learned

Hardware-software integration, bare-metal C++ for embedded systems, and how different writing code for a microcontroller is from writing code for a machine that has an OS under it.