Projects

Penn Mobile Dining Page

Penn Mobile

October 2021 - May 2024

Swift, SwiftUI, UIKit

iOS App designed to improve the student experience for the Penn community. Built with features such as dining hall menus, group study room bookings, and laundry machine availability using both custom API endpoints built by Penn Labs developers and API endpoints provided by Penn Administration. Used by over 7,000 students each month.

3D sphere rendered in ASCII text.

3D ASCII Renderer and
Animation Engine

June 2024

Python

Simple 3D rendering and animation engine that prints rendered image as ASCII in the terminal. Uses lambertian shading to shade the surfaces of objects given a point light. Animations can be created and displayed by passing a scene generator object to the animation engine. Customizations available include dark/light mode configurations, font character aspect ratio, and frame rate.

3D-rendered Minecraft water with waves.

Mini Minecraft

May 2024

OpenGL, C++

Final project for CIS 4600, Computer Graphics, created with Vishaal Kumar and Aarushi Singh. Terrain is rendered using custom OpenGL shaders, including post-processing shaders such as a distortion effect when the player is underwater. Terrain is procedurally generated from Fractal Brownian Motion on 2D Perlin Noise. Underground caves are generated using 3D Perlin Noise. Includes multithreaded terrain generation and VBO creation, to allow terrain to be generated and rendered concurrently with player movement. The game also includes animated blocks. Water and lava have texture animations as well as vertex buffer distortions to create moving waves, with Blinn-Phong reflection.

Fourier Visualizer writing 'Andrew' in script.

Complex Fourier Visualization

April 2024

Python, PyGame

Final project for PHYS 2260, computational physics, with Ethan Lior. Parses svg files into a path of points, and performs a complex Fourier transform on each dimension of this path. The sum of the component waves is visualized as a series of rotating circles connected tip-to-tail, with the amplitude of the wave represented by the radius of the circle, and the frequency represented by the speed of the rotation of the radius. Users can type any word they want, and the program builds the path from a set of svg files representing the lowercase and capital alphabet, and performs the complex fourier transform on this whole path.

Graph Network

ProfessorGraph

May 2022

React, Express, MongoDB

Final project for NETS 150, Market and Social Systems on the Internet. Scrapes the Penn course catalog to get a list of courses, and creates a graph where every professor is a node and there is an edge between two professors if they have taught the same class. Analyzes various network statistics about this graph, such as the average clustering coefficient, the professor with the highest betweenness centrality, and the size of the largest connected component.

Screenshot of Soccer Match Classifier Medium Article

Soccer Match Classifier

December 2022

Python, Pandas, Sci-Kit Learn

Machine learning model trained on data from over 26,000 soccer matches, designed to classify whether a soccer match would likely result in a win, loss, or draw for the home team. Cleaned dataset, performed exploratory data analysis, and trained lasso and ridge linear regression models in addition to a logistic regression classifier model, achieving classification accuracy of around 53%.

Almost! Web App screenshot

Almost! App

March 2022

Javascript, React, Express, MongoDB

Web app that allows users to view their weekly schedule and visualize how far through their current event they are. Also allows users to share their weekly schedule with friends through a custom share link. Created as final project for CIS 197, Penn's Javascript/React development course, and hosted on Heroku

Screenshot of Mini Golf Game

Mini Golf

April 2021

Java Swing, Maven

Mini Golf game created using Java Swing graphics library. Player chooses angle and velocity to launch ball to try to get it in the hole in the fewest strokes. Save game and undo options are available. Created as a final project for CIS 120, Introduction to Programming Languages and Techniques.