Pipeline IA de recherche d'emploi — vision produit fondatrice¶
Contexte¶
Document de conception initial de jobPipeline (export d'une conversation Claude.ai antérieure à l'implémentation) — la vision produit complète qui a donné naissance au projet. Sert de référence pour toute décision de scope ou d'architecture future.
Contenu¶
Vision¶
Transformer le flux manuel CV → Recherche manuelle → Lecture annonces →
Adaptation CV → Lettre → Candidature en flux assisté par IA CV maître →
Agent IA → Collecte automatique → Scoring → CV ciblé → Lettre ciblée →
Validation → Envoi → Suivi.
Stack technique retenue¶
Frontend : React, TypeScript, Tailwind, React Query, React Hook Form, Zod Backend : Node.js, Express, TypeScript, Prisma, PostgreSQL IA : Anthropic/OpenAI API pour le raisonnement, embeddings pour la comparaison CV/offres, pgvector plutôt qu'une base vectorielle séparée (pas de nouvelle techno à apprendre pour un projet solo).
Analyse critique de la proposition initiale (points corrigés)¶
- Le scraping LinkedIn/Indeed est le risque principal — ToS l'interdisent explicitement, bannissement agressif des comptes qui automatisent, même via Browser Use/Playwright.
- L'auto-remplissage de candidature (agent navigateur) est risqué pour le compte personnel — détection d'automatisation par les plateformes, effet inverse de l'objectif recherché.
- Scope initial trop large pour un démarrage solo — 6 phases + 10 tables + 4 agents + navigateur automatisé = plusieurs semaines avant la première candidature envoyée.
MVP réaliste retenu¶
Phase 1 (1-2 semaines) : CV maître structuré JSON, agent de scoring (offre collée manuellement → score + CV ciblé), agent de lettre, validation/envoi manuels. Phase 2 (si Phase 1 prouve sa valeur) : ajout d'une source de collecte stable, automatisation du tri quotidien.
L'humain reste dans la boucle pour la collecte et l'envoi (où le risque légal/technique est concentré) ; l'IA fait ce qu'elle fait bien : analyser, scorer, rédiger.
Stratégie de collecte retenue — RSS / sites carrières directs plutôt que scraping des gros agrégateurs¶
Les gros agrégateurs (LinkedIn, Indeed) ont une protection anti-bot dédiée ; un site carrière d'entreprise individuelle n'en a généralement aucune. Sources concrètes :
- APIs natives des ATS : Greenhouse (
boards.greenhouse.io/[company].json), Lever (api.lever.co/v0/postings/[company]?mode=json), Workable, SmartRecruiters. - APIs officielles : Adzuna, Jobicy, Remotive, Arbeitnow, France Travail.
- Sites carrières ciblés : liste de 30-50 entreprises (Cotonou, Bénin, Afrique de l'Ouest, remote), scraping direct Playwright/Cheerio — casse rarement contrairement à un scraper LinkedIn.
Interface commune DDD-friendly :
interface JobSourceConnector {
readonly sourceId: string;
fetchOffers(): Promise<RawJobOffer[]>;
}
Architecture du pipeline complet¶
Couche Collecte (connecteurs ATS/API/custom)
→ RawJobOffer[] (format unifié)
Couche Normalisation (dédup par hash titre+entreprise, nettoyage HTML, mapping domaine)
→ JobOffer
Agent Analyseur (IA) → JobAnalysis structuré
Agent Scoring (IA) → MatchingScore
→ si score >= seuil (ex: 75) : génération CV ciblé + lettre → validation humaine → Application
→ sinon : archivé, consultable manuellement
Point d'implémentation important : Promise.allSettled (pas
Promise.all) pour la collecte — un connecteur qui plante un jour ne
doit jamais bloquer la collecte des autres sources.
Config extensible par simple ajout de ligne :
export const connectors: JobSourceConnector[] = [
new GreenhouseConnector(["acme", "startupx", "techco"]),
new LeverConnector(["companyA", "companyB"]),
new RemotiveConnector({ category: "software-dev" }),
new AdzunaConnector({ country: "fr", keywords: ["react", "typescript"] }),
];
Cadence : cron quotidien (VPS + Caddy/Docker existant) →
DailyJobPipeline.run() → notification → consultation → validation
manuelle → envoi manuel (Phase 1).
Décision / Conclusion¶
MVP Phase 1 retenu comme point de départ réel (scoring + génération manuelle), collecte automatique via RSS/API d'ATS plutôt que scraping d'agrégateurs, report de l'auto-remplissage de candidature à une phase ultérieure incertaine (risque de bannissement de compte jugé trop élevé pour un usage personnel).
À faire¶
- [ ] Schéma Prisma complet (
JobOffer,JobAnalysis,MatchingScore,ResumeVersion,CoverLetter,Application) - [ ] Implémentation d'un connecteur réel (Greenhouse ou Remotive) pour valider le format
- [ ] Structure DDD/Clean Architecture du module
- [ ] Agent d'analyse et agent de scoring (prompts + intégration Anthropic API)
- [ ] Génération de CV ciblé et lettre de motivation
- [ ] Cron sur le VPS Hetzner (Docker + Caddy)
Voir l'avancement détaillé dans jobPipeline/roadmap/roadmap-missions.
Liens connexes¶
- jobPipeline/roadmap/roadmap-missions — plan de missions détaillé découlant de cette vision
- jobPipeline/architecture/procedure-cablage-auth-package — première brique implémentée (module Auth, prérequis de tous les modules métier)
- jobPipeline/index — index du projet