A showcase of my solo and group work
This interactive art project invites visitors to create their very own unique fish through a web-based generator hosted on AWS. Using a React-powered interface, each guest entry is logged into a Google Spreadsheet, where a Python program actively scans for new submissions. The program then generates custom fish textures and metadata, bringing each creation to life. These digital fish are seamlessly imported into a Unity-powered ocean simulation, where they join a living ecosystem alongside sharks modeled after real whale shark behavior. The result is a dynamic, evolving underwater world—built collaboratively by the audience—where art, code, and nature-inspired AI merge into an immersive experience.
Michi is a multimodal conversational assistant designed to feel more like a friend than a standard virtual helper. It integrates short-term and long-term memory, combining a vector database for contextual recall with MySQL storage for persistent facts and emotional states tied to each person it interacts with. Michi not only handles tools and actions through inline commands but also maintains dynamic emotional awareness, adjusting its responses based on user sentiment and past interactions. Over time, it evolves its mood and tone uniquely toward each person, creating more natural and personalized conversations. The project uses local LLMs for dialogue, OpenAI APIs for structured fact extraction, and a modular tool system to extend capabilities (e.g., time lookup, external APIs). With conversation logging, mood tracking, and memory-driven context injection, MichiAI blends functionality and personality into a single evolving companion.
A Python-based tool that combines Google Maps APIs and OpenWeatherMap to deliver accurate, real-time weather information for any location. Users can type natural queries like “la”, “bay area”, or “my dorm near UCLA”, and the program intelligently resolves the input into a precise city using geocoding and alias handling. It then retrieves live weather data such as temperature, humidity, wind, and conditions, presenting results in a clean, structured format along with a human-readable description. The program features robust error handling, support for unit preferences (imperial/metric), and easily extensible alias mapping.
This is a dynamic personal portfolio website hosted on AWS, leveraging S3 buckets for static asset storage and EC2 for backend hosting. The site is built with Spring Boot and JTE templating, providing a clean and efficient way to showcase both current and past projects. Project information is stored in lightweight JSON files on the EC2 instance to reduce costs, rather than relying on Amazon’s managed RDS service. For more detailed write-ups, the site serves static HTML pages, enabling in-depth exploration of select projects while maintaining a cost-effective and scalable architecture.
This program is a lightweight desktop app that lets you download high-quality MP3 files from both YouTube and Spotify, supporting individual songs as well as full playlists. It automatically detects the type of link you provide, uses yt-dlp for YouTube and spotdl for Spotify to fetch the best audio, and converts it to MP3 using FFmpeg. All downloads are saved to a single downloads/ folder, with real-time status updates shown in the built-in log window, making it an easy, all-in-one tool for building your personal music library.
This project is a Discord bot that delivers a daily Word of the Day in Tagalog, complete with definitions, example sentences, and explanations. Every 24 hours, the bot automatically generates a new word, ensuring a fresh learning experience for users. To avoid repetition, all previously used words are stored in a JSON file. The bot leverages OpenAI to intelligently source and explain new Tagalog words, blending language learning with AI-powered content generation.
This is a typing test application built with Python that combines real-time performance tracking with AI-powered sentence generation. It uses multithreading to handle time tracking, input monitoring, and live stat updates smoothly, ensuring a responsive experience. Tkinter provides the GUI, displaying progress and results in real time. Sentences are dynamically generated through GPT-4o (OpenAI API) with a specified word count, while FuzzyWuzzy handles accuracy scoring by comparing user input against the target text. Together, these features create an interactive and adaptive typing test that measures speed, accuracy, and consistency.
This project is a recreated and enhanced version of the school’s portal page, designed to unify and streamline its scattered features into a single cohesive interface. Unlike the original portal, which is cluttered and fragmented, this custom build focuses on simplicity, usability, and efficiency, bringing all the essential tools and information together in one well-structured page.
This is a demo search engine system that processes video data from a CSV file and stores it as structured Video objects in an ArrayList. Implemented a Markov Chain to model relationships between videos and used fuzzy string matching to enable flexible search by title or tags. Designed a custom relevance ranking formula that combines video statistics (views, likes, comments, dislikes) with Markov probabilities, producing smarter search results. Also generated a normalized probability matrix to visualize video-to-video recommendation pathways.
This project is a Dungeons & Dragons–style adventure game built on top of a procedurally generated maze created with a maze generation algorithm. As players navigate the labyrinth, they can encounter treasures, spells, potions, and enemies, with combat mechanics closely modeled after traditional D&D gameplay. The primary objective is to escape the maze, but exploration is key — players can only see their immediate surroundings and available movement directions from their current position. This limited visibility forces them to map out the maze manually and keep track of their progress, adding a layer of strategy and immersion to the experience.
Blackjack Game (Not Longer Working) This is a Python-based Blackjack card game featuring a simple graphical user interface and an automated dealer system. Players can gamble with virtual currency, place bets, and play against the dealer in classic Blackjack style. The game includes basic animations to enhance the experience, simulating card dealing and gameplay flow. Although it is no longer maintained or functioning as intended, it demonstrates early work in combining Python, UI design, and game logic to recreate a casino-style card game.
A simple application that tracks accidents within a specified area. Users can pin a location using latitude and longitude, set a radius, and view the most recent accidents reported within that range.
This is an old clicker game i made inspired by a horror short story i read a log time ago.