A missing signal is the signal
Ordinary monitoring answers whether the server is up. It says nothing about the nightly backup that stopped running three weeks ago. You find that out when you try to restore.
Pulse watches from the other side. Every check gets its own URL. The job calls it after a successful run. If the call does not arrive within the schedule plus a grace period, the check goes down and an alert goes to Telegram or a webhook.
What's inside
Two schedule kinds
A plain period (every 24 hours) or a cron expression. The grace period separates a job running late from a job that never finished.
Start, success, failure
A /start signal measures the run's duration, /fail reports an error explicitly instead of waiting for the deadline.
Job output in the feed
The script's log travels in the request body and is shown next to the event, so nobody logs into the server to find the reason.
A console, not a grid
The main screen answers what just happened: the event feed on the right, checks on the left as filters.
Alerts
Telegram and arbitrary webhooks. A channel is self-contained: token and address live together, with no global settings.
One binary
Go and SQLite: no external services, no queue, no scheduler. A background goroutine sweeps deadlines every 30 seconds.