Repository navigation
JobNavigator 3.0
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
- 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>.sqlby 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
- Update:
git pull, thendocker compose pull && docker compose up -d(prebuilt images) ordocker compose up --build -d. If.envpinsJN_IMAGE_TAG, set it to3.0.git pullalone 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. - 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_TOKENkeep working for the owner. - Reload the extension in
chrome://extensions(now 3.0; no reinstall needed). - Optional: add
<your dashboard address>/api/gmail/callbackas 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