Repository navigation
JobNavigator 3.1
3.1 is about the posting behind each job: one job per posting however many sites list it, the employer's own link instead of a board's, and a mark on postings that have closed. It also adds a public demo and opt-in telemetry.
Updating: git pull && docker compose pull && docker compose up -d (set JN_IMAGE_TAG=3.1 if .env pins it). Stored jobs, scores and API keys are migrated on first start; a backup beforehand is still a good idea.
Highlights
Better deduplication
- Each job gets a posting key read from its link (over 30 job systems and career sites), so the same posting from Greenhouse, its embed, a short link, Jobright, Levels.fyi or the company's own board is one job; the rest are listed under Also listed.
- The same role under another id (one listing per city, a repost, a board copy of the employer's posting) is a copy too, but only when the text proves it, never by title alone.
- Settings › Copies of a posting decides whether each kind of copy is Ignored or New.
Deeper direct-link search
- Every job is Direct (the employer's own posting, or LinkedIn Easy Apply, where you apply right there) or Board link (only a job-board listing is known), with a Link filter in the feed and a Board link tag in the job's panel. Open and the preview use the employer's posting whenever it is known; Searches show each search's share of direct links.
- LinkedIn listings from any source are looked up through the mock account after every scrape; short links and job-ad redirectors are followed to the posting.
Still open?
- A posting is checked when it is opened; a closed one gets a red dot and Closed posting. LinkedIn's answer and two full company scrapes without the posting close jobs too. The feed's Posting filter (Open / Closed) appears once a closed posting has been found.
Also new
- Telemetry: anonymous health and usage data to a self-hosted Umami (README › Telemetry). The owner is asked once, Yes or Essentials, and nothing is sent before that;
JN_TELEMETRY=offin.envturns it off. - Public demo: vesaias.github.io/JobNavigator-demo.
- Rename a résumé, by @volkotyk (#40).
- Prebuilt ARM images (linux/arm64), by @volkotyk (#36).
Notable fixes
- The scheduled scrape now counts its interval from the last scheduled scrape, so an install restarted more often than its interval scrapes again.
- Uber is read through jobs.uber.com's search API.
- Workday boards over 2,000 jobs are split by the board's own filters instead of losing the rest.
- Scoring with prompt caching off sent the model only the job description; the résumés and the rubric are back in the prompt.
- Job scores are stored by résumé id: a rename shows at once, and two résumés with one name no longer overwrite each other.
- Antigravity CLI 1.4.3 in the image, and an expired login goes straight to the fallback model, by @volkotyk (#37).
- Subscription CLI timeouts go straight to the fallback model instead of being retried, -high Antigravity models get 450 s and no tool turns, and a cancelled LLM call is logged as a failure, by @volkotyk (#38).
- LinkedIn ignores Remote without login; the Remote field now says so, by @volkotyk (#41).
- Stricter host checks from code scanning: a look-alike host such as
evilgreenhouse.iois never treated as Greenhouse, Lever, Workday or LinkedIn.
The full list is in CHANGELOG.md.