where it started

Older Projects

Before Georgia Tech, these are the projects that got me hooked on building things — everything from raw linear algebra rendered onto a screen to my first taste of putting an LLM to work. Click any project for the original write-up and screenshots, preserved from my first portfolio site.

3D Engine

3D Engine

Built from scratch with NumPy and Pygame, this program renders .obj files by projecting 3D vectors into camera-space and then onto a flat 2D screen. Linear transformations drive camera translation and rotation, and vectors are grouped into faces to draw the mesh.

Python NumPy Pygame Linear Algebra
view details →
Typing Wizard

Typing Wizard

A fully functional typing game built from scratch in Java with JFrame — complete with profiles, game modes, live stats, and theme options. Inspired by TypeRacer and MonkeyType, with timed and word-count modes and saveable profiles.

Java Swing / JFrame Game Dev
view details →
Contract Summarizer

Contract Summarizer

A web app that summarizes and explains any Terms-of-Service text or contract, section by section, via calls to open-source LLMs on HuggingFace. Detects roman-numeral / numbered sections (or chunks every ~800 words). Built with Streamlit on a Python backend.

Python Streamlit HuggingFace LLM
view details →
Radix Autocompletion

Radix Autocompletion

Started as a custom Radix Tree for my Data Structures final, then grew into an autocomplete engine storing an entire dictionary in one tree. Pick any node and trace its pointers to get every possible completion — running in O(k) time on the length of the prefix.

Java Data Structures Radix Tree O(k) search
view details →

3D Engine

PythonNumPyPygameLinear Algebra

Built from scratch with NumPy and Pygame, this program displays simple .obj files. You can move the camera around with keyboard inputs. The framerate is displayed on the top bar.

The program uses the concept of linear transformations from Linear Algebra to project the object vectors into another 3D “camera-space”, then finally onto the flat 2D “screen-space”.

By applying linear transformations to the vectors of the camera, translations and rotations can be achieved, resulting in camera movement.

Vectors are stored in groups as faces, allowing for a mesh to be drawn across the object.

Typing Wizard

JavaSwing / JFrameGame Dev

Built from scratch in Java using JFrame, Typing Wizard is a fully functional typing game, complete with profiles, gamemodes, stats, and theme options.

Choose between a set number of words or timed mode, and type as fast as you can to get a high WPS.

Inspired by my love for TypeRacer and MonkeyType.

Contract Summarizer

PythonStreamlitHuggingFaceLLM
Open the web app ↗

This web application summarizes and explains sections of any Terms of Service text or contracts.

To generate the summaries, the app makes an API call to an open-source LLM on HuggingFace, and does the same for the explanations.

If the original sections are labelled with roman numerals or numbers, the summaries will match those sections. If not, it will section off the contract every 800 words.

The web app was built with Streamlit, and hosted on Streamlit cloud. The backend is just Python.

Radix Autocompletion

JavaData StructuresRadix TreeO(k) search

This program originally started as a custom Radix Tree implementation for my Data Structures final project, but I realized it would be incredibly simple to do more with it.

The Radix Tree stores strings in a tree, where each node is a character. Each character node points to another character node, and the last character in the string is flagged.

This autocompletion program works by storing an entire dictionary in one Radix Tree. If you pick any node in the tree, you can get all the possible words by simply tracing the rest of the pointers.

Because the complexity of string search is a linear relationship with the length of the string, and there's a finite amount of autocompletions, this program runs in O(k) time.