Automated job search pipeline for DevOps / Cloud / SRE roles. Scrapes jobs, scores them with AI (Groq), and sends Telegram alerts for strong matches.
Built for Vicky Avhad — portable across laptop, Docker, and any cloud server.
Job sources Processing Alerts
───────────── ────────── ──────
LinkedIn scraper ──┐
Hirist, Cutshort, ──┼──► Postgres (job_listings) ──► n8n (every 2h)
Indeed, Instahyre ──┤ status=new Groq AI scoring
Naukri Gmail IMAP ──┘ │ Telegram (≥65%)
▼
Daily digest (9 AM IST)
Naukri activity (home laptop) ──► activity_log
| Service | Port | Role |
|---|---|---|
hireops-db |
5432 | PostgreSQL |
hireops-n8n |
5678 | Workflow automation |
hireops-gotenberg |
3000 | PDF generation (template ready) |
hireops-scrapers |
— | Cron scrapers (host network) |
git clone https://github.com/Vickyavh7/cloudhireops.git
cd cloudhireops
cp .env.example .env
# Edit .env — see Configuration belowbash scripts/setup.shOr manually:
docker compose up -d --build
python3 scripts/export_cookies_from_env.py # optional, if cookies set
DB_HOST=localhost python3 scripts/deploy_n8n_workflows.py
docker exec hireops-n8n n8n publish:workflow --id=tO1tDnLBUgUirMwf
docker exec hireops-n8n n8n publish:workflow --id=HireOpsDaily01| Variable | Required | Purpose |
|---|---|---|
POSTGRES_* |
Yes | Database |
GROQ_API_KEY |
Yes | AI job scoring |
TELEGRAM_BOT_TOKEN |
Yes | Alerts |
TELEGRAM_CHAT_ID |
Yes | Alerts |
GMAIL_IMAP_USER |
For Naukri | Gmail address |
GMAIL_IMAP_APP_PASSWORD |
For Naukri | App password |
NAUKRI_EMAIL / NAUKRI_PASSWORD |
Optional | Home worker login |
NAUKRI_JOBS_SOURCE |
No | email (default) or browser |
HIREOPS_ROLE |
No | server or home |
Never commit .env — it is gitignored.
Naukri blocks datacenter/WSL IPs (Akamai). We use a split approach:
| Task | Where | How |
|---|---|---|
| Jobs | Server | Gmail IMAP reads job alert emails |
| Activity | Home laptop | bash scripts/home_worker.sh |
- Create job alerts on naukri.com (DevOps, Kubernetes, AWS)
- Gmail app password in
.env - Home worker for algorithm activity
# One-time on laptop
bash scripts/setup_home_worker.sh
# Twice daily (8 AM & 8 PM IST)
DB_HOST=localhost bash scripts/home_worker.sh# Inside container
docker exec hireops-scrapers python run_scrapers.py scrape # LinkedIn + email + tier1
docker exec hireops-scrapers python run_scrapers.py naukri-email
docker exec hireops-scrapers python run_scrapers.py linkedin
docker exec hireops-scrapers python run_scrapers.py tier1
# On laptop (activity)
DB_HOST=localhost bash scripts/home_worker.sh- Every 6h: full scrape
- Every 30 min: Naukri email check
| Workflow | Schedule | Action |
|---|---|---|
| HireOps - Process Jobs | Every 2h | Score 5 new jobs → Telegram if ≥65% |
| HireOps - Daily Digest | 9 AM IST | Summary stats to Telegram |
Deploy after changes:
DB_HOST=localhost python3 scripts/deploy_n8n_workflows.py
docker exec hireops-n8n n8n publish:workflow --id=tO1tDnLBUgUirMwfcloudhireops/
├── docker-compose.yaml
├── sql/001_schema.sql
├── scrapers/ # Playwright scrapers + email ingest
├── scripts/ # Setup, deploy, home worker
├── templates/ # Gotenberg resume HTML
├── browser_sessions/ # Portable login state (gitignored)
├── cookies/ # Optional cookie files (gitignored)
└── docs/BUILD_LOG.md # What we built (history)
| Platform | Jobs source | Notes |
|---|---|---|
| Scraper | Working | |
| Hirist | Scraper | Working |
| Cutshort | Scraper | Working |
| Indeed | Scraper | Partial; may need cookies |
| Naukri | Gmail email | Alerts + IMAP |
| Instahyre | Scraper | Cloudflare; needs cookies |
| Wellfound | Scraper | Often IP blocked |
- Rotate any API keys or passwords that were shared in chat or logs
.env,browser_sessions/, andcookies/are not pushed to GitHub- Use Gmail app passwords, not your main Google password
- BUILD_LOG.md — full build history
- NAUKRI_SETUP.txt — Naukri alerts + home worker
- COOKIE_GUIDE.txt — portable session cookies
- GMAIL_APP_PASSWORD.txt — Gmail setup
MIT — use and modify freely.