← All guides

How to set up a free public status page (with live status embedded on your site)

Updated 7 August 2026 · by Cassian Wei · 2 min read

When something breaks, your users' first question is "is it just me?". Without a status page they answer it by emailing you — during the exact minutes you least want to do support. A status page (and a live status pill on your own site) answers it for you.

What a good status page has

  • Live per-service state — not one global dot. Group services (API / Website / Jobs) so users can see that the thing they use is fine.
  • History — a 90-day uptime strip and a 30-day incident list with durations. History is what makes "we take reliability seriously" credible.
  • Self-serve updates — email subscriptions and a feed, so interested users get told about incidents and recoveries without refreshing.
  • Maintenance windows — planned work shown as maintenance, not as a scary outage (and with alerting suppressed so you're not paged by your own deploy).
  • Independent hosting — the page must not be served by the infrastructure it reports on, or it dies with your site.

Set one up in two minutes

On Watchpup (free), every status page is built from monitors you already have — real measured checks, not hand-set state:

curl -X POST https://watchpup.watchpup.workers.dev/api/status-pages \
  -H 'authorization: Bearer wp_...' -H 'content-type: application/json' \
  -d '{"title":"Acme Status","slug":"acme","auto_include":true}'
# → live at https://watchpup.watchpup.workers.dev/s/acme

auto_include keeps the page showing all your monitors, current and future; or pick an explicit list and arrange it into named groups. Pages support your accent color and logo, email subscriptions with double opt-in, an Atom incident feed, a machine-readable .json twin, and a Prometheus endpoint. See it live: watchpup.watchpup.workers.dev/s/demo.

Embed live status on your own site

Most visitors won't know your status page exists. Put the answer where they already are — one script tag renders a live pill ("All systems operational" / "1 service down") on your site, linking to the full page:

<script async src="https://watchpup.watchpup.workers.dev/s/acme/embed.js"></script>

~2KB, no dependencies, updates itself every minute, corner-float or inline (data-target), light/dark/auto theme. Per-monitor SVG uptime badges exist too, for READMEs.

What to put on it

  • User-facing services only — your website, API, app. Internal databases belong on a second, private page (Watchpup pages can be password-protected).
  • Name services in your users' words ("Checkout", not "payments-svc-eu-1").
  • Add heartbeat monitors for the invisible things users feel indirectly — nightly exports, digest emails, billing runs.

Free: unlimited public pages over your 15 monitors, subscriptions and feeds included, no card.


Watchpup is free uptime & cron monitoring — 1-minute checks, heartbeats, TLS/domain expiry, status pages, alerts everywhere. Sign up, try the live demo, or read more guides.