DEV Community

Mike Tickstem
Mike Tickstem

Posted on • Originally published at tickstem.dev

The status page that updates itself

Most status pages lie.

Not intentionally — they just require a human to update them, and humans are busy, stressed, and dealing with the incident when the incident happens. So the status page says "All systems operational" while users are hitting errors, and the truth comes out twenty minutes later when someone finally posts "We are investigating reports of..."

The problem isn't laziness. It's that updating a status page is a manual step in the middle of an already chaotic situation. Your monitoring and your status page are disconnected.

The obvious fix

Connect them. If your status page is generated directly from your monitoring data, it updates the moment something goes wrong — no human required, no lag, no posts that trail the actual problem by 15 minutes.

Tickstem now ships status pages that do exactly this. Enable one in the dashboard, pick a slug, and your page is live at tickstem.dev/status/your-app. It reflects the current state of your uptime monitors and heartbeat monitors automatically.

No code required. No webhooks to wire up. If you already have monitors running, your status page is one toggle away.

What it shows

The page has two sections:

Services — your HTTP endpoints, pulled from uptime monitors, with current status and 30-day uptime percentage.

Scheduled Jobs — your background jobs, pulled from heartbeat monitors, with whether they're currently running and when they last pinged in.

That second section is where it gets interesting.

The gap other status pages miss

A status page that only shows HTTP endpoints can tell you your server is responding. It can't tell you whether your nightly data sync ran, whether the daily report job completed, or whether the backup that was supposed to finish at 3am actually finished.

Those are background jobs, and they fail silently. The server is healthy, the endpoint returns 200, but nothing useful is happening behind it.

Tickstem heartbeat monitors solve this by inverting the check: your job pings a URL after every successful run, and if the pings stop arriving, you get alerted. The status page surfaces this signal publicly — so your users see not just "API: Operational" but "Weekly digest: Running" or "Nightly sync: Missing".

from tickstem import HeartbeatClient, HeartbeatCreateParams

client = HeartbeatClient(os.environ["TICKSTEM_API_KEY"])
hb = client.create(HeartbeatCreateParams(
      name="nightly-sync",
      interval_secs=86400,
      grace_secs=3600,
))

# At the end of every successful run:
client.ping(hb.token)
Enter fullscreen mode Exit fullscreen mode

If that ping stops arriving, your status page flips to "Missing" automatically.

Three steps to a live status page

  1. Go to DashboardStatus Page
  2. Choose a slug and set a title
  3. Toggle visibility to Public (Private mode could be used to preview or you can just keep the page private)

Your monitors and heartbeats populate it automatically. Set it to Private first to preview before sharing — the URL works for you while logged in, invisible to everyone else.

Free tier included. No credit card required.

GitHub: https://github.com/tickstem

Top comments (0)