Automatisation de la recherche d'emploi : collecte d'offres sur plusieurs sites, adaptation du CV à chaque offre, suivi des candidatures dans Google Sheets et dashboard HTML.
- Collecte d'offres depuis HelloWork, France Travail (API officielle), Indeed, Welcome to the Jungle et APEC.
- Adaptation du CV par sélection de blocs Markdown taggués, selon les mots-clés de chaque offre — pas d'appel LLM.
- Suivi des candidatures dans un Google Sheets.
- Dashboard HTML statique avec vue générale (synthèse, funnel) et vue détail par candidature.
LinkedIn n'est pas inclus en phase 1 (risque de bannissement du compte) — sera traité plus tard via une extension navigateur.
- Python ≥ 3.11
httpx+selectolaxpour la collecte ;playwrightsi une source résistesqlmodel+ SQLite comme source de vérité localeweasyprintpour générer les CV PDF depuis HTML/CSSgspreadpour Google Sheetsjinja2pour le dashboard HTMLtyperpour la CLI
uv sync
cp config.example.yaml config.yaml
cp .env.example .env
# éditer config.yaml et .env avec tes critères et secretsuv run auto-postule collect # collecte des offres
uv run auto-postule render-cv <offer_id> # génère le CV PDF pour une offre
uv run auto-postule sync-sheets # synchronise avec Google Sheets
uv run auto-postule build-dashboard # génère le dashboard HTMLsrc/auto_postule/
├── cli.py # entrée CLI (typer)
├── config.py # lecture config.yaml + .env
├── db.py # SQLite via sqlmodel
├── models.py # Offer, Application, etc.
├── collectors/ # un module par source
├── cv/ # matching blocs + rendu PDF
├── tracker/ # Google Sheets
└── dashboard/ # générateur HTML statique
cv_source/ # blocs de CV Markdown (à fournir)
data/ # SQLite + CV générés (non versionné)
- Phase 0 — Squelette du projet
- Phase 1 — Collecteur France Travail (API)
- Phase 2 — Autres collecteurs (HelloWork, Indeed, WTTJ, APEC)
- Phase 3 — CV en blocs Markdown + matching + PDF
- Phase 4 — Synchronisation Google Sheets
- Phase 5 — Dashboard HTML statique
- Phase 6 — Extension navigateur LinkedIn