Skip to content

JobNavigator 3.1

Latest

Choose a tag to compare

@vesaias vesaias released this 27 Oct 13:31
· 2 commits to main since this release

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=off in .env turns 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.io is never treated as Greenhouse, Lever, Workday or LinkedIn.

The full list is in CHANGELOG.md.

Thanks

  • @volkotyk: multi-arch images (#36), Antigravity CLI 1.4.3 and expired logins (#37), Antigravity -high models, CLI timeouts and cancelled calls (#38), rename a résumé (#40), LinkedIn Remote (#41)