Tools · Robots ← Tools menu Updated 10-09-2026

Robots

Every automation that runs on its own for byCaliber. A "cron" is just the technical word for a scheduled wake-up: a robot = a program + its wake-up. Families below: Cloudflare robots (CRON1-9), n8n robots on the VPS, routines and event triggers.

10-09-2026—UPDATE
bycaliber-backup-worker CF · maintained by Claude Code
▶ BYCALIBER WORKERSread live from the Cloudflare API
The Cloudflare Workers of byCaliber · list and attached crons read from the API at each load, never declared · repo and role come from a map in functions/api/admin/workers.js · one brand per page, the other brands list theirs on their own /crons
WorkerCrons attachedLast deployRepoRole
Loading the account…

▶ CRONS8 cards · 8 CF Workers + 0 local launchd
CF Workers — 8 deployed, all on bycaliber-backup-worker (bycaliber-cron-purge was deleted from the account on 28/08/2026)

CRON1 — Unused pages

CRON MONTHLY 01st @ 06h UTC
06:00 UTC on the 1st · bycaliber-backup-worker/src/unused-pages.js · LIVE, deployed 2026-09-09, first run 2026-10-01 (rule 12, Intranet structure)

Lists the intranet pages with no visit in 90 days plus the public paths gone quiet, one email to AL. Same numbers next to every link on /alllinks. Read-only on D1.

Technical details
  • Source data: tools_visits, fed by the beacon in /assets/bc-theme.js (one hit per page, per browser, per day, never from an iframe) and tools_pages, rewritten at every deploy by scripts/pages-inventory.js.
  • Until 2026-12-08 the window is shorter than 90 days and the email says so.
  • Manual trigger: POST /admin/unused-pages-now?token=… on the worker (ADMIN_TOKEN required since 2026-09-10); the Run now button above goes through the intranet proxy /api/admin/run-cron. ?dry=1 computes without sending.
cron: 0 6 1 * * · code: bycaliber-backup-worker/src/unused-pages.js · worker: https://bycaliber-backup-worker.alexandre-corne-ac.workers.dev

CRON2 — Events archive

CRON MONTHLY 01st @ 02h UTC
02:00 UTC on the 1st · bycaliber-backup-worker/src/events-archive.js · LIVE, trigger confirmed 27/08/2026

Archives the previous month of the events table to R2 bycaliber-backups, then deletes those rows from D1. Backup first: an R2 failure blocks the DELETE, so nothing is lost.

Heads-up — the only cron on this page that DELETEs rows from the live events table (after archiving them to R2, R2-fail-HARD).

Technical details
  • Runs one hour BEFORE the backup at 03:00 so the R2 dump captures an already-cleaned table.
  • The DELETE cutoff is the start of the current month, which is why the retention purge, whose worker was deleted on 28/08/2026, no longer carries an events clause.
  • Trigger confirmed live on the Cloudflare schedules API on 27/08/2026.
  • Manual trigger: POST /admin/events-archive-now?token=… on the worker (ADMIN_TOKEN required since 2026-09-10); the Run now button above goes through the intranet proxy /api/admin/run-cron. Idempotent: the current month is never touched.
cron: 0 2 1 * * · code: bycaliber-backup-worker/src/events-archive.js · R2: bycaliber-backups

CRON3 — Security backup

CRON MONTHLY 01st @ 03h UTC
03:00 UTC on the 1st · bycaliber-backup-worker/src/index.js (runBackup) · LIVE, trigger confirmed 27/08/2026

Dumps every business table of D1 bycaliber into a single SQL file (CREATE TABLE plus one INSERT per row) and uploads it to R2 bycaliber-backups under YYYY-MM/.

Technical details
  • The retention purge worker that used to run at this exact minute on the same database was moved to 05:00 on 27/08/2026, then deleted from the account on 28/08/2026 (it was a no-op).
  • Trigger confirmed live on the Cloudflare schedules API on 27/08/2026.
  • Manual trigger: POST /run?confirm=YES on the worker, not proxied (backups are launched from the worker only). Same remark as the other endpoints: no token check today.
cron: 0 3 1 * * · code: bycaliber-backup-worker/src/index.js · R2: bycaliber-backups/YYYY-MM/

CRON4 — Page Flow crawler

CRON WEEKLY MON 04h UTC
Monday 04:00 UTC · bycaliber-backup-worker/src/page-flow-crawl.js · LIVE, trigger confirmed 27/08/2026

Fetches bycaliber.work/sitemap.xml, walks every public page and extracts every clickable element (links, buttons, [role="button"], [data-track-id]). Upserts page_inventory and button_inventory.

Technical details
  • If the sitemap fetch fails, the stale cleanup is skipped so nothing is wiped by accident.
  • Runs four hours before the weekly snapshot (CRON8) so the report leans on a fresh inventory. Read by /page-flow.
  • Trigger confirmed live on the Cloudflare schedules API on 27/08/2026.
  • Manual trigger: POST /admin/page-flow-crawl-now?token=… on the worker (ADMIN_TOKEN required since 2026-09-10); the Run now button above goes through the intranet proxy /api/admin/run-cron.
cron: 0 4 * * 1 · code: bycaliber-backup-worker/src/page-flow-crawl.js · writes: page_inventory, button_inventory

CRON5 — URL audit

CRON MONTHLY 01st @ 04h UTC
04:00 UTC on the 1st · bycaliber-backup-worker/src/url-audit.js · LIVE, trigger confirmed 27/08/2026

Builds its baseline from bycaliber.work/sitemap.xml, crawls each URL and buckets the results: 200 and 3xx are fine, 4xx warn, 5xx and network failures are errors. Mails only when something is off.

Technical details
  • Runs one hour after the backup on purpose, so the crawl does not compete with the R2 upload.
  • Trigger confirmed live on the Cloudflare schedules API on 27/08/2026.
  • Manual trigger: POST /admin/url-audit-now?token=… on the worker (ADMIN_TOKEN required since 2026-09-10); the Run now button above goes through the intranet proxy /api/admin/run-cron.
cron: 0 4 1 * * · code: bycaliber-backup-worker/src/url-audit.js

CRON6 — Analytics map refresh

CRON SEMI-ANNUAL 01/01 + 01/07 05h
05:00 UTC on 1 January and 1 July · bycaliber-backup-worker/src/analytics-map-refresh.js · LIVE, trigger confirmed 27/08/2026 · next run 01/01/2027

Counts rows per analytics table and per event type, then writes the snapshot back so the analytics map page reflects reality twice a year.

Technical details
  • Trigger confirmed live on the Cloudflare schedules API on 27/08/2026.
  • Manual trigger: POST /admin/analytics-map-refresh-now?token=… on the worker (ADMIN_TOKEN required since 2026-09-10); the Run now button above goes through the intranet proxy /api/admin/run-cron.
cron: 0 5 1 1,7 * · code: bycaliber-backup-worker/src/analytics-map-refresh.js

CRON7 — Error events watchdog

CRON DAILY 06h UTC
Daily 06:00 UTC · bycaliber-backup-worker/src/error-events-watchdog.js · LIVE, trigger confirmed 27/08/2026

Reads error_events over the last 24 hours plus the KPI thresholds. Sends one consolidated mail if anything is breached, and stays completely silent otherwise.

Technical details
  • Silence is the normal state, so an outage of this robot looks exactly like a healthy day. Fire the manual trigger to prove it still answers.
  • Trigger confirmed live on the Cloudflare schedules API on 27/08/2026.
  • Manual trigger: POST /admin/error-events-watchdog-now?token=… on the worker (ADMIN_TOKEN required since 2026-09-10); the Run now button above goes through the intranet proxy /api/admin/run-cron.
cron: 0 6 * * * · code: bycaliber-backup-worker/src/error-events-watchdog.js · reads: error_events

CRON8 — Weekly report

CRON WEEKLY MON 08h UTC
Monday 08:00 UTC · bycaliber-backup-worker/src/weekly-snapshot.js · LIVE, trigger confirmed 27/08/2026

Weekly snapshot: 7 day counters, delta against the previous 7 days, top paths, sent by mail. Runs four hours after the page-flow crawler so the report leans on a fresh inventory.

Technical details
  • Trigger confirmed live on the Cloudflare schedules API on 27/08/2026.
  • Manual trigger: POST /admin/weekly-snapshot-now?token=… on the worker (ADMIN_TOKEN required since 2026-09-10); the Run now button above goes through the intranet proxy /api/admin/run-cron.
cron: 0 8 * * 1 · code: bycaliber-backup-worker/src/weekly-snapshot.js
Local launchd Mac — 0 · No launchd agent on AL's Mac touches byCaliber. The six agents installed there serve Elite Outsiders and alexandrecorne.com, listed on their own intranets.
▶ N8N ROBOTS (VPS)0 cards · none
No n8n workflow on the Hostinger VPS belongs to byCaliber. Read from the n8n API on 27/08/2026: 13 workflows, none of them byCaliber.
▶ ROUTINES1 card · local Claude Code, live
Claude Code scheduled tasks on AL's Mac

ROUTINE1 — CRM brief, twice a week

ROUTINE MON + THU 08h local
Monday and Thursday 08:00 local · ~/.claude/scheduled-tasks/crm-brief-biweekly/SKILL.md · ACTIVE, last run 24/08/2026

Reads the three CRM databases in Notion, one per vertical, and produces the bi-weekly brief: clients, prospects, leads, with the rows that need attention called out. byCaliber is one of the three verticals it covers.

Technical details
  • A Claude Code task runs on this Mac only, and only while a Claude Code app is open. If the Mac is off at 08:00 it fires on the next launch.
  • Costs tokens on every run, unlike a Cloudflare cron.
cron: 0 8 * * 1,4 (Mac local time) · storage: ~/.claude/scheduled-tasks/crm-brief-biweekly/SKILL.md
▶ EVENTS0 cards · none documented
No event-triggered robot is documented for byCaliber yet. Webhook handlers and page-load jobs get a card here the day they are inventoried.
For Claude
Legend — categories

Cron = Cloudflare Workers cron (bycaliber-backup-worker, scheduled handler) or a local launchd agent. Deterministic, zero LLM tokens. For mechanical jobs.

Routine = Claude Code scheduled task (~/.claude/scheduled-tasks/<id>/SKILL.md). Spawns a Claude session. Costs tokens. For reasoning jobs.

Event = Application code fired on a user or system event (page load, form submit, webhook). Not scheduled, not LLM.

Active = trigger confirmed live, it fires on its own. Dormant = the code exists, nothing calls it on a schedule. Dead = it ran once, or it will never run again.

What this page is. Every automation that runs on its own for byCaliber, with the schedule it actually fires on, what it does, the file that holds the code, and whether it is really running. One page like this exists on each of the four intranets, on the EO model (rule 15, Intranet structure, 2026-09-09).

Status is measured, not declared. Every schedule was read back from the Cloudflare schedules API on 27/08/2026, not copied from the wrangler.toml files; the Workers section at the top re-reads the account at every load. n8n came from the n8n REST API. Card count now: 8 crons, 1 routine, 0 n8n, 0 events.

Worker code: ~/Projects/bycaliber-backup-worker/. Deployed at https://bycaliber-backup-worker.alexandre-corne-ac.workers.dev.

WhatValue
Workersbycaliber-backup-worker · Cloudflare account 88ff6259a88cb5fb8e8b9e13e082d7c4
URLshttps://bycaliber-backup-worker.alexandre-corne-ac.workers.dev ·
Repos~/Projects/bycaliber-backup-worker/
Crons0 6 1 * * (unused-pages) · 0 2 1 * * (events-archive) · 0 3 1 * * (backup) · 0 4 1 * * (url-audit) · 0 4 * * 1 (page-flow-crawl) · 0 5 1 1,7 * (analytics-map-refresh) · 0 6 * * * (error-events-watchdog) · 0 8 * * 1 (weekly-snapshot) — 8 on bycaliber-backup-worker, read back from the Cloudflare schedules API on 2026-09-09 (unused-pages added that day) on bycaliber-cron-purge
Secrets and vars referenced by the code (names only)RESEND_API_KEY · BREVO_API_KEY · vars BRAND, NOTIFY_FROM, NOTIFY_TO, SITE_HOST, SITE_ORIGIN, TOOLS_HOST
BindingsD1 bycaliber (binding DB, both workers) · R2 bycaliber-backups (binding BACKUP_BUCKET)
Admin endpoints (POST, ?token= or x-admin-token required since 2026-09-10)/admin/unused-pages-now · /admin/events-archive-now · /run?confirm=YES (backup) · /admin/page-flow-crawl-now · /admin/url-audit-now · /admin/analytics-map-refresh-now · /admin/error-events-watchdog-now · /admin/weekly-snapshot-now · dry run GET / (list re-read from src/index.js on 2026-09-09)
Manual triggerPOST /admin/<name>-now?token=… on the worker (ADMIN_TOKEN on every /admin/* route since 2026-09-10). The Run now buttons go through the intranet proxy /api/admin/run-cron/<name>, which holds the token as a Pages secret.