Files
serverAppConfigs/serverAppConfigs-docs/Research/AI Job Search and Resume Tools.md
T
Frank 93d1181fee docs: OKF v0.1 compliance pass + fact-check + 3 research briefs
- Migrate all 127 non-reserved docs to OKF v0.1 frontmatter (type/description/tags/timestamp); fix 13 YAML issues, 2 duplicate-FM blocks, strip reserved-page FM
- Restructure log.md to OKF (## YYYY-MM-DD, newest-first)
- Fact-check against scripts/AGENTS.md ground truth: fix 6 false 'Active' banners on retired runbooks, 96->114 GiB GTT, deployment.md vs deploy-plan.py/deploy-remote.sh, Deployment Flow frank-medium=Quadlet, Calibre 9.9.0->9.15.0 + CVE-2025-7404 conflation, Copyparty v1.20.24, RomM 5.3.0 breaking change
- Move *arr docs to new FrankBook-Pro/ section (git mv, link-safe)
- Write active runbook bodies from ground truth (frank-large, frank-small)
- Add 3 research briefs + HTML report: Local TTS and Voice Cloning, AI Job Search and Resume Tools, Most Popular Self-Hosted AI Apps (Jun-Sep 2026)
- Add upstream-version rows to ComfyUI/OpenWebUI/Hermes app docs
- All 336 tests pass; 136 pages, 0 unresolved wikilinks
2026-09-22 02:09:41 -07:00

13 KiB
Raw Blame History

type, description, tags, timestamp
type description tags timestamp
research Self-hosted AI job-search and resume-formatting applications: the 2026 landscape, local-LLM fit, and a recommended homelab stack.
research
job-search
resume
self-hosted
2026-09-22

AI Job Search and Resume Tools

Research brief for self-hostable (Docker/Podman) open-source applications in two categories: (a) job search — finding jobs, matching, tracking applications — and (b) resume/CV formatting — building, tailoring, and optimizing. Target environment: this homelab (2 Ubuntu GPU servers + 1 macOS mini, Podman/Quadlet, Caddy, local LLMs via Ollama/llama.cpp).

The Two Shapes

The space split into two distinct shapes in 2026:

  1. Web-app trackers — Dockerized dashboards for tracking applications, resumes, and AI-assisted matching/tailoring (JobSync, offerPilot, JobNavigator on the job-search side; Reactive Resume, Resume Matcher, OpenResume, ResumeLM on the resume side). The natural homelab fit: one docker compose up (or Quadlet unit), data in a local volume, AI pointed at a local Ollama/llama.cpp endpoint.
  2. CLI agent frameworks — "bring your own AI coding CLI" tools that run the whole job search as local files + prompts (career-ops, MadsLorentzen/ai-job-search). Viral in 2026 (72k and 44k stars) and the strongest at finding jobs (portal scanning) and tailoring CVs, but not self-hosted web services — they run on your machine against a paid AI CLI (Claude Code, Codex, etc.).

Strongest self-hostable picks for this fleet: JobSync (MIT, Ollama-as-default AI + MCP server), Resume Matcher (Apache-2.0, best dedicated tailoring tool), Reactive Resume (MIT, best pure resume builder, 43k stars). There is no dominant self-hosted app for pure job discovery at scale — that niche is JobNavigator (Docker, 126 stars) plus the CLI frameworks.

Job-Search Applications

career-ops — https://github.com/career-ops-hq/career-ops

MIT, ~72,400 stars (verified 2026-09-22). Open-source AI job-search "command center" that runs inside any AI coding CLI (Claude Code, Codex, Copilot, Gemini CLI). Evaluates listings against your CV with a published five-dimension rubric, generates ATS-optimized per-role PDF resumes, drafts Greenhouse/Ashby/Lever application answers, scans 150+ career portals with zero API tokens, and tracks the pipeline in a Go terminal dashboard. Never auto-submits. Uses whichever AI CLI you already pay for; data is local Markdown/YAML you own. Not a server: npx @santifer/career-ops init.

MIT, ~43,600 stars. Claude Code framework: /setup, /scrape, /rank, /apply <url> (fit evaluation + tailored LaTeX CV + cover letter + a reviewer agent), /interview, plus an ATS parseability check on generated PDFs. Portal skills ship for the Danish market but are swappable. Prereqs: Claude Code, Python 3.10+, Bun, a LaTeX distribution. Caveat (README): a GitHub fork is always public and /setup writes personal data into tracked files — use a private repo with this repo as upstream.

JobSync — https://github.com/Gsync/jobsync

MIT, ~1,300 stars. The most complete self-hosted tracker: application tracker + monitoring dashboard, resume management (PDF/DOCX import with AI extraction), contacts, company pages, interview question bank, tasks/time tracking, and automated job discovery (scheduled automations track companies via job-board APIs and AI-match each listing). In-app AI assistant (resume review, job-match scoring, tailored cover letters) and a built-in MCP server (Claude Desktop can add jobs from chat). Ollama is the default provider — fully local, no API key; known-good qwen3.5:9b. Models must support tool calling + structured output. git clone + docker compose up → :3737. Env: AUTH_SECRET, ENCRYPTION_KEY (encrypts stored API keys — set before adding keys, never change after), NEXTAUTH_URL, MCP_ENABLED. Treats pasted postings as untrusted text (prompt-injection defense).

offerPilot — https://github.com/offercontext/offerPilot

AGPL-3.0, ~730 stars. Local-first AI job-application tracker (Chinese-first, English README). Pipeline by company/role/stage, resume versioning, JD-linked material generation, mock interviews (offline Whisper transcription in browser, audio never persisted), interview review, offer comparison and salary-negotiation prep, a "Pilot" AI assistant. Provider-agnostic (connect your own model service). Docker: docker build -t offerpilot . && docker run --rm -p 127.0.0.1:8080:8080 -v offerpilot-data:/data offerpilot. Will not auto-submit.

JobNavigator — https://github.com/vesaias/JobNavigator

MIT, ~126 stars. The most aggressive discovery tool: scrapes career pages (Playwright + 11 ATS handlers) and job boards (JobSpy: LinkedIn, Indeed, ZipRecruiter, Google), dedupes, AI-scores jobs against your résumés, tailors résumés/cover letters (8+8 templates), auto-fills ATS forms, tracks applications with funnel/Sankey stats, auto-detects Gmail replies, sends Telegram alerts. Chrome extension for passive LinkedIn capture. AI: Claude/Codex/Antigravity CLIs, OpenAI, OpenRouter, Ollama. git clone + docker compose up -d (prebuilt GHCR images, pinnable via JN_IMAGE_TAG).

Resume / CV Applications

Reactive Resume — https://github.com/reactive-resume/reactive-resume

MIT, ~43,300 stars. The most popular open-source resume builder: 15 templates, live preview, PDF/JSON/DOCX export, drag-and-drop, share links, JSON Resume import, passkeys/2FA, and an ATS checker with optional AI review. Provider-agnostic AI — OpenAI, Claude, Gemini, OpenRouter, Ollama, and any OpenAI-compatible endpoint (base URL + model); credentials encrypted server-side. docker compose up -d (PostgreSQL + optional SeaweedFS). Since v5.1.0 PDF generation is fully client-side (@react-pdf/renderer) — no Browserless/Chromium. No tracking/analytics by default; full export; one-click delete.

Resume Matcher — https://github.com/srbhr/Resume-Matcher

Apache-2.0, ~28,500 stars. The dedicated tailoring tool: upload a master resume, paste a JD, get AI-tailored content with a review step, per-job templates, cover-letter + interview-prep generation, resume scoring + keyword highlighting against the JD, PDF export (4 templates). Ollama (local) plus OpenAI, Claude, Gemini, OpenRouter, DeepSeek (built on LiteLLM). Official Docker images: docker run -p 3000:3000 -v resume-data:/app/backend/data ghcr.io/srbhr/resume-matcher:latest (API at /api, health at /api/v1/health). Ollama-in-Docker gotcha (README): use http://host.docker.internal:11434, not localhost.

OpenResume — https://github.com/xitanggg/open-resume

AGPL-3.0, ~8,900 stars. Resume builder and parser. The builder produces an ATS-friendly design (Greenhouse/Lever compatible) with real-time PDF preview; the parser deterministically tests an existing resume's ATS readability. No AI — deliberately algorithmic (PDF.js + layout heuristics). Purely client-side (works offline, data never leaves the browser).

ResumeLM — https://github.com/olyaiy/resume-lm

AGPL-3.0, ~326 stars. AI resume builder for tech jobs: base + tailored resumes, ATS scoring, AI bullet editing, cover-letter generator, job/application tracking. Cloud API providers only in practice (OpenAI, Claude, Gemini, DeepSeek, Groq) — no Ollama/local documented. Next.js 15 + Supabase + Redis.

rendercv (non-AI) — https://github.com/rendercv/rendercv

MIT, ~17,600 stars. LaTeX-based YAML→PDF resume builder. No AI, but the strongest "ATS-safe by construction" formatter (single column, standard fonts); pairs well with any AI tailoring step.

Best Practices for a Homelab AI Resume/Job Pipeline

Local LLM vs API.

  1. Local-first for PII. CVs carry name, contact, employment history, often salary. The apps that matter all support fully-local inference: JobSync (Ollama default), Resume Matcher (Ollama via LiteLLM), Reactive Resume (Ollama + any OpenAI-compatible endpoint), JobNavigator (Ollama). Point them at Ollama on the GPU server, or a llama.cpp llama-server OpenAI-compatible endpoint (Reactive Resume and Resume Matcher consume it via base-URL override).
  2. Pick a model with tool calling + structured output for JobSync — its assistant works by calling tools; a model without tool support "will reply with text instead of doing anything." JobSync's tested local model is qwen3.5:9b; anything 8B–32B with tool support is a reasonable bet.
  3. Raise Ollama's context to ~16k for resume/JD matching (the 4k default truncates long resume+JD prompts; don't go much higher).
  4. Networking: expose Ollama on the LAN (OLLAMA_HOST); inside Docker on the same host use http://host.docker.internal:11434.
  5. Budget reality: the CLI frameworks are the strongest at discovery + tailoring quality but require a paid AI CLI. For zero per-token cost and full privacy, the Docker apps + local Ollama is the way; expect somewhat weaker tailoring than frontier-API models.

Privacy & data handling.

  1. Treat job postings as untrusted input. The best projects defend against prompt injection in JDs (JobSync scopes the assistant to the visible job; ai-job-search documents postings as untrusted). Keep a human review step before anything is sent.
  2. Never auto-submit. All the serious tools keep submission human by design. Mass auto-application burns standing with recruiters and ATS systems.
  3. Don't fork the CLI frameworks publicly for personal use (ai-job-search: forks are public, /setup writes personal data into tracked files).
  4. Protect stored secrets. JobSync: set ENCRYPTION_KEY (openssl rand -base64 32) before adding API keys. Reactive Resume: AI credentials are encrypted server-side.
  5. Keep the service off the public internet. These apps store sensitive PII. Bind to LAN / put behind the existing Caddy reverse proxy with auth (the fleet already runs Anubis+Authentik+Caddy — route through the same guard chain). offerPilot's own default is 127.0.0.1:8080.
  6. Back up the data volume. JobSync has built-in zip backup/restore (excludes API keys by design). offerPilot and Resume Matcher keep everything in one volume — snapshot those.
  7. Podman/Quadlet specifics: all Docker-compose stacks map directly to Quadlet .container/.network units for boot persistence (fleet convention). Remember the published-port cutover gate (3737 JobSync, 3000 Resume Matcher, 8080 offerPilot) and that Ollama must be reachable from the container network (published port or host.containers.internal).

Suggested Stack for This Fleet

Role App Why
Tracking + matching + discovery JobSync (MIT) Only self-hosted tracker with Ollama-as-default AI, job-board API discovery, MCP server, backup/restore
Per-JD tailoring Resume Matcher (Apache-2.0) Master-resume workflow, scoring + keyword highlighting, single container, Ollama
Resume building / ATS-safe PDFs Reactive Resume (MIT) 15 templates, ATS checker + AI review, JSON Resume import, client-side PDF
(optional) deep discovery JobNavigator (MIT) Playwright scraping of career pages + boards, Telegram alerts
(optional) CLI power mode career-ops (MIT) Best-in-class scoring rubric + portal scanning, if a paid AI CLI is acceptable

All five run comfortably on the existing GPU servers alongside Ollama; none requires more than a few hundred MB RAM.

Citations