A Chrome extension (Manifest V3) that captures and organises job listings while you browse — so an active job search stays structured and interview-ready instead of scattered across 40 open tabs.
Built as a personal tool to solve my own job-hunt workflow, and deliberately scoped as an operational proof of concept: capture reliably first, add intelligence where it earns its place.
Status: working proof-of-concept (v0.2.0). Everything under What it does today is functional right now, using local parsing with no external API. The Claude / LLM features are planned, not yet built — they're called out explicitly wherever they appear below.
Job hunting on Seek is a mess of open tabs, half-remembered roles, and a spreadsheet that goes stale by day three. The fix isn't another manual tracker — it's capturing the role at the moment you're looking at it, pulling out the signal automatically, and seeing your pipeline at a glance.
All of this works now, entirely on-device with no external API:
- One-click capture from a Seek job page — title, company, and role detail saved without leaving the listing
- Automatic skill extraction — parses the job description with a local keyword/regex engine and surfaces the technologies and skills mentioned, so you can see at a glance how well a role matches your stack
- Local pipeline dashboard — a Chart.js dashboard visualising captured roles and the skills showing up most across your search
- Runs entirely in your browser — everything is stored locally via the Chrome storage API; no account, no backend, no data leaving your machine, no LLM calls
Seek job page
│
▼
content script ──► techExtractor + techDictionary (local skill parsing)
│
▼
chrome.storage (local) ◄──► popup (capture / quick view)
│
▼
dashboard (Chart.js visualisations)
A content script runs only on au.seek.com/job/*, extracts the listing and its skills locally, and persists to chrome.storage. A popup handles quick capture, and a separate dashboard page renders the pipeline with Chart.js. A background service worker coordinates messaging between them.
The obvious move is to throw every job description at an LLM and ask "what skills are in here." I didn't, on purpose:
- Determinism and cost. Tech and industry keywords are a solved problem — a curated dictionary plus pattern matching extracts them accurately, instantly, and for free. Sending every capture to an API to do something regex already does reliably is spend and latency with no payoff. Use the model where it adds value, not everywhere.
- The LLM belongs a layer later (planned, not yet built). In this tool the AI layer was never scoped for capture — it's for the application stage: resume tailoring, cover-letter drafting, and ATS-style suitability scoring of you against a specific role. That's where an LLM genuinely earns its place, and it's the roadmap below. For an MVP proof of concept, capture had to work first — so no Claude integration exists in the current build by design. The result is an extension that does its core job with zero API dependency, and a clean seam for AI to slot into exactly where it's warranted.
Vanilla JavaScript · Chrome Extension APIs (Manifest V3) · Content scripts + service worker · chrome.storage · Chart.js
The AI layer lives here, not in capture. None of the below is in the current build:
- Resume tailoring — draft role-specific resume bullets from a captured listing (Claude API)
- Cover-letter drafting — generate a first-pass cover letter matched to the role (Claude API)
- Suitability scoring — ATS-style match score of your profile against a captured role's requirements (Claude API)
- Support for additional job boards beyond Seek
- Export pipeline to CSV When the Claude features land, they'll run through a server-side backend that holds the key — never from the extension itself, since a browser extension can't keep a secret.
Proof-of-concept MVP (v0.2.0) — functional capture, local skill extraction, and dashboard working. Personal / portfolio project.
Source-available for review and contribution; not licensed for reuse or redistribution.