Developer Tool · 2026 · Solo build

Cron Plot

Your cron expression's 90-day temporal footprint, rendered as a week × hour heatmap with anomaly detection.

The problem

Cron expressions are written by reading a single line of symbols (*/15 * * * *) and imagining their temporal pattern. Engineers routinely discover midnight thundering-herd problems, weekend-gap data staleness, or accidental rate spikes only after they've caused an incident. No standard tooling exists to visualise the distribution of a cron schedule before deployment. Cron Plot makes the 90-day fire pattern instantly visible: paste the expression, see a week × hour heatmap, and read anomaly cards that flag common scheduling anti-patterns with plain-English explanations.

Architecture

Key decisions

01

Command/Inspect surface — not a dashboard

The user is drilling into one specific expression. A Monitor surface would imply live data; a Decide/Learn surface would call for marketing copy. Command/Inspect means: one object in, one precise analysis out. The layout reflects this: side panel for input/presets/stats, full-width canvas for the heatmap and anomaly cards.

02

TDD-first pure logic module

All 21 tests (parseCronField, expandCron, buildHeatmap, detectAnomalies) were written before lib/cron.ts existed. Tests use fixed UTC anchors to avoid local-timezone drift. The Red → Green → Refactor cycle caught a getUTCHour() → getUTCHours() typo and an unused-variable lint error before the UI was touched.

03

UTC-only, zero external libraries

The expander uses UTC day-walking to avoid DST and locale ambiguity. No croner, cron-parser, or node-cron dependency was introduced — the parser is a single 60-line pure function. This keeps the bundle browser-local and demonstrates the algorithm rather than wrapping a package.

04

Anomaly detection via statistical thresholds, not heuristics

Midnight-storm uses a 50% share threshold (half of all fires at hour 00). Rate-spike uses 5× the median non-zero cell — a simple outlier signal that avoids false positives on legitimately uneven schedules like 0 0 1 * *. Weekend-gap is exact: zero fires on Saturday AND Sunday rows.

Metrics

21
TDD unit tests, all passing before any UI code
90
day simulation window, expanding every valid UTC fire date
3
anomaly kinds detected: midnight-storm, weekend-gap, rate-spike
0
external cron parsing libraries — pure 60-line field expander