Imagine un robot serviteur qui dort sur un nuage. Tu lui as appris 3 missions et tu lui as mis 3 réveils.
Quand chaque réveil sonne, il fait une seule mission, puis se rendort. Il ne fait rien d'autre. Pas besoin que ton ordi soit ouvert ; il vit là-haut tout seul.
Le robot s'appelle eo-backup-worker. Il vit sur Cloudflare Workers. Le code est dans ~/Projects/eo-backup-worker/.
Le robot fait une photocopie de la newsletter Kit (tous les abonnés + leurs tags) et de la base de données du site (D1), puis range les 4 fichiers dans un tiroir privé sur Cloudflare R2. Comme une photo de famille rangée à l'abri.
Couvre 12 mois de rétention. Tous les 1ers janvier/avril/juillet/octobre, il refait un test de restauration sur une DB preview pour vérifier que les sauvegardes sont vraiment lisibles (le « dry-run trimestriel »).
À chaque run, tu reçois un mail récap par Resend (✅ ok / ⚠️ partial / ❌ failed) listant ce qui a été sauvegardé.
cron :0 3 1 * * · cible R2 : eo-backups bucket · doc : Notion chap 13 (Monitoring/alerting) + sous-page Setup backup mensuel Kit + D1 — 2026-04-30
Le robot regarde les 3 pages publiques Cal.com (byCaliber / Forja / EO) et compte les créneaux dispo sur les 4 prochaines semaines. Si un créneau est mort (un autre RDV t'empêche d'être là), il t'envoie un mail "🔴 MORT" pour que tu décides quoi faire.
Si tu fixes le conflit (ou si le chaos hebdo bouge le créneau ailleurs), tu reçois un mail "🟢 REVIVED" au prochain check. Pas de mail quand tout va bien — silence radio.
Sa mémoire vit dans Cloudflare KV (clé cal_slot_health:v2) — elle stocke l'état de chaque (event × date) pour détecter les transitions.
0 7 * * * · code : eo-backup-worker/src/cal-monitor.js · trigger manuel : POST /admin/cal-monitor-now?token=...
Le robot tire au hasard les heures des créneaux LUN aprem / MER matin / VEN soir pour les 4 prochaines semaines, et permute byCaliber / Forja / EO sur les 3 plages 30min de chaque jour. Comme un magicien qui rebat les cartes chaque dimanche soir.
Effet voulu : chaque visiteur qui revient sur cal.com une semaine plus tard voit des heures différentes. Crée un effet "vraie vie pleine" plutôt que "machine bien huilée 3 créneaux fixes".
Bornes des heures dans la constante STARTS du code (LUN 13:00-16:00 / MER 10:00-11:00 / VEN 18:30-19:00). À éditer + redeploy si besoin de bouger une borne. Tu reçois un mail récap après chaque run.
0 21 * * SUN · code : eo-backup-worker/src/cal-randomize.js · trigger manuel : POST /admin/cal-randomize-now?token=...
| Quoi | Valeur |
|---|---|
| Worker | eo-backup-worker · Cloudflare account 88ff6259a88cb5fb8e8b9e13e082d7c4 |
| URL | https://eo-backup-worker.alexandre-corne-ac.workers.dev |
| Repo | ~/Projects/eo-backup-worker/ |
| Crons | 0 3 1 * * (backup) · 0 7 * * * (cal-monitor) · 0 21 * * SUN (cal-randomize) |
| Secrets | RESEND_API_KEY · KIT_API_KEY · D1_API_TOKEN · D1_PREVIEW_API_TOKEN · BACKUP_HEALTH_TOKEN · CAL_API_KEY · NOTIFY_FROM · NOTIFY_TO |
| Bindings | R2 eo-backups · D1 eliteoutsiders + eliteoutsiders-preview · KV BACKUP_STATE |
| Endpoints admin (POST + ?token=BACKUP_HEALTH_TOKEN) | /admin/run-now · /admin/cal-monitor-now · /admin/cal-randomize-now |
| Healthcheck (GET + ?token=BACKUP_HEALTH_TOKEN) | /backup/last-run |
| State KV (cal-monitor) | namespace id 09082b5063a34c238de4b117efaf7d93 · clé cal_slot_health:v2 |