Oliver Cai
About Me
I'm a rising fourth year undergraduate at the University of Chicago studying computer science and mathematics. I'm currently working as a software engineer intern for Coinbase. Below are some of my projects.
Personal Projects
Attractiveness Leaderboard
I built this mobile application for my university's hackathon. The original prototype used a barebones Flask backend to pipe pictures taken using a React Native frontend through a machine learning model that isolated faces from pictures and scored them. It was badly designed on my part, as I fetched these huge uncompressed image files in a single http request and stored them in the worst possible format (base64 encoded) in memory. Once I hit the 30 picture threshold, the leaderboard interface constantly crashed, and with it, my hopes of impressing the judges. I was very happy with the initial results however, and I'm currently in the process of reviving the project. I've migrated the backend to FastAPI and incorporated S3 into the stack in order to store the static image files. I also am redesigning the frontend so that downloaded pictures are cached in the device filesystem and am looking into ways to asynchronously fetch images in order to speed up render times.
Reverse Proxy Server
WIP. This is a small project that I've wanted to work on ever since I found out that you need to pay for ELB on AWS. The final version would be able to parse a file with certain routing conditionals and then direct traffic to different backend services. The architecture is based on the Node event loop, with a thread pool meant to handle heavy workloads. Currently I have the thread pool down as well as the kqueue event loop.
A specialized photography application meant for social media influencers. Working on this application gave me my first taste of what it was like to publish an application to the App Store. The current version includes a dashboard to cache image taken with the application, and the main camera interface. The defining feature is the special translucent component that sits on top of the camera, which took me ages to figure out since its movement is supposed to be contained within a certain space while also being really flexible.
Sanitas: Hospital Price Transparency
A web application that aggregates all the pricing data for certain medical procedures. Working on this project was the first time I entered a hackathon alone. My group members were much older and more experienced than I, but I was still able to be of some use in the end thankfully. I was mainly responsible for the backend, which is integrated with Google Firebase to provide that extra layer of middleware authentication.
UChicago Web Course Helper
A web application meant to improve the CS course search experience. I whipped this up really quick with some of my classmates for a competition at my school. It essentially grabs all of the course reviews for a given class and allows the user to easily search up a class. There was also supposed to be some grading data aggregation. I have yet to migrate this from heroku ever since they depreciated their hobby tier.
BLE Social App
A mobile application that allows users to connect with one another via bluetooth. I originally meant to develop this for a hackathon, but didn't end up finishing it in time. Most of my effort was spent trying to nail down Redux Saga, which is probably one of the only ways to interface safely with the React Native BLE emitter. I ended up learning a lot about generator functions and state management even if the final product was somewhat broken. The interface currently detects nearby devices with bluetooth, and checks if the name and MAC address pairing corresponds with an existing user.
Shell Simulator
A C application that acts as a shell, parsing all bash commands and several piping operators.
Pretty Rails Blog
My first rails application. I was super happy with how it turned out visually, but the rails backend is honestly a mess. At the time I made this there was a pretty bad turbolinks bug that essentially made forms unusable in certain situations, which took me a long time to figure out given that I knew little about how rails worked. I also have yet to port this over to AWS.