JobSync
Self-hosted job search assistant with AI-powered application tracking
Alternative to: teal, huntr, notion

JobSync is a self-hosted job application tracker that helps job seekers manage their search while keeping their data private. It tracks applications, companies and statuses, manages resumes with PDF export, and can automatically discover and match jobs from Greenhouse and Lever boards. A built-in AI assistant (supporting local Ollama or cloud providers) helps with resume reviews, job matching and cover letter writing.
JobSync Docker Compose example
Self-host JobSync on your own server, homelab, or VPS starting from this Docker Compose example.
It runs JobSync in Docker containers using the official ghcr.io/gsync/jobsync:latest image, with persistent volumes and automatic restarts preconfigured.
Review the environment variables and adjust them to your setup, save the file as compose.yml (or docker-compose.yml), and start the stack with docker compose up -d.
services:
app:
image: ghcr.io/gsync/jobsync:latest
restart: unless-stopped
environment:
NODE_ENV: "production"
# Enables the built-in MCP server in production (default: on in dev, off in prod).
MCP_ENABLED: "true"
# SQLite database file inside the data volume — no external database needed.
DATABASE_URL: "file:/data/dev.db"
# Secret used by Auth.js to sign session tokens. Keep it stable across restarts or all sessions are invalidated.
AUTH_SECRET: "changeme"
# Encrypts stored provider API keys (OpenAI, DeepSeek, RapidAPI). Must stay stable — changing it makes stored keys unrecoverable. Generate with: openssl rand -base64 32
ENCRYPTION_KEY: "changeme"
# Public URL where users reach the app. Set to your server IP or domain (e.g. https://jobsync.example.com) when not on localhost.
NEXTAUTH_URL: "http://localhost:3737"
# Trust the host/proxy headers — required when the app is served from a homelab IP or behind a reverse proxy.
AUTH_TRUST_HOST: "true"
# Timezone used for activity timestamps. Set this or activity times may shift.
TZ: "UTC"
# Base URL of an Ollama server for local AI features. Defaults to an Ollama running on the Docker host.
OLLAMA_BASE_URL: "http://host.docker.internal:11434"
# Optional OpenAI API key for cloud AI features (resume review, job matching, cover letters).
OPENAI_API_KEY: ""
# Optional Google Gemini API key — get from https://aistudio.google.com/apikey
GEMINI_API_KEY: ""
# Optional DeepSeek API key — get from https://platform.deepseek.com
DEEPSEEK_API_KEY: ""
# Optional OpenRouter API key — get from https://openrouter.ai/keys
OPENROUTER_API_KEY: ""
# Optional RapidAPI key for external job-board discovery.
RAPIDAPI_KEY: ""
volumes:
- data:/data
extra_hosts:
- "host.docker.internal:host-gateway"
healthcheck:
test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:3737"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
volumes:
data:
Values set to changeme are required — replace them with your own
values before starting JobSync.
Prefer a managed setup? WinterFlow installs, configures, and updates JobSync for you using this same Docker Compose configuration.