DEV Community

Cover image for JobFit Local: Private, Open-Weight AI for My Next Job Application
Nikhil Jangid
Nikhil Jangid

Posted on AI-assisted

JobFit Local: Private, Open-Weight AI for My Next Job Application

Hacktoberfest Weekend Challenge: Build for a Friend Submission 🤝

This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend.

What I Built

I built JobFit Local for a very specific friend: future me, the version of me opening the next job application and wondering whether a role is genuinely worth pursuing.

That person has three problems:

  1. job descriptions are noisy and repetitive;
  2. tailoring every application takes time;
  3. a resume contains personal information that should not be sent to another API just to get a match score.

JobFit Local compares a resume with a job description and returns:

  • a semantic fit score;
  • skills already aligned with the role;
  • named skills that need honest evidence;
  • three practical next steps for tailoring the application.

It also explicitly warns users not to add skills they cannot defend. This is a decision aid, not a hiring system.

Demo

Live app: https://nikhiljangid120.github.io/jobfit-local/

The app includes a Try an example button, so you can test the full flow without pasting personal information.

JobFit Local showing a 69/100 semantic match, aligned skills, skill gaps, and next steps

Code

GitHub logo nikhiljangid120 / jobfit-local

Privacy-first AI resume matcher powered by an open-weight model running in your browser — built for Hacktoberfest 2026.

JobFit Local

A privacy-first AI resume matcher built for future Nikhil during the Hacktoberfest 2026 “Build for a Friend” weekend challenge.

Paste a resume and job description to get:

  • a semantic fit score;
  • explicit matched and missing skills;
  • an honest, focused application plan.

Why open AI

Job hunting materials are personal. JobFit Local uses the Apache-2.0-licensed sentence-transformers/all-MiniLM-L6-v2 model through open-source Transformers.js. Inference runs in the browser. The app has no backend and does not upload resume or job-description text.

The model is downloaded on first use and can then be reused from the browser cache. Open weights make the model inspectable and replaceable, avoid an API key, and let the app run without sending career data to a proprietary service.

Run locally

python3 -m http.server 8000
Enter fullscreen mode Exit fullscreen mode

Then open http://localhost:8000.

Tests

npm test
Enter fullscreen mode Exit fullscreen mode

Responsible use

The match score is directional, not a hiring decision. The app tells users never…

The project is MIT licensed and includes five tests for normalization, skill comparison, vector similarity, score blending, and recommendation safety.

How I Built It

JobFit Local is a static HTML, CSS, and JavaScript application with no backend.

At its core is the Apache-2.0-licensed sentence-transformers/all-MiniLM-L6-v2 open-weight model, loaded with open-source Transformers.js.

The browser produces normalized embeddings for the resume and job description. Their dot product supplies the semantic similarity signal. I blend that with explicit skill coverage so the final score combines meaning with concrete requirements. The app then shows matched skills, missing skills, and recommendations generated by deterministic, inspectable code.

The first run downloads a quantized model. Later runs can reuse the browser cache.

I verified the project with:

npm test
# 5 tests passed
Enter fullscreen mode Exit fullscreen mode

I also tested the deployed app end to end on desktop and mobile, including a real model download and inference run.

Why Does Open Innovation Matter?

A resume can contain a name, employment history, location, phone number, and other sensitive details. A closed API would require sending that material to somebody else's server.

Open weights changed the architecture: inference runs inside the browser, the app needs no API key, and neither the resume nor job description is uploaded by JobFit Local. The model can also be inspected, cached, or replaced without rebuilding the product around a vendor.

That is the practical value of open AI here—not just lower cost, but more control over personal career data.

What I Learned

The most interesting design choice was balancing a semantic score with explainable signals. An embedding can tell me that two documents discuss similar work, but a job seeker also needs to see why. Pairing local embeddings with explicit skill extraction made the result easier to act on and easier to challenge.

I have not claimed made-up user feedback. Future me is the first intended user, and the project is ready for feedback from other job seekers after this submission.

AI Assistance Disclosure

I used Notion AI as a coding and writing assistant. I reviewed the implementation, ran the tests, checked the responsive layouts, and verified the deployed open-weight model flow before submitting.

Top comments (0)