This workflow builds and pushes Docker images to GitHub Container Registry (GHCR) for tagged releases and pull requests.
JobOps
AI-powered job discovery and application pipeline. Automatically finds jobs, scores them against your profile, and generates tailored resumes.
Workflow
- Search: Scrapes Gradcracker, Indeed, LinkedIn, and UK Visa Sponsorship jobs.
- Score: AI ranks jobs by suitability using OpenRouter.
- Tailor: Generates a custom resume summary for top-tier matches.
- Export: Uses RxResume v4 to create tailored PDFs.
- Manage: Review and mark jobs as "Applied" via the dashboard (syncs to Notion).
Example of generating a tailored resume for a job
https://github.com/user-attachments/assets/5b9157a9-13b0-4ec6-9bd2-a39dbc2b11c5
Example of applying to a Ready job
https://github.com/user-attachments/assets/06e5e782-47f5-42d0-8b28-b89102d7ea1b
Quick Start
# 1. Clone and move to directory
git clone https://github.com/DaKheera47/job-ops.git
cd job-ops
# 2. Docker up (this will take a while because of Camoufox)
docker compose up -d --build
# 3. Open the dashboard, the app will onboard your credentials
open http://localhost:3005
The app will guide you through setup on first launch. The onboarding wizard helps you:
- Connect your OpenRouter API key (for AI scoring/tailoring)
- Add your RxResume credentials (for PDF export via v4.rxresu.me)
- Select a template resume from your v4.rxresu.me account
Structure
/orchestrator: React frontend + Node.js backend & pipeline./extractors: Specialized scrapers (Gradcracker, JobSpy, UKVisaJobs)./data: Persistent storage for SQLite DB and generated PDFs.
Technical breakdowns here: documentation/extractors/README.md
Orchestrator docs here: documentation/orchestrator.md
Read-only mode (Basic Auth)
You can make the app read-only for the public by setting a username and password in the Settings page. After this, all write actions (POST/PATCH/DELETE) require Basic Auth; browsing and viewing remain public.
Persistent data lives in ./data (bind-mounted into the container).
Running (local dev)
Prereqs: Node 20+, Python 3.10+, Playwright browsers (Firefox).
Install Node deps (both packages):
cd orchestrator && npm install
cd ../extractors/gradcracker && npm install
Configure the orchestrator env + DB:
cd ../orchestrator
cp .env.example .env
npm run db:migrate
npm run dev
Dev URLs:
- API:
http://localhost:3001/api - UI (Vite):
http://localhost:5173
Notes / sharp edges
- Crawl targets: edit
extractors/gradcracker/src/main.tsto change the Gradcracker location/role matrix. - Pipeline config knobs:
POST /api/pipeline/runaccepts{ topN, minSuitabilityScore };PIPELINE_TOP_N/PIPELINE_MIN_SCOREare used bynpm run pipeline:run(CLI runner). - Anti-bot reality: crawling is headless + "humanized", but sites can still block; expect occasional flakiness.
Note on Analytics: The current alpha version includes anonymous analytics (Umami) to help me debug performance. This will be made opt-in only in the upcoming updates. If you want to disable it now, block umami.dakheera47.com in your firewall.
Contact
If you need any help with any step of the process, feel free to open an issue. I am actively monitoring this section and I would be extremely happy to help you get up and running!
License
AGPLv3