Projects

Things I built because I wanted to see them work. Each one has its code on GitHub. Walk through the maze to meet them, or scroll down to read them all.

Or read them all

WHOOP Health Intelligence Agent

An email that knows how I slept before I do.

Each day this agent pulls my numbers from the WHOOP fitness tracker, reads the notes I wrote, and has Claude turn it all into a personal health summary that lands in my inbox. It speaks first, so I never have to ask. Python and Flask run it, OAuth 2.0 keeps my data safe, and a scheduled task sends the email every day through Gmail.

How it works

  1. I sign in once

    OAuth 2.0 lets the agent read my WHOOP data without ever seeing my password.

  2. The numbers arrive

    Each day the agent pulls my health numbers from the WHOOP service.

  3. My notes join in

    It reads the notes I wrote, so the summary knows how the day felt as well as how it measured.

  4. Claude writes the summary

    Claude turns the numbers and my notes into a short, personal health summary.

  5. It lands in my inbox

    A scheduled task sends the email through Gmail, so the agent speaks first and I never have to ask.

See the code on GitHub

Pathfinding Visualizer

Watching an algorithm think.

I wanted to see how a computer finds the shortest way through a maze, so I built a grid you can fill with walls. Dijkstra's algorithm spreads out across it, runs into dead ends, and finally lights up the best route. It's a React app, and the grid on my home page is its little cousin.

How it works

  1. Draw the maze

    Click or drag on the grid above to place walls. Click a wall again to take it away.

  2. The search spreads out

    Starting from the open circle, the algorithm looks at every neighbouring square, then their neighbours, like a ripple on water.

  3. Dead ends fade out

    When the ripple hits a wall it flows around it. Squares with nowhere left to go simply stop spreading.

  4. The best route lights up

    The moment the ripple reaches the filled circle, the algorithm walks back the way it came and draws the shortest path in amber.

See the code on GitHub

Power of Math

A cloud app with no server to look after.

This web app runs entirely on AWS serverless services. Amplify serves the pages, Lambda functions do the work behind API Gateway, and DynamoDB keeps the data. Building it taught me how every piece of a cloud app talks to the others without a single machine to manage.

How it works

  1. The page loads

    AWS Amplify serves the pages, so there is no web server for me to run.

  2. A request goes out

    When you use the app, the page sends a request to API Gateway, the front door of the backend.

  3. A function wakes up

    API Gateway calls a Lambda function that does the work. It only runs when it is needed, then goes back to sleep.

  4. The data is kept

    DynamoDB stores what the app needs to remember, and it scales without a database server to look after.

See the code on GitHub

Python AI Agent

An assistant that picks its own next step.

Instead of following a fixed script, this agent decides which tool to use and remembers what we talked about. I built it with Python, LangChain and LangGraph to understand how an AI agent chooses what to do next.

How it works

  1. You ask something

    The conversation starts with a plain question or request.

  2. The agent decides

    Instead of following a fixed script, the agent reads the question and chooses which tool, if any, to use.

  3. A tool does the work

    The chosen tool runs and its result goes back to the agent, which can decide again until it has what it needs.

  4. It remembers

    The agent keeps what we talked about, so a follow-up question makes sense. LangChain and LangGraph tie the loop together.

See the code on GitHub

Resume Critiquer

A second opinion on a resume before a recruiter gives theirs.

Upload a resume and get honest feedback, plus a look at how applicant tracking systems may read it. The screen is built with Streamlit and the feedback comes from the OpenAI API.

How it works

  1. Upload a resume

    A Streamlit screen lets you drop in your file, with nothing to install.

  2. Honest feedback comes back

    The OpenAI API reads the resume and says what works and what does not.

  3. See it like a robot would

    The app also looks at how applicant tracking systems may read the resume, which is the first reader many recruiters never see.

See the code on GitHub

Book Cataloging System

A library shelf, turned into a database.

This was a team project where I led a group of three to build a system for cataloging books. PHP runs the pages, SQL stores every title, and Git kept the three of us from stepping on each other's work.

How it works

  1. Pages in PHP

    PHP builds the pages where books are added and looked up.

  2. A SQL database remembers

    Every title lives in a SQL database, so nothing is lost when the page closes.

  3. Three people, one project

    I led a team of three, and Git kept everyone's work together without anyone overwriting anyone else.