A personal automation pipeline that scrapes job vacancies, filters and scores them with AI, and delivers the best matches via Telegram.
Vacancies move through three layers, each with a clear responsibility:
Bronze → raw scraped vacancies
Silver → rule-filtered, profile-matched, ready for AI
Gold → AI-scored, ranked, ready for notification
The candidate profile lives in profiles.json and drives both the Silver filtering rules and the AI scoring prompt. The current implementation covers the full Bronze layer and profile loading — Silver promotion rules and AI scoring are next.
| File | Responsibility |
|---|---|
main.py |
Pipeline entrypoint |
cathoScraper.py |
Catho vacancy scraper (Playwright) |
database.py |
MongoDB connection, collections, indexes |
user_profile.py |
Profile loading and prompt generation |
profiles.json |
Candidate profile config |
ai_scoring.py |
(reserved — AI scoring) |
telegram.py |
(reserved — Telegram delivery) |
notification.py |
(reserved — notification tracking) |
Requirements: Python 3.10+, a MongoDB Atlas cluster, a Playwright-compatible environment.
Environment variables (.env at project root):
MONGODB_URL=your_mongodb_connection_string
MONGODB_DB=JobHunterInstall:
pip install pymongo python-dotenv playwright
playwright installRun:
python3 main.pyThis scrapes Catho vacancies, builds vacancy documents, and inserts them into MongoDB with duplicate URL protection.
- Catho scraping via Playwright
- MongoDB Atlas connection via environment variables
- Vacancy insertion with duplicate URL blocking
- Profile loading from
profiles.json - Profile-to-prompt conversion for the AI layer
- Deterministic Bronze → Silver promotion rules
- AI scoring in
ai_scoring.py - Persist scored vacancies to Gold
- Telegram notifications
- Scheduling and monitoring
.envis gitignoredprofiles.jsonstores candidate configuration, not application logic