Public project
Jobs Tracker Bot
An async Python bot that reads ATS, employer, and curated job feeds, applies hard eligibility and fit checks, persists deduplicated matches in SQLite, and routes immediate or digest alerts to Discord and Telegram.
- Role
- Designed and implemented the aggregation, filtering, scoring, persistence, notification, scheduling, health, concurrency, and delivery pipeline.
- Result
- Turns heterogeneous job feeds into deterministic, SQLite-deduplicated immediate, digest, and diagnostic outcomes.
- Stack
- Python · SQLite · Docker · GitHub Actions · Discord · Telegram
System architecture
The building blocks in view
Read the system as text
- ATS and employer boardsDirect employer feeds such as Greenhouse, Ashby, Personio, Lever, Workable, and JSON-LD career pages.Connects to Source adapters (job data).
- Curated job feedsConfigured secondary sources supplement direct employer boards.Connects to Source adapters (job data).
- Async scan schedulerAPScheduler starts scans and periodic operational tasks.Connects to Source adapters (runs scans).
- Source adaptersAsync provider-specific acquisition is isolated from the shared pipeline.Connects to Eligibility and scoring (normalised jobs).
- Eligibility and scoringHard eligibility, role, stack, language, recency, NGO classification, and match scoring.Connects to SQLite job store (accepted jobs).
- SQLite job storeURL/content deduplication, jobs, and notification state persist across scans.Connects to Alert router (new match tiers).
- Alert routerRoutes immediate, digest, and diagnostic tiers.Connects to Discord and Telegram (alerts and digests).
- Discord and TelegramImmediate alerts and digest delivery channels.
Key decisions
What shaped the implementation
Isolate source adapters
- Reason
- Kept provider-specific acquisition behaviour outside the shared pipeline.
- Trade-off
- Each source needs its own adapter maintenance.
Keep eligibility and fit separate
- Reason
- Made location suitability and role relevance reviewable as distinct decisions.
- Trade-off
- Requires more pipeline stages than one combined score.
Persist before alerting
- Reason
- Prevents duplicate alerts across scheduled runs.
- Trade-off
- Introduces stored notification state to manage.
Outcome
Verified delivery
Automated tests
Pipeline and adapter coverage.