RajaBabu15/job-focus-assist

Local Chrome extension: score the job tab you're already on. Ollama, no crawl, no auto-apply.

3

stars

4

commits

JavaScript

primary language

Aug 16, 2026

updated

README

Job Focus Assist

Local Chrome tracer for job hunting on a MacBook Air M4 (24 GB). It records pages you already opened, keeps a should-apply / continue / applied / pending pipeline on this Mac, and only then (if you ask) scores a posting against your resume with a local model.

It does not crawl career sites, click Apply, or message anyone. Opening a job is not Analyze.

Pipeline

seen → should apply → continue → applied → pending → completed
                              ↘ skipped
StatusMeaning
SeenYou opened the posting. No model ran.
Should applyQueued. Reminder-eligible if the score is strong.
ContinueApplication started, not submitted.
AppliedSubmitted (you marked it, or a “application has been submitted” page was detected).
PendingWaiting on them (OA / recruiter / loop).
CompletedClosed: offer / rejected / withdrawn / expired / ghosted.
SkippedNot applying.

History is an event log (visited, imported, scored, submitted, status changed). The current card is the job row.

What runs the local model

ActionModel
Visit, confirmation, status, filters, badgeNever
Visible list-card scoreKeywords + vetoes only
Analyze / talking points / resume alternativesOllama (qwen3.5:9b, or 4b in light mode)
Staff + citizenship + years stackedKeywords only, unless you click Analyze anyway

Suggestions have to name a resume line. Gaps get a substitute (Kubernetes → Docker at Qure.ai; Go → Java/Spring + C++ fibers) or a hard-blocker label. Empty shrugs are dropped.

ATS boolean filters are a separate check (no model): if the JD says React.js and the CV says React, that is a spelling trap, not a missing skill. The tracker lists the exact string to put on the CV.

Why these models

On this fanless 24 GB Air, Chrome + LinkedIn already use a lot of RAM. Marketing posts that say “24 GB runs Qwen 3.6 27B” assume Chrome is closed.

ModelSizeRole
qwen3.5:9b6.6 GBDaily driver. Best small 2026 model for extraction + JSON.
qwen3.5:4b3.4 GBLight mode / visible list-card scoring.
qwen3.5:27b / 35b / Gemma 4 26B16–24 GBDo not run while browsing. Will swap and heat the Air.

Thinking mode is off. Context is capped at 8k. Ollama unloads after 5 minutes idle.

Storage

  • Settings and profile: chrome.storage.local
  • Job history: IndexedDB jfa in the extension origin (not cookies, not sync, not a server)
  • Existing inbox rows migrate once (new → seen, later → should apply)

Install

1. Local model

chmod +x ~/job-focus-assist/scripts/setup-ollama.sh
~/job-focus-assist/scripts/setup-ollama.sh

Or by hand:

brew install ollama
launchctl setenv OLLAMA_ORIGINS "chrome-extension://*"
launchctl setenv OLLAMA_KEEP_ALIVE "5m"
launchctl setenv OLLAMA_NUM_CTX "8192"
open -a Ollama
ollama pull qwen3.5:9b
ollama pull qwen3.5:4b

Restart Chrome after setting OLLAMA_ORIGINS so the extension can reach 127.0.0.1:11434.

2. Load the extension

  1. Chrome → chrome://extensions → enable Developer mode
  2. Load unpacked → select ~/job-focus-assist (the folder that now contains manifest.json)
  3. Pin the toolbar icon
  4. Turn it On in the popup

3. Try the demos (no login needed)

Open extension/demo/sample-job.html and click Analyze this tab.
Open extension/demo/sample-microsoft.html — the visit is saved as Seen with Eightfold ids 1970393556957799 / 200047330. The #submitted hash is a confirmation page and logs Applied.
Open extension/demo/sample-meesho.html for the Lever flow (Meesho SDE II Data): job → #apply (Continue) → #submitted (Applied). The apply and thanks URLs collapse to the same posting id.
Open extension/demo/sample-keka.html for Keka Hire (Scry AI Java Developer): visit → Seen, #submitted → Applied.

If you want the on-page chip on file:// pages, enable Allow access to file URLs on the extension’s details page.

How to use it

  1. Turn the extension On. Off means it does nothing.
  2. Open a job detail page. The board is detected from the ATS (Lever, Greenhouse, Keka, Eightfold, Ashby, Workday, LinkedIn, Amazon) — Meesho is Lever, Microsoft is Eightfold, Scry AI is Keka. Visit is stored. No model. /apply is Continue. “Application submitted!” is Applied.
  3. On the chip: Should apply, Continue later, Mark applied, or Analyze.
  4. Open the tracker side panel. Filter To do / In progress / Waiting / Done.
  5. On a search list, Score visible — only cards on screen, no pagination.
  6. Microsoft saved-jobs JSON that the page already loaded is imported (we do not call Eightfold ourselves).
  7. On any other careers page, popup → Analyze this tab.

A daily reminder (default 20:00) fires for Should apply and Continue with score ≥ 65. Glanced-at Seen rows do not nag.

What it looks for (your 2026 profile)

Seeded from your resume: IIT (ISM) Dhanbad CSE 8.80, Amazon SDE intern (Hyderabad), Qure.ai AI intern (Bengaluru), InferMesh, fiber scheduler, io_uring server.

  • New-grad / SDE / backend / systems / ML infra titles
  • Stack you can prove: Java/Spring, Kafka, SQS, Python/Django, C++, Docker, AWS, Prometheus, inference
  • Red flags: citizenship, clearance, 4+ years, staff/principal, people-management
  • Edit all of this in Options

Privacy and limits

  • Job text and your profile never leave this Mac (Ollama on localhost).
  • No <all_urls> crawl permission. Content scripts are host-allowlisted.
  • We never request Microsoft/Eightfold APIs. If you are logged in and the page already fetched saved jobs, we may read that response.
  • LinkedIn DOM changes. If an extractor misses, use Analyze this tab.
  • Do not leave 15 other heavy extensions + 9B + 40 LinkedIn tabs running.

Project layout

extension/     Chrome MV3
  background/  Tracer, Ollama (suggestions only), reminders
  content/     Chip, extractors, Microsoft page hook
  lib/         IndexedDB, pipeline, resume alternatives
  popup/       On/Off + health
  sidepanel/   Tracker + history
  options/     Profile + model
  demo/        Offline sample postings
scripts/       Icon generator + Ollama setup

Checks

node scripts/test-match.mjs

Contributors

RajaBabu15

4 commits

RajaBabu15/job-focus-assist

Local Chrome extension: score the job tab you're already on. Ollama, no crawl, no auto-apply.

3

stars

4

commits

JavaScript

primary language

Aug 16, 2026

updated

README

Job Focus Assist

Local Chrome tracer for job hunting on a MacBook Air M4 (24 GB). It records pages you already opened, keeps a should-apply / continue / applied / pending pipeline on this Mac, and only then (if you ask) scores a posting against your resume with a local model.

It does not crawl career sites, click Apply, or message anyone. Opening a job is not Analyze.

Pipeline

seen → should apply → continue → applied → pending → completed
                              ↘ skipped
StatusMeaning
SeenYou opened the posting. No model ran.
Should applyQueued. Reminder-eligible if the score is strong.
ContinueApplication started, not submitted.
AppliedSubmitted (you marked it, or a “application has been submitted” page was detected).
PendingWaiting on them (OA / recruiter / loop).
CompletedClosed: offer / rejected / withdrawn / expired / ghosted.
SkippedNot applying.

History is an event log (visited, imported, scored, submitted, status changed). The current card is the job row.

What runs the local model

ActionModel
Visit, confirmation, status, filters, badgeNever
Visible list-card scoreKeywords + vetoes only
Analyze / talking points / resume alternativesOllama (qwen3.5:9b, or 4b in light mode)
Staff + citizenship + years stackedKeywords only, unless you click Analyze anyway

Suggestions have to name a resume line. Gaps get a substitute (Kubernetes → Docker at Qure.ai; Go → Java/Spring + C++ fibers) or a hard-blocker label. Empty shrugs are dropped.

ATS boolean filters are a separate check (no model): if the JD says React.js and the CV says React, that is a spelling trap, not a missing skill. The tracker lists the exact string to put on the CV.

Why these models

On this fanless 24 GB Air, Chrome + LinkedIn already use a lot of RAM. Marketing posts that say “24 GB runs Qwen 3.6 27B” assume Chrome is closed.

ModelSizeRole
qwen3.5:9b6.6 GBDaily driver. Best small 2026 model for extraction + JSON.
qwen3.5:4b3.4 GBLight mode / visible list-card scoring.
qwen3.5:27b / 35b / Gemma 4 26B16–24 GBDo not run while browsing. Will swap and heat the Air.

Thinking mode is off. Context is capped at 8k. Ollama unloads after 5 minutes idle.

Storage

  • Settings and profile: chrome.storage.local
  • Job history: IndexedDB jfa in the extension origin (not cookies, not sync, not a server)
  • Existing inbox rows migrate once (new → seen, later → should apply)

Install

1. Local model

chmod +x ~/job-focus-assist/scripts/setup-ollama.sh
~/job-focus-assist/scripts/setup-ollama.sh

Or by hand:

brew install ollama
launchctl setenv OLLAMA_ORIGINS "chrome-extension://*"
launchctl setenv OLLAMA_KEEP_ALIVE "5m"
launchctl setenv OLLAMA_NUM_CTX "8192"
open -a Ollama
ollama pull qwen3.5:9b
ollama pull qwen3.5:4b

Restart Chrome after setting OLLAMA_ORIGINS so the extension can reach 127.0.0.1:11434.

2. Load the extension

  1. Chrome → chrome://extensions → enable Developer mode
  2. Load unpacked → select ~/job-focus-assist (the folder that now contains manifest.json)
  3. Pin the toolbar icon
  4. Turn it On in the popup

3. Try the demos (no login needed)

Open extension/demo/sample-job.html and click Analyze this tab.
Open extension/demo/sample-microsoft.html — the visit is saved as Seen with Eightfold ids 1970393556957799 / 200047330. The #submitted hash is a confirmation page and logs Applied.
Open extension/demo/sample-meesho.html for the Lever flow (Meesho SDE II Data): job → #apply (Continue) → #submitted (Applied). The apply and thanks URLs collapse to the same posting id.
Open extension/demo/sample-keka.html for Keka Hire (Scry AI Java Developer): visit → Seen, #submitted → Applied.

If you want the on-page chip on file:// pages, enable Allow access to file URLs on the extension’s details page.

How to use it

  1. Turn the extension On. Off means it does nothing.
  2. Open a job detail page. The board is detected from the ATS (Lever, Greenhouse, Keka, Eightfold, Ashby, Workday, LinkedIn, Amazon) — Meesho is Lever, Microsoft is Eightfold, Scry AI is Keka. Visit is stored. No model. /apply is Continue. “Application submitted!” is Applied.
  3. On the chip: Should apply, Continue later, Mark applied, or Analyze.
  4. Open the tracker side panel. Filter To do / In progress / Waiting / Done.
  5. On a search list, Score visible — only cards on screen, no pagination.
  6. Microsoft saved-jobs JSON that the page already loaded is imported (we do not call Eightfold ourselves).
  7. On any other careers page, popup → Analyze this tab.

A daily reminder (default 20:00) fires for Should apply and Continue with score ≥ 65. Glanced-at Seen rows do not nag.

What it looks for (your 2026 profile)

Seeded from your resume: IIT (ISM) Dhanbad CSE 8.80, Amazon SDE intern (Hyderabad), Qure.ai AI intern (Bengaluru), InferMesh, fiber scheduler, io_uring server.

  • New-grad / SDE / backend / systems / ML infra titles
  • Stack you can prove: Java/Spring, Kafka, SQS, Python/Django, C++, Docker, AWS, Prometheus, inference
  • Red flags: citizenship, clearance, 4+ years, staff/principal, people-management
  • Edit all of this in Options

Privacy and limits

  • Job text and your profile never leave this Mac (Ollama on localhost).
  • No <all_urls> crawl permission. Content scripts are host-allowlisted.
  • We never request Microsoft/Eightfold APIs. If you are logged in and the page already fetched saved jobs, we may read that response.
  • LinkedIn DOM changes. If an extractor misses, use Analyze this tab.
  • Do not leave 15 other heavy extensions + 9B + 40 LinkedIn tabs running.

Project layout

extension/     Chrome MV3
  background/  Tracer, Ollama (suggestions only), reminders
  content/     Chip, extractors, Microsoft page hook
  lib/         IndexedDB, pipeline, resume alternatives
  popup/       On/Off + health
  sidepanel/   Tracker + history
  options/     Profile + model
  demo/        Offline sample postings
scripts/       Icon generator + Ollama setup

Checks

node scripts/test-match.mjs

Contributors

RajaBabu15

4 commits

Languages

JavaScript

85.8%

HTML

9.2%

CSS

3.4%

Python

1.1%