- 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
13 KiB
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. |
|
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:
- 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. - 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.
ai-job-search (MadsLorentzen) — https://github.com/MadsLorentzen/ai-job-search
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.
- 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-serverOpenAI-compatible endpoint (Reactive Resume and Resume Matcher consume it via base-URL override). - 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. - Raise Ollama's context to ~16k for resume/JD matching (the 4k default truncates long resume+JD prompts; don't go much higher).
- Networking: expose Ollama on the LAN (
OLLAMA_HOST); inside Docker on the same host usehttp://host.docker.internal:11434. - 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.
- 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.
- Never auto-submit. All the serious tools keep submission human by design. Mass auto-application burns standing with recruiters and ATS systems.
- Don't fork the CLI frameworks publicly for personal use (ai-job-search:
forks are public,
/setupwrites personal data into tracked files). - Protect stored secrets. JobSync: set
ENCRYPTION_KEY(openssl rand -base64 32) before adding API keys. Reactive Resume: AI credentials are encrypted server-side. - 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. - 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.
- Podman/Quadlet specifics: all Docker-compose stacks map directly to
Quadlet
.container/.networkunits 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 orhost.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
- career-ops: https://github.com/career-ops-hq/career-ops (MIT, ~72,386 stars) — site: https://career-ops.org
- ai-job-search: https://github.com/MadsLorentzen/ai-job-search (MIT, ~43,609 stars)
- JobSync: https://github.com/Gsync/jobsync (MIT, ~1,299 stars)
- offerPilot: https://github.com/offercontext/offerPilot (AGPL-3.0, ~730 stars)
- JobNavigator: https://github.com/vesaias/JobNavigator (MIT, ~126 stars)
- Reactive Resume: https://github.com/reactive-resume/reactive-resume (MIT, ~43,301 stars) — AI guide: https://docs.rxresu.me/guides/using-ai ; self-hosting: https://docs.rxresu.me/self-hosting/docker
- Resume Matcher: https://github.com/srbhr/Resume-Matcher (Apache-2.0, ~28,499 stars)
- OpenResume: https://github.com/xitanggg/open-resume (AGPL-3.0, ~8,908 stars)
- ResumeLM: https://github.com/olyaiy/resume-lm (AGPL-3.0, ~326 stars)
- rendercv (non-AI): https://github.com/rendercv/rendercv (MIT, ~17,620 stars)
- JobSync Ollama default + 16k context + ENCRYPTION_KEY: https://github.com/Gsync/jobsync/blob/main/README.md
- Resume Matcher Ollama-in-Docker URL: https://github.com/srbhr/Resume-Matcher/blob/main/README.md
- Reactive Resume client-side PDF since v5.1.0: https://github.com/reactive-resume/reactive-resume/blob/main/README.md