My Project Write-ups
StringNum
Why I built this project:
I had an idea for a number system because integers have a small range and lack decimal components. Then, floating point can have rounding errors and cannot represent every possible number. I wanted to use a system with near-infinite precision; however, I was unaware of BigNum systems. This was a great opportunity to build one from the ground up.
What has been made:
I have currently implemented addition, subtraction, multiplication, prefix and postfix operators, all relational operators, and some helper functions.
How:
I wrote the project in C++ to be fast and usable in C++ and Python. The numbers are represented internally using strings, as they have more useful features than char arrays.
I used test-driven development to help create features and correctly implement the basic math functions. When I methodically tested my code, I always found something I wanted to fix.
What I would add next:
More number systems [binary, hexadecimal], division, and compound assignment operators.
Reflection:
This project was a learning experience in managing and debugging a large, interconnected codebase and determining how and where to fix whenever I encountered a bug.
It also strengthened my understanding of operator overloading, algorithmic thinking, and designing components that work together effectively.
Balatro Mod
Why I built this project:
Since I played a lot of Balatro [a fun roguelike deck builder], I wanted to make a mod for the game.
What has been made:
The mod introduces three jokers, two consumables, and one enhancement that interact through a shared gameplay mechanic.
How:
It was an interesting learning experience in trying to figure out how to create certain card effects, as the documentation was difficult to find and scattered over Discord and GitHub when I was making my mod.
It was interesting to try programming in Lua, but it was mostly reverse engineering undocumented behavior from the documentation on Discord and tweaking it to make it work the way I wanted.
I had an interesting experience with one mod that was corrupting some of the features I was using, so I had to debug and figure out which mod was causing my code to fail and update it.
It was also fun creating the art for my mod, as I learned a small amount of image editing to make some cards pop.
Reflection:
This project was a very practical experience and made me more interested in creating high-quality documentation for my future projects because of the major difficulties I had with Steamodded.
Made with Lua, Steamodded
Student Grade Calculator
Why I built this project:
I started this project to learn about React over the summer. Then, after learning more about React in school, I revisited this project to implement better design patterns and polish up my React knowledge.
What has been made:
I developed a project that dynamically calculates the grade in real time. The user can add as many assignments as they want with their name, grade, and weight.
How:
I used React hooks (useState) to hold the dynamic variables and pass functions down to each grade so the values can be changed.
After gaining more knowledge in React, I created a higher-quality mobile view, modernized the component format, and utilized higher-level JavaScript functions like map and spread operators. I also simplified the UI and removed unnecessary complexity and functions.
Reflection:
This project helped me learn React and retain the knowledge I learned in school. Some of the knowledge it reinforced was building simple, debuggable code and designing UI that works on different screen sizes.
Fractional Approximation of Pi Calculator
Why I built this project:
I was looking for something to program and thought about how certain fractions approximate Pi, such as 22/7 or 335/113. I thought it would be interesting to create a program to find the best approximations.
What has been made:
I designed a brute-force approximation engine that goes through every possible combination of fractions based on a defined upper bound. It determines which fractions are closest to Pi, ranks them, and displays them to the user.
Main challenge:
I attempted several strategies to prevent equivalent fractions (e.g., 44/14 and 22/7) from appearing multiple times in the rankings.
First, I typecast values into integers and checked if they matched surrounding rankings using the modulo operator. This failed because I wanted the user to be able to use decimal components for both numerator and denominator.
I then checked if two numbers were extremely close together so duplicates would not appear, but this caused issues where non-equivalent fractions were sometimes skipped.
Finally, I created a solution that did not slow down the program. I adjusted the previous solution so the lower bounds were divided by the maximum denominator being checked. This solved the problem in a simple and efficient way.
Reflection:
The project was useful in creating a program that can be configured by end users and properly documenting the code.
Easy Image Signature
Why I built this project:
When working on my 3D modeling projects, I often did not put my name on my work because it took too much time. To improve this, I programmed a project to quickly sign my images.
What has been made:
A program that adds my name in a consistent way to either a single image or an entire folder of images with only one line in the command prompt.
How:
I used FFmpeg to add text to images and Node.js to orchestrate the surrounding logic and file handling.
What I would add next:
Support for video and more options.
Reflection:
The program has signed 20+ images successfully. The project saved time and encouraged me to sign my work more consistently.
ASCII State Diagram Maker
Why I built this project:
During my software testing class, the teacher discussed state diagrams, and I got the idea to build a simple ASCII state diagram maker to practice arrays and learn TypeScript.
What has been made:
A program that generates state diagrams using ASCII boxes and arrows.
How:
I first wrote a function that returns a 2D array containing ASCII boxes with labels inside them, with adjustable height and width.
Next, I created a function to assemble the full diagram with boxes and arrows. The system supports arrows between nearby boxes as well as arrows that route underneath boxes to represent more complex relationships. The boxes are centered relative to each other.
What I would add next:
Support for more shapes and arrows coming from the top of boxes.
Reflection:
The project was productive: learning a new language and creating something based on what we covered in class for other students.
First Pull Request for Balatro Mod
Why I worked on this project:
I began this project because two of my mods were conflicting and I wanted to be able to play with them together.
What has been made:
I made a small fix to one of the jokers to check if a variable exists before performing calculations with it to prevent a crash.
How:
I thoroughly tested what was causing the problem to make sure I could accurately replicate the problem and see that it was a wider problem than just my computer. Then I looked over the file that was mentioned in the stack trace and added a one line change to fix the crash.
Reflection:
This project gave me experience contributing to an existing codebase and submitting a pull request to a larger repository.
La Tortuga Foundation EMR / Capstone
Why I worked on this project:
I began this project as my capstone and became interested in the values of the foundation and want to help them.
What has been made:
We built an offline-first electronic medical record (EMR) system designed for clinics with no internet access.
How:
We used React Native, Nativewind, and SQLite with a 3-person team.
I contributed to everything, but mostly the inventory manager, database implementation, and offline-first synchronization design.
View Code
Made with React Native, Nativewind, TypeScript