Aller au contenu

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)

  1. Le scraping LinkedIn/Indeed est le risque principal — ToS l'interdisent explicitement, bannissement agressif des comptes qui automatisent, même via Browser Use/Playwright.
  2. 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é.
  3. 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