Checking a list of URLs every minute, alerting when one fails twice in a row and publishing a status page fits in one session, and Uptime Kuma already does it for free. Better Stack's paid value sits elsewhere: probes in several regions that confirm an outage before waking anyone, phone calls that reach you at 3 a.m., on-call rotations for a team, and the logs and traces sold alongside. For a handful of personal sites, a checker on a cheap VPS at another provider covers what matters.
Before you buildBetter Stack's free plan still watches 10 URLs every 3 minutes with email and Slack alerts. If that covers you, there is nothing to build.
Build me a self-hosted uptime monitor with a status page to replace Better Stack for my own sites. Requirements: - Node.js 22 + TypeScript, one process: a scheduler plus Fastify serving EJS pages and a small JSON API. `npm start` listens on port 4800. - Monitors live in monitors.yaml (name, type, target, interval, timeout, expected status or keyword): HTTP(S) with an optional keyword check, TCP port, and SSL certificate expiry with a warning at 14 days. Reload the file without a restart. - Storage: better-sqlite3 in ./data/uptime.db. Keep every check (time, ok, latency in ms, error) for 90 days, then roll it up into daily uptime percentages. - A monitor goes down only after 2 failed checks in a row, 30 seconds apart, and comes back after 1 success. Each down period is stored as an incident. - Alerts on state changes only (down, recovered, certificate expiring): email via nodemailer, plus a Telegram bot or an ntfy.sh topic when set in .env. At most one reminder per hour while an incident stays open. - Heartbeats: GET /ping/:token marks a cron job alive; alert when a ping is later than its period plus a grace time. - /admin (password from .env): every monitor with a status dot, last check, a 24h latency sparkline as inline SVG, and open incidents. - Public /status page: one row per monitor with a 90-day bar of daily uptime and the incidents of the last 14 days. No login, no third-party scripts. - No accounts, no telemetry. Out of scope: phone-call alerts, checks from several regions, on-call schedules. - README: install, a systemd unit, and a warning to run it at a different hosting provider from the sites it watches, or one outage takes out both.
Opens your agent with the prompt filled in, you press enter. Or copy it and paste it into an empty folder.
The first prompt builds the core. Run these one at a time in the same folder to grow it into your own Better Stack.
Add a second probe location to the uptime monitor in this folder. Requirements: - A small probe mode (`npm run probe`) for another VPS: it reads the same monitors.yaml, runs the checks and POSTs results to the main instance, signed with PROBE_SECRET from .env. - The main instance marks a monitor down only when both locations fail within the same minute; if only one fails, log it as a regional blip. - Show per-location latency on /admin. - If the probe stops reporting for 5 minutes, alert once that the probe is gone. - Update the README with how to deploy the probe.
Add phone-call alerts to the uptime monitor in this folder. Requirements: - Monitors tagged critical in monitors.yaml trigger a voice call through the Twilio API (account SID, auth token, from and to numbers in .env) when they have been down for 5 minutes. - The call reads the monitor name twice; pressing 1 acknowledges, and no more calls happen for that incident. - Never call more than 3 times per incident. - Update the README with Twilio setup and a note that each call costs money.
Publish the status page of the uptime monitor in this folder as static files. Requirements: - Every minute, render /status to ./public-status/index.html plus a status.json with the same data. - Push the folder to a Cloudflare Pages project with wrangler (token in .env), only when the content changed. - The static page shows when it was last updated, so visitors can tell if the monitor itself has gone quiet. - Update the README with the Cloudflare setup steps.
Add a Better Stack importer to the uptime monitor in this folder. Requirements: - Read a team API token (BETTERSTACK_TOKEN in .env) and page through GET https://incidents.betterstack.com/api/v2/monitors. - Map URL, monitor type, check frequency, expected status codes and keyword to entries in monitors.yaml; list anything that has no equivalent. - Print the new YAML and ask before overwriting the file. - Update the README with where to create the token.
Teams pay for alerts they can trust at night: a failure confirmed from more than one place, a phone call that escalates when nobody answers, and a status page that stays up when their own servers don't. Once logs and error tracking live in the same account, moving only the monitors saves little.
Estimate · A $4–6 VPS runs it, or nothing extra on a server you already have. Email, Telegram and ntfy alerts are free; phone calls through Twilio would be charged per call. The build is token usage on your agent plan.
Checked 2026-10-13 against Better Stack's docs: 1, 2, 3, 4, 5
| Plan | Monthly | Annual, per month | What you get |
|---|---|---|---|
| Free | $0 | $0 | 10 monitors and heartbeats combined, checks every 3 minutes, 1 status page, Slack and email alerts only. |
| Responder | $34 | $29 | Unlimited phone-call and SMS alerts, on-call scheduling and escalations, checks as often as every 30 seconds; 10 monitors and 10 heartbeats included. |
| Enterprise | custom | — | Custom quote: SAML SSO, SCIM, data residency, VPC deployment. |
Free watches 10 monitors or heartbeats every 3 minutes, with one status page and Slack or email alerts.
Yes. An AI coding agent such as Claude Code, Codex or Cursor can build a usable personal version in one session with the prompt on this page, running on your own machine.
About $34 a month on the Responder license plan per seat, $408 a year (checked 2026-10-13).
Checks from several regions that confirm a failure before alerting; Phone-call and SMS alerts that escalate to the next person; On-call schedules, rotations and incident timelines for a team; Playwright transaction checks and the logs, traces and error tracking in the same account; A status page hosted away from your own servers. If any of those matter to you, keep paying.
Yes: Uptime Kuma (open source), Gatus (open source), Upptime (open source).