Jobber/README.md
ilia 4d7c8ac0bc feat(orchestrator): job list filters — multi source/country, URL sync, exclude
- Parse location strings into country keys (shared search-cities helper).
- URL params: source, sourceExclude, countries, countriesExclude.
- Chip cycle: off → include → exclude (destructive); remote bypasses country rules.
- README: document filter behaviour and query keys.

Unrelated local changes (scorer, notes, schema, etc.) remain unstaged.

Made-with: Cursor
2026-04-06 15:50:47 -04:00

4.9 KiB
Raw Blame History

JobOps

Self-hosted job search orchestration: discover roles from multiple sources, score fit with your profile, draft tailored resumes and cover letters, export PDFs, and track application email—you still submit applications yourself; JobOps prepares the work and keeps state organized.

Licensed under AGPLv3 + Commons Clause — see LICENSE.

Product screenshot

Whats in this repo

Area Role
orchestrator/ Express API, SQLite + Drizzle, pipeline, React (Vite) UI, LLM integrations, Reactive Resume PDF flow
shared/ Shared TypeScript types and settings registry
docs-site/ Docusaurus user and developer documentation
extractors/ Per-source crawlers (Adzuna, Gradcracker, UK Visa Jobs, Hiring Café, Startup Jobs, JobSpy helpers, etc.)

Root package.json is an npm workspace root; day-to-day app commands usually run under orchestrator/.

Features (high level)

  • Sources: Multiple boards and aggregators (exact list evolves; see docs and extractor packages).
  • Scoring & tailoring: LLM compares jobs to your resume profile; optional drafts for summary, headline, skills, and project selection.
  • PDFs: Tailored exports via Reactive Resume (v4 or v5 API). Optional local JSON resume (JOBOPS_LOCAL_RESUME_PATH or Settings) as the base document for profile/tailoring; PDF export still uses RxResume when configured.
  • Pipeline: Scheduled or manual runs (POST /api/pipeline/run, webhook trigger).
  • Post-application: Optional Gmail-based inbox for interview/offer/rejection signals.
  • Job list filters (orchestrator UI): Narrow the pipeline job list by multiple sources and countries (country is inferred from each listings location text). Filters sync to the URL (source, sourceExclude, countries, countriesExclude). Each source/country chip cycles off → include → exclude (exclude shows in red); listings marked remote still pass country include/exclude rules.
  • Data: SQLite and generated artifacts under ./data (default in Docker).

Requirements

  • Node.js 22 (see package.json / Volta pin) for local development.
  • Docker + Compose v2 for the recommended production-style run.

Quick start (Docker)

git clone <your-repo-url>
cd Jobber

cp .env.example .env
# Edit .env: MODEL / LLM keys, Reactive Resume or local resume path, optional BASIC_AUTH, etc.

docker compose up -d --build
  • UI: http://localhost:3005 (host port mapped in docker-compose.yml; app listens on 3001 inside the container).
  • Health: GET /health on the same origin.

Persist data by backing up the mounted ./data directory.

Local development

From the repository root:

npm install

Then use the orchestrator workspace (see orchestrator/README.md for API tables and scripts):

cd orchestrator
cp .env.example .env
npm run db:migrate
npm run dev

Typical dev URLs: API http://localhost:3001, Vite client http://localhost:5173.

Configuration notes

  • LLM: Configurable provider (OpenRouter default; also OpenAI, OpenAI-compatible endpoints, Gemini, Ollama, LM Studio, etc.). Keys can be set in .env or onboarding.
  • Reactive Resume: v5 API key or v4 email/password; optional self-hosted RXRESUME_URL. Full behavior is documented in the docs site under Reactive Resume.
  • Local resume JSON: Set JOBOPS_LOCAL_RESUME_PATH (or the Settings field) to a Reactive Resumeshaped export so you do not need a selected cloud “base resume” for profile and tailoring. PDF generation still performs a temporary import/print through RxResume when credentials are present.

Documentation

Resource Contents
docs-site/ User-facing guides (build with npm run docs:dev from repo root)
orchestrator/README.md Orchestrator layout, endpoints, dev commands
DEPLOY_GITEA_VM_CRON_TELEGRAM.md VM/container deploy, cron, optional Telegram
AGENTS.md API/logging/SSE conventions for contributors and automation

Deploy, cron, Telegram

See DEPLOY_GITEA_VM_CRON_TELEGRAM.md for production deploy, scheduling POST /api/pipeline/run, and optional notifications.

Verification (CI parity)

From the repo root, before merging substantial changes:

./orchestrator/node_modules/.bin/biome ci .
npm run check:types:shared
npm --workspace orchestrator run check:types
npm --workspace orchestrator run build:client
npm --workspace orchestrator run test:run

(Additional workspace typechecks apply in CI; see AGENTS.md.)

License

AGPLv3 + Commons Clause — you may self-host, use, and modify; you may not sell the software or offer paid hosting or support whose value substantially comes from this codebase. See LICENSE.