πprojects

Things I've built. Some for class, some because a problem annoyed me, most at unreasonable hours. Newest first.

SikSak

ai · agents · fastapi · next.js

ChatGPT, Claude and the rest are great at getting things done. They're not built to make you better at anything. SikSak is an AI tutor optimised for learning: it plays mentor rather than assistant, keeps a memory of you to shape each session, and carries learning-specific tools that make it agentic instead of just chatty. There's a bit of special sauce in how it drills you, borrowed from how people prepared before AI existed.

Python and FastAPI on the back, Next.js on the front. In progress, and the project I think about most.

mentor persona · long-term memory · learning tools · agent loop

Claude Project Downloader

chrome extension · on the web store

Export the Claude.ai projects you already have access to: the knowledge-base files, the chats, or the whole project as one ZIP. PDFs and images come out untouched; formats that can't be read back losslessly get an honest choice instead of a silently broken file. Everything runs locally in your browser.

files · chats · zip · markdown conversion · local only

Mass Unfollow for Instagram

chrome extension · javascript

Reads your following and followers lists and sorts everyone into three tabs: not following you back, everyone you follow, and fans you could follow back. Tick who you like, fire, and it hands you a CSV of who it touched so you can undo your own mind. No password, no server, runs in your logged-in session. The README spends most of its length warning you that Instagram doesn't like this, because it doesn't.

bulk unfollow · follow back · csv export · rate caps

TrickleType

chrome extension · google docs

Types a draft you already have into a Google Doc at a human pace, over anywhere from one minute to four hours, instead of dropping the whole wall of text in at once. Paste, pick a duration, press start, and review it as it lands. Free, no account, and your text never leaves the browser.

Poison bottle

python · a riddle

A senior engineer gave me this one: a thousand bottles of wine, one is poisoned, you have ten prisoners and one night. Find the bottle. The answer is binary, and this script simulates it, with flags for how many bottles, how many prisoners, and which bottle is the bad one. Runs straight from curl.

curl -fsSL <raw url> | python3 - --bottles 512 --prisoners 9
Poison bottle simulation output

World Cup 2026 predictor

numerical methods · python · westcliff bsit 400

Who wins the 2026 World Cup? A logistic regression trained on 49,000 international matches going back to 1872, then ten thousand Monte Carlo simulations of the tournament. No scikit-learn: the linear algebra is an LU solver, the regression is gradient descent, the decision threshold comes out of a Newton-Raphson root finder, and the features are ELO ratings computed from scratch.

Run main.py and it prints the top ten championship probabilities and saves the plots. Final project for Numerical Methods, and the reason I now actually understand what a solver does.

lu decomposition · gradient descent · newton-raphson · elo · monte carlo

Spotify valence explorer

ml · recommender · streamlit

When you like a track, finding others with the same feel is tedious and playlist radios are biased by popularity. This app takes a song and returns the ones closest to it in audio-feature space: valence, energy, acousticness, tempo. A nearest-neighbour index over a Kaggle dataset, with radar and heatmap views to see why two songs sit together. No Spotify API on purpose, to keep the focus on the model.

feature scaling · nearest neighbours · radar plots · eda notebooks

Invisible

cloud · aws · wireguard

A personal VPN on WireGuard, provisioned on AWS EC2. Made because commercial VPNs were slow, and because I had just earned my Solutions Architect Associate and wanted to use it.

free-tier friendly · fast · easy setup · zero logs
Invisible VPN diagram
· earlier, 2025

GlassWave

web · audio

A glassmorphic audio player for the browser: playback, playlists and a visualizer on top of the plain HTML5 audio element.

GlassWave screenshot

Rhythmlizer

python · cs50p final

A music visualizer with six "elementals" that react to audio in real time.

Rhythmlizer screenshot

Sabda शब्द

flask · cs50x final

A web-based word-guessing game. Clean interface, stubborn puzzles.

Sabda screenshot

Chatty, the nice bot

c++ · anthropic api · tts

A conversation bot in C++ that talks to the Anthropic API and reads its replies out loud. Capstone for OOP210, so yes, there are classes.

Chatty screenshot

Titanic Survivor

ml · streamlit

Would you have survived the Titanic? A small web app asks a few questions and lets a model guess.

Titanic Survivor screenshot