| name | jobradar-context |
| description | Complete context for the JobRadar automated job discovery pipeline โ architecture, modules, decisions, and current state. Read this before any task involving JobRadar code. |
JobRadar โ Project Context
What is JobRadar?
JobRadar is a fully automated job discovery pipeline built in Python. It aggregates jobs from 17 sources (ATS APIs, job boards, RSS feeds, Google dorking, Telegram channels), deduplicates across runs, filters with zero-cost heuristic rules, ranks by relevance, scores the top candidates with AI (Google Gemini), and delivers urgent matches via Telegram. Built for freshers/interns but fully configurable for any role via profile.yaml.
Tech Stack
- Language: Python 3.11+
- AI: Google Gemini free tier โ
gemini-3.1-flash-lite via google-genai SDK
- Database: SQLite (via
storage/db.py)
- Notifications: Telegram Bot API (
python-telegram-bot>=21.0)
- Config: YAML (
profile.yaml for user prefs, companies.yaml for ATS slugs)
- Search: Serper.dev (Google dorking)
- Scraping:
scrapling, beautifulsoup4, lxml, httpx, aiohttp
- Deployment: AWS EC2 t2.micro, runs via
run.sh with auto-shutdown after completion
Project Structure
jobradar/
โโโ main.py # Entry point โ orchestrates full pipeline
โโโ profile.yaml # User config (roles, skills, location, filters, weights)
โโโ companies.yaml # ATS company slugs for 10 platforms
โโโ .env # API keys (GEMINI_API_KEY, GROQ_API_KEY, SERPER, TELEGRAM)
โโโ requirements.txt # Python dependencies
โโโ run.sh # EC2 boot script (git pull โ pip install โ pipeline โ followup โ shutdown)
โ
โโโ sources/ # Job fetchers โ one file per source
โ โโโ ats.py # 10-platform ATS polling (Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Rippling, BambooHR, Recruitee, Personio)
โ โโโ workday.py # Workday โ POST-based API (separate pattern)
โ โโโ naukri.py # Naukri.com โ keyword ร location search with Stage-1 inline filters
โ โโโ hirist.py # Hirist.tech โ India niche tech board (currently disabled: TODO test and fix)
โ โโโ yc.py # YC jobs โ two-phase scraper (card listing โ full JD)
โ โโโ internshala.py # Internshala โ optimised plain-HTTP parser
โ โโโ freshers_blogs.py # 8+ Indian fresher blogs โ concurrent RSS + lazy JD fetch
โ โโโ serper.py # Tiered Google dork discovery (Tier 1 + Tier 2 budget split)
โ โโโ hackernews.py # HN "Who is Hiring?" โ Algolia auto-discovery
โ โโโ reddit.py # Reddit RSS feeds (disabled: returns people-looking-for-work posts)
โ โโโ hiringcafe.py # hiring.cafe โ Next.js API, entry-level filtered
โ โโโ jobicy.py # Jobicy.com โ remote jobs JSON API
โ โโโ remoteok.py # RemoteOK โ JSON API
โ โโโ cutshort.py # Cutshort.io (disabled: public API unreliable)
โ โโโ instahyre.py # Instahyre (disabled: API 404)
โ โโโ wellfound.py # Wellfound (disabled: blocks bots)
โ โโโ telegram_channels.py # Telegram job channels via Telethon MTProto (9 curated Indian channels)
โ โโโ utils.py # Shared source utilities
โ
โโโ pipeline/ # Processing stages (order matters)
โ โโโ dedup.py # Run-level (in-memory) + persistent (SQLite) dual-hash dedup
โ โโโ prefilter.py # Multi-layer rule-based hard filters (age, experience, location, blacklists, ATS caps)
โ โโโ ranker.py # 6-layer heuristic relevance ranker (profile-driven, zero AI cost)
โ โโโ scorer.py # Gemini AI scorer โ fully scored (no token budget gate), few-shot calibrated, native JSON mode
โ
โโโ notify/ # Notification layer
โ โโโ telegram_bot.py # Urgent push alerts + session divider card
โ โโโ tracker_bot.py # Standalone Telegram polling bot (/applied, /responded, /status, /help)
โ โโโ followup_check.py # 7-day followup drafts + 14-day dead marking
โ โโโ weekly_summary.py # Friday weekly radar digest (7 insights, source quality, market demand)
โ
โโโ storage/
โ โโโ db.py # SQLite schema, dedup functions, job CRUD, run stats, application tracker
โ
โโโ data/ # Auto-created at runtime (gitignored)
โ โโโ profile.db # Single SQLite database (named after profile.yaml)
โ โโโ profile.log # Rotating run logs (1MB ร 3 files)
โ
โโโ docs/ # Human-facing documentation
โโโ setup_guide.md # Full setup walkthrough
โโโ implementation_guide.md # Deep technical reference
โโโ roadmap.md # Product roadmap (Phase 0โ5)
Pipeline Flow
16 Sources (concurrent) โ ~8,000โ9,500 raw jobs
โ
Dual-Hash Deduplication โ ~600โ900 new jobs
โ
Rule-Based Pre-Filter (drops ~90โ95%) โ ~600โ700 eligible
โ
6-Layer Heuristic Ranker (sorts best-first) โ same count, reordered
โ
AI Scorer (Gemini flash-lite, up to 150 jobs/run) โ score 1โ10
โ
Score โฅ8 โ Telegram push | Score 6โ7 โ Session digest | Score <6 โ DB only
Current State (as of July 2026)
Working sources (13): ATS (10 platforms), Workday, Naukri, YC, Internshala, freshers_blogs, Serper, HN, hiring.cafe, Jobicy, RemoteOK, telegram_channels (9 Indian channels)
Disabled sources (5): Cutshort (broken API), Instahyre (API 404), Wellfound (bot blocking), Reddit (wrong content), Hirist (untested/TODO)
Deployment: EC2 t2.micro, auto-starts via EventBridge schedule, runs pipeline, then auto-shuts down
Recent focus: Telegram source pipeline fixes (heuristic removal, Gemini prompt fix, ranker boost +3, per-source observability logs in prefilter/ranker)
Key Numbers
| Metric | Value |
|---|
| Gemini model | gemini-3.1-flash-lite (GA, May 2026, 15 RPM / ~1,500 RPD) |
| Token budget/run | None (Gemini ~1.5M TPD โ no per-run ceiling) |
| Request interval | 4.5s (~13.3 req/min, under ~15 RPM, well under ~250K TPM) |
| Max AI jobs/run | 150 (all scored โ no budget-based skipping) |
| JD description limit | 6,000 chars (was 3,000 with Groq) |
| Serper budget | 25 queries/run (of 2,500/month free) |
| Pipeline duration | ~20โ22 minutes total |
| GEMINI_API_KEY | Required in .env |
Deep-Dive References
For module-level detail, DB schema, and API specifics โ read references/architecture.md
For design decisions and rationale โ read references/decisions.md
For recent changes โ read references/changelog.md