All Projects

SAP's technical documentation is massive and genuinely painful to search, so I built a retrieval-augmented generation (RAG) pipeline that lets you ask a question in plain English and get an answer grounded in the real docs.

Project screenshot 1

How it works: I split the documentation into chunks, turn each chunk into an embedding, and store them in a vector index. At query time the question is embedded too, the most semantically similar chunks are pulled back, and those get handed to the LLM as context — so answers stay accurate and traceable instead of hallucinated.

Project screenshot 2

It cut the time I spent digging through manuals down to seconds. Next I want to add a reranking step and a proper evaluation set to measure answer quality. (Expand on this later.)

Long streamer VODs are full of good moments buried in hours of footage. This platform automatically finds those moments and turns them into short-form clips ready to post.

Project screenshot 1

How it works: scripts scan the source video, score candidate moments, then crop, reformat and caption the best ones into vertical short-form clips — the whole pipeline runs without me ever opening an editor.

Project screenshot 2

It turns an afternoon of manual editing into a few minutes of processing. I'd like to sharpen the moment-detection so it picks highlights even more reliably. (Expand on this later.)

A playable chess engine I built from scratch to understand how game-playing AI actually works under the hood.

Project screenshot 1

How it works: it generates all legal moves for a position, scores each resulting board with an evaluation function (material, position, king safety), and searches a few moves ahead to choose the strongest line.

Project screenshot 2

It plays a solid game against a casual player. Next up are an opening book and a deeper, faster search so it can look further ahead. (Expand on this later.)

An experimental, AI-assisted tool that drives a real browser to probe a website for common security issues — built strictly for authorized testing and learning, not for use on sites I don't own.

Project screenshot 1

How it works: Selenium automates the browsing, form-filling and navigation, while the AI layer decides what to try next and flags responses that look suspicious or misconfigured.

Project screenshot 2

It's a sandbox for exploring how automated security scanning could work. I'd expand the range of checks it runs and add clearer reporting. (Expand on this later.)

A real-time tool that detects and censors profanity in live video or audio as it streams.

Project screenshot 1

How it works: the audio is passed through speech recognition, transcribed words are matched against a filter list, and any flagged segment is muted or beeped with as little delay as possible.

Project screenshot 2

The main challenge was keeping latency low enough to still feel live. I'd focus next on improving accuracy on fast or unclear speech. (Expand on this later.)

sheffmsg.fun is a location-based social site I built where people leave messages pinned around Sheffield for others nearby to find — it grew to over 600 users.

Project screenshot 1

How it works: users drop a message tied to a physical location, and anyone in that area can read what's been left there. It's backed by a Python/Flask server with a map front-end.

Project screenshot 2

Watching real people actually use it was the best part. I'd add moderation tools and notifications if I took it further. (Expand on this later.)

A reinforcement-learning agent that teaches itself to solve the code-breaking game Mastermind.

Project screenshot 1

How it works: it uses tabular Q-learning with epsilon-greedy exploration, learning which guesses pay off over thousands of games. By tuning the state-history length and exploration rate I got it to a 100% win rate, versus 31% for a random baseline.

Project screenshot 2

It was a great hands-on way to see how reward shaping and exploration settings change learning. Next I'd try a neural approach for larger code spaces. (Expand on this later.)

A scraper that takes a business type and a location and returns a ready-to-use CSV of matching businesses' phone numbers for sales outreach.

Project screenshot 1

How it works: it queries local business listings, parses the results, dedupes the numbers and exports everything to a clean CSV — no manual copy-pasting.

Project screenshot 2

It turned hours of manual lookup into a single command. I'd add more data sources and basic validation of the numbers. (Expand on this later.)