Better Stack

A cron loop, a fetch, an alert webhook, and a status page

YES · focused build
price $34/mo per seatsubscription / year $408estimated build time one sittingreplaced by 0 people

A cron loop, a fetch, an alert webhook, and a status page. The $30/mo is for the dashboard gloss.

Build verification: not recorded. How we judge buildability

What you give up

  • global multi-region probes
  • on-call scheduling & escalation policies
  • incident timelines and postmortem tooling
  • phone-call alerts

Your build guide

The stack, security requirements, and agent rules for a focused replacement.

Before you start

  • Runtime and tools: TypeScript, Node, SQLite, a bounded scheduled worker and a read-only status dashboard.
  • Before starting: An always-on host, explicit allowed targets, an alert destination and synthetic healthy/failing response fixtures.
01
TypeScript, Node, SQLite, a bounded scheduled worker and a read-only status dashboard
02
Data design: Store Monitor, Probe, FailureStreak, Incident and AlertOutbox; restarting preserves the active incident and missing probes remain unknown time.
03
Setup: An always-on host, explicit allowed targets, an alert destination and synthetic healthy/failing response fixtures
engineering roadmap

Implementation plan

1

Phase 1

Pin the working slice and create its example input: Probe allowed targets from a separate host, open incidents after defined failure thresholds and send down/recovery notifications with visible monitoring gaps. Confirm setup: An always-on host, explicit allowed targets, an alert destination and synthetic healthy/failing response fixtures.

2

Phase 2

Implement persistence and write-time invariants before decorating the UI: Store Monitor, Probe, FailureStreak, Incident and AlertOutbox; restarting preserves the active incident and missing probes remain unknown time.

3

Phase 3

Connect the working view to real saved state. Persist samples, incident transitions and notification receipts. Missing samples are gaps rather than success; apply hysteresis and keep alert state across restarts. Run the checker separately from the monitored service.

4

Phase 4

Expose the app-specific limits and recovery path in context: Keep the existing bounded Node/Express implementation and explicit host allowlist. Observed check success is not an SLA; single-region probes cannot prove global availability.

5

Phase 5

Walk through this concrete acceptance case and preserve its exported evidence: Simulate two failures, restart during the outage and recover; produce one incident lifecycle, with redirect-to-private-host probes rejected and scheduler gaps excluded from successful checks. Finish the README and backup/restore instructions; report unfinished capabilities explicitly.

the pro prompt
download AGENTS.md
Build me a small uptime monitor with incident notifications like UptimeRobot. Requirements:

- Use Node.js, Express, better-sqlite3, and native fetch. Read monitors.json entries containing name, HTTPS URL, interval, timeout, expected status, and optional body keyword. Store probe results, incident transitions, and an alert outbox in ./data/uptime.db.
- Run one scheduler with bounded concurrency and no overlapping checks for the same monitor. Use AbortController timeouts and cap response bytes when checking a body keyword. Record timeout, DNS, TLS, status mismatch, and keyword mismatch as distinct failure reasons.
- Require an explicit allowed-host list for configured targets. Validate DNS results and every redirect hop against public addresses and the allowed scope; block loopback, private, link-local, and metadata endpoints. Do not let public requests add arbitrary probe targets.
- A monitor starts unknown. Two consecutive failed probes open one incident; a successful probe closes it and clears the failure streak. Persist state so restarting does not create a second incident. A scheduler gap is unknown time, not proof the target stayed up.
- Write incident changes and notification outbox rows together. Send Slack-compatible webhook notifications with a URL from .env; retry transport failures and show exhausted attempts. Include failure category and observed outage duration without secret query strings.
- Serve a public status page only for monitors marked public. Show current state, last observed time, latency sparkline, and observed successful-check percentage for 24h/7d/30d, with successful/total check counts. Label missing monitoring periods and do not call the percentage an SLA.
- Keep 90 days of raw probes and prune in bounded batches. Add protected local configuration validation, JSON/CSV export, no telemetry, and a systemd unit. Run on a host separate from the targets it monitors.
- Acceptance: scripted status/timeout fixtures trigger one down and one recovery alert; a restart retains the open incident; an internal-address redirect is blocked; a monitoring gap stays unknown. README covers configuration, HTTPS, webhook setup, backups, and single-region limitations. Out of scope: global probes, on-call routing, phone alerts.

EDITORIAL IMPLEMENTATION CONTRACT
Working slice: Probe allowed targets from a separate host, open incidents after defined failure thresholds and send down/recovery notifications with visible monitoring gaps.
Data and invariants: Store Monitor, Probe, FailureStreak, Incident and AlertOutbox; restarting preserves the active incident and missing probes remain unknown time.
Boundary and recovery: Keep the existing bounded Node/Express implementation and explicit host allowlist. Observed check success is not an SLA; single-region probes cannot prove global availability.
Acceptance walkthrough: Simulate two failures, restart during the outage and recover; produce one incident lifecycle, with redirect-to-private-host probes rejected and scheduler gaps excluded from successful checks.
Record actual dependency versions, permissions and provider access in setup instructions. Preserve originals, expose partial failures and document backup/restore. These are acceptance requirements, not a claim of a completed or production-certified build. Add the domain, recovery and acceptance rules to AGENTS.md so future edits preserve them.

$ open in your agent (prompt prefilled, you press enter), copy the prompt or copy or download AGENTS.md

share on X ↗

Alternatives to building your own

Uptime KumaA cheerful dashboard for asking URLs whether they are dead yet.87kaug 2026open source↗GatusA YAML file, a status board and enough protocol checks to annoy most outages.12kjul 2026open source↗OpenStatusUptime checks and a status page, with YAML for the suspicious.8.9kaug 2026open source↗

all 5 free alternatives to Better Stack →· no votes, no pay-to-list · just what's real

Better Stack pricing

planmonthlyannual (per mo)what you get
free for personal projects$0/workspace$0/workspace10 monitors, 10 heartbeats, 1 status page; 3-minute checks; 1,000 status-page subscribers; 100,000 exceptions/month; 5,000 session replays; 3 GB each of logs, traces and web events retained 3 days; 30 GB metrics
responder$34/user$29/user1 responder license; unlimited phone-call and SMS alerts; 10 monitors, 10 heartbeats and 1 status page included at workspace levelBetter Stack sells Uptime modularly rather than as conventional monitor-count tiers.
enterprise——Custom quote; custom limits and enterprise controls

free tier10 monitors + 10 heartbeats + 1 status page with 3-minute checks; 1,000 subscribers; 100,000 exceptions/month; 5,000 replays; 3 GB logs + 3 GB traces + 3 GB web events retained 3 days; 30 GB metrics

billingmonthly + annual (about 2 months free)

hidden costsBase includes only 10 monitors/10 heartbeats/1 status page. Add 50 monitors: $25/mo or $21/mo annual; add 10 heartbeats: $20/$17; each additional public status page: $15/$12; 1,000 extra subscribers: $40/mo; Playwright: $1 per 100 minutes; AI SRE: $5/million tokens; Slack/Teams workflows: $9/responder/mo; advanced status-page and SSO options can cost $42-$250 per page/user/month.

pricing sources checked 2026-08-12 · pricing source ↗

Questions about Better Stack

Can you build your own Better Stack with AI?

The verdict is yes for the scoped workflow. A cron loop, a fetch, an alert webhook, and a status page. The $30/mo is for the dashboard gloss.

What does the Better Stack build prompt cover?

The prompt starts with this scope: Probe allowed targets from a separate host, open incidents after defined failure thresholds and send down/recovery notifications with visible monitoring gaps. Full-product capabilities excluded from the comparison include: global multi-region probes; on-call scheduling & escalation policies; incident timelines and postmortem tooling. Follow the implementation plan and its prerequisites before expanding the build.

How do I use the prompt, AGENTS.md and agent skills?

Start with the Better Stack prerequisites and stack, then copy the prompt into your coding agent. Save the project rules as AGENTS.md in the project root. Linked skills are optional packages or source instructions for specific tasks; review their current contents and install only those matching the chosen stack. A skill does not supply API credentials or verify the finished app.

How long will this Better Stack project take?

The catalogue estimate is one sitting for the limited scope. Setup, integration approvals, debugging, deployment and ongoing maintenance can add time. This is an estimate, not a delivery guarantee.

What would I give up by replacing Better Stack?

global multi-region probes; on-call scheduling & escalation policies; incident timelines and postmortem tooling; phone-call alerts. Compare these limits with the workflow you actually need.

What price is this guide comparing against?

The recorded Responder plan is $34/mo per seat (monthly per user), checked 2026-08-12. Check the linked pricing source before buying. Building your own also has hosting, API and maintenance costs; the recorded amount is not a guaranteed saving.

What can I use instead of building Better Stack?

Uptime Kuma: A cheerful dashboard for asking URLs whether they are dead yet. Gatus: A YAML file, a status board and enough protocol checks to annoy most outages. OpenStatus: Uptime checks and a status page, with YAML for the suspicious. Compare all listed options at https://howtovibecodeit.dev/uptime/alternatives. Check each option's license, hosting needs and feature limits.

Every week, more subscriptions die.

New verdicts, new prompts, the week's most-doomed apps.
One email. Unsubscribe in one click.

last week:100 Questions · KINDA1of10 · KINDA1Password · KINDA+1090 more

free forever · no scanner spam · the prompt stays on the site, the deaths come to you

$weekly: what got a verdict, what died.