Skip to content

JobNavigator 3.0

Choose a tag to compare

@vesaias vesaias released this 17 Oct 10:30
· 120 commits to main since this release

JobNavigator 3.0

JobNavigator becomes a household install: one server, up to five accounts, each with its own jobs, applications, résumés, cover letters, Persona, searches and companies. With a single account the dashboard looks and behaves as before, and an existing install keeps everything it has.

Upgrading from 2.x

  1. Back up first. The database is migrated in place; the only way back to 2.x is a restore. 3.0 also writes backups/pre_upgrade_2.x_to_3.0_<time>.sql by itself before it migrates (and stops if it can't), but take your own too. With 2.x still running:
    docker compose exec -T db sh -c 'pg_dump -U $POSTGRES_USER $POSTGRES_DB' > backups/pre-3.0.sql
  2. Update: git pull, then docker compose pull && docker compose up -d (prebuilt images) or docker compose up --build -d. If .env pins JN_IMAGE_TAG, set it to 3.0. git pull alone is not enough: the images must be pulled or rebuilt; otherwise the backend logs "The backend image is older than the code" and the dashboard's health line turns amber.
  3. First boot migrates by itself: it creates the owner account (named after your Persona, else "Owner") and gives it all existing data. Your settings become the owner's; settings new in 3.0 get their defaults. The install password, Telegram bot and chat, and GMAIL_REFRESH_TOKEN keep working for the owner.
  4. Reload the extension in chrome://extensions (now 3.0; no reinstall needed).
  5. Optional: add <your dashboard address>/api/gmail/callback as a redirect URI in your Google OAuth client to connect Gmail from Settings; add people under Settings › Accounts › + Add account.

Highlights

Household accounts

  • One owner plus up to four members, each with an optional 4-digit PIN (the owner's opens any account). Switch with the rail footer or Ctrl + Shift + 1–5.
  • All personal data is separate per account; a two-account leak test walks every API route.
  • Shared scraping: two accounts watching the same page or search cause one fetch; each account filters, de-duplicates and scores for itself.
  • Settings inherit or own, per section: the owner turns on Edit policies on a member's row in Settings › Accounts and picks Inherit or Own per section. Owner-only sections unlock for 15 minutes with the owner's PIN.
  • Per-account logins and connections: provider keys, Claude Code / Codex / Antigravity logins, LinkedIn / Jobright / Levels sessions, Telegram (household bot with a link code, or a member's own bot) and Gmail (connect from Settings).
  • Extension "Saves to" picks the account captures and autofill go to, using a signed per-account token.
  • New accounts can start from a copy of another account's Persona, base résumés, companies, searches and settings; "Copy from…" on Companies and Searches copies single rows.
  • Rename, colour, PIN, remove (with an automatic database dump) and export an account's data as a zip.

New sources and providers

  • Apify search mode: Indeed, LinkedIn, Glassdoor, and keyword search across Greenhouse, Lever, Ashby and Workday through Apify Store actors, with spend caps, a 15-minute timeout and a cost estimate before Test. The Apify Creator plan does not work; use Free or a paid plan. By @volkotyk (#28).
  • CaribbeanJobs.com (#26) and TrulyRemoteWork.com (#32) search modes, by @mreid-tt.
  • OpenCode Go provider (an OpenAI-compatible subscription endpoint, no CLI), by @mreid-tt (#25).
  • LM Studio and Ollama addresses are settings now, so a containerised backend can reach a host server at host.docker.internal.
  • JobSpy 1.3.0, suggested by @anthony-df-nguyen (#30).

Résumés

  • Word (.docx) export next to PDF, based on work by @mrAlishah.
  • Opt-in page footer (name, job title, company) on tailored copies, by @mrAlishah (#24).
  • PDFs render sandboxed (no JavaScript, no network except Google Fonts); download names keep non-Latin characters.

Notable fixes

  • Two simultaneous Run alls on the same new company no longer freeze the backend; database lock waits now time out after 10 s instead of hanging.
  • Hourly, daily, weekly and monthly pay is no longer stored as a yearly salary; foreign dollars (TT$, A$, HK$, …) are not read as USD. Includes the salary-extractor fix by @volkotyk (#28).
  • OpenCode Go models that reason by default (DeepSeek, GLM, Kimi) answer instead of returning no text, by @mreid-tt (#33).
  • LLM keys go only to their own provider; a missing key fails at once with a readable message and goes straight to the fallback.
  • A job a scraper filtered out no longer blocks saving it yourself from another site.
  • LinkedIn Personal no longer treats a live session as logged out, by @mreid-tt (#27); Model Catalog works for Claude Code without an API key, by @anthony-df-nguyen (#31).

Removed

  • The classic (v1) dashboard. /classic/… links redirect to the same page in the current UI.

The full list is in CHANGELOG.md.

Thanks

  • @mreid-tt: OpenCode Go provider (#25), CaribbeanJobs.com source (#26), LinkedIn Personal session fix (#27), TrulyRemoteWork.com source (#32), OpenCode Go reasoning headroom (#33)
  • @volkotyk: Apify search mode and the freehire.me salary fix (#28)
  • @mrAlishah: résumé page footer (#24) and the work the Word export is based on
  • @anthony-df-nguyen: Model Catalog for Claude Code without an API key (#31), the JobSpy 1.3.0 suggestion (#30)

Full diff: v2.2.0...v3.0