📊 Vue d'ensemble
Sessions / jour
2×
6h et 20h (heure de Paris)
Max offres / session
20
Plafond de sécurité
Validation
WA
Gon approuve via WhatsApp
Soumission
0
Zéro clic manuel requis
🕐 Planification
06:00
Session matinale — scrape les nouvelles offres publiées la nuit
20:00
Session soir — scrape les offres publiées dans la journée
Heure de Paris (Europe/Paris). Lancé automatiquement par OpenClaw cron.
🔄 Workflow principal (run.js)
1. Login Collective.work
Playwright ouvre Chromium, se connecte avec les credentials Sinane (sin.sim@outlook.fr)
2. Scraping des offres
Parcourt la liste des missions disponibles, extrait titre, client, TJM, technos, questions
3. Décision par offre
Analyse les technologies requises — voir règles ci-dessous
4. Préparation candidature (si JS)
Génère le CV PDF avec titre adapté (HTML → Playwright → PDF), sauvegarde dans state.json
5. Récap WhatsApp à Gon
Envoie un résumé avec titre de l'offre, TJM, client, lien, et ID pour validation
6. Attente validation
Gon répond "ok" / "non" / modification → l'agent agit en conséquence
🎯 Règles de décision
| Technologie détectée | Action | CV adapté |
|---|---|---|
| React, Vue.js, Angular | ✓ Postuler | Titre adapté |
| Node.js, Next.js, NestJS, Nuxt | ✓ Postuler | Titre adapté |
| React + Node.js (les deux) | ✓ Postuler | CV original |
| PHP, Python, Java, Ruby, .NET… | ✗ Décliner | — |
| Offre sans techno identifiée | ✗ Décliner | — |
TJM : toujours proposer le maximum indiqué dans l'offre (tjmMax).
📄 CV adaptatif (HTML → PDF)
Source
/home/sinane/cv.html
Ne jamais modifier
→
Transformation
Remplace
.subtitle si offre non React+Node→
Output
/tmp/collective-cv/*.pdf
Temporaire, recréé chaque session
💬 Validation WhatsApp
👍
Gon valide
"ok", "oui", ✅
1.Lire state.json
2.Générer réponses aux questions (via xp.md)
3.Sauvegarder dans state.json
4.Lancer submit.js → soumission
✏️
Modification
"change le TJM à 600", "modifie Q2"
1.Charger state.json
2.Modifier tjmProposed ou questions[i].answer
3.Renvoyer récap WA + "ok pour envoyer ?"
❌
Gon refuse
"non", "annule", ❌
1.Lancer submit.js --cancel <id>
2.Confirmer à Gon par WA
L'ID de l'offre est toujours dans le récap WA sous la forme
_ID offre: abc123_. Si Gon ne précise pas d'ID, l'agent prend la candidature la plus récente en pending_validation.
🚀 Soumission (submit.js)
Confirmation à 2 clics sur Collective.work
Clic 1
"Envoyer la candidature" → ouvre une modal de confirmation
Clic 2
"Envoyer" dans la modal → soumission réelle et irréversible
⚠️ Soumissions séquentielles obligatoires — jamais en parallèle (Collective.work refuse deux sessions simultanées)
📁 Fichiers clés
skills/collective-apply/state/state.json
État persistant — offres traitées, candidatures en attente
scripts/run.js
Session cron — scrape + décision + récap WA
scripts/submit.js
Soumission après validation Gon
/home/sinane/cv.html
Source CV — ne jamais modifier directement
/home/sinane/xp.md
Expériences détaillées de Sinane — base des réponses aux questions
/tmp/collective-cv/
CVs PDF générés (temporaires, recréés chaque session)