Job-Matcher

Tech: Python, OpenAI API, Adzuna API, Docker, GitHub Actions

For this project, I was assigned to create an tool that would get job postings, then run them through OpenAI to get a similarity value. This helps to get rid of the tedious part of the job search.

How it works

The project runs as a pipline with certain processes being executed thorugout.

  1. Fetch – Pulls job postings using Adzuna API
  2. Preprocess Cleans the data (removes HTML tags, special characters, etc.) so it can be used
  3. Embed – Converts the job postings and resume into vector embeddings using OpenAI’s API
  4. Compare – Uses cosine similarity to “score” each job on how closely it matches the provided resume; it then returns the top 10 matches

Each stage is its own script, so the pipline can be run step-by-step or all at once.

Design Decisions

Partway through, I refactored the code to follow SOLID principles, specifically Single Responsibilty and Despedency Inversion. I pulled the embedding logic into its own interface, so that the OpenAI service could be swapped for another without touching any part of code. This made the project easier to test, so I could mock the embedding instead of using tokens with the API service.

To document the architecture, I put together a UML class diagaram, which shows how certain components relate to each other. I also made a UML sequence diagram, showing the order of operations such as fetch, preprocess, embed, and compare. This made it easier to keep track of the system itself.

Deployment

The whole thing is containerized with Docker, so it can run without having Python on your local machine. All yu would have to do is clone the repository, add an .env file with API keys, and run the container. I also set up a GitHub Actions CI/CD pipeline to automatically run the test on every push.

What I learned

This project pushed me to thing about software architecture. Refactoring for SOLID principles after the fact taught me a lot about why they matter in the first place. The code became easier to test and modify.

For more details on this project, (and how to run it yourself), check out the GitHub repository: https://github.com/HunterC04/Project2-CS325