Inspiration

When we were in Year 2, we realized that finding the right job was harder than we expected.

We had to check different job postings, read through all the requirements, and manually compare them to our own skills, education, experience, and location to figure out which job suited us best.

We thought why can't a system do this comparison for us?

That's how we came up with Job Matcher, a tool that helps job seekers find jobs that actually fit their background.

What It Does

Job Matcher lets users enter their skills, work experience, education, languages, and preferred location.

It then compares their profile with job postings and ranks them based on how well they match.

Job Matcher  understands related skills and job requirements. Users can also see a match breakdown and identify skills they may be missing.

How We Built It

We built Job Matcher using Python, Django, and PostgreSQL.

We collected and processed around 1,400 real job postings and created a skill vocabulary of around 380 skills and aliases to make messy job data easier to compare.

For semantic matching, we use AI embeddings with fastembed and BAAI/bge-small-en-v1.5. PostgreSQL with pgvector helps us search and compare job information efficiently.

Challenges We Faced

Messy Data

Real job postings are not always clean. They can contain irrelevant text, inconsistent skill names, Khmer text fragments, and confusing abbreviations. We had to build a cleaning and normalization process before the data could be used reliably.

Limited Data Access

Not every website allows us to collect their job listings. This limited the number of sources we could use, so we focused on sources that we could access and process responsibly.

Running AI on Limited Resources

Our first AI approach required more memory than our free hosting environment could provide. We switched to a lighter ONNX-based solution using fastembed, which allowed us to run the model with much lower memory usage.

Deploying an AI Application

Getting the project working locally was easier than running it online. We faced issues with memory limits, slow startup times, and sleeping servers. We had to optimize the application to make it work reliably on free-tier infrastructure.

What We Learned

We learned that building an AI application is not just about choosing a good model. Data quality, performance and user experience are equally important.

Most importantly, we learned how to turn a problem we personally experienced into a working product.

What's Next

We want to make Job Matcher more useful by adding:

  • User authentication
  • Resume upload and automatic profile creation
  • More Cambodian job sources
  • Saved jobs and schedule to collect data
  • Better matching

Our goal is simple: help job seekers spend less time comparing job postings and more time finding opportunities that fit them.

Built With

  • baai/bge-small-en-v1.5
  • camhr-api
  • fastembed
  • keybert
  • ner
  • python
  • regex-based
  • render
Share this project:

Updates

Submission history