Statuspage

statuspage.iocontributed by Samuele Ongaro

YES

Replaceable in one session with an AI coding agent.

Atlassian’s hosted status page: components, incident updates, scheduled maintenance and subscriber notifications, wired into the rest of the Atlassian tools. It is what customers are pointed at when something breaks.

Promptfree, for everyone, and the only version there is
Build me a status page that replaces Statuspage — and read the first rule, because it is the only one that really matters.

Read this first: the value of a status page is entirely that it works when nothing else does. A status page hosted on the infrastructure it reports on is decoration. Deploy it on a different machine, at a different provider, on a different network, and preferably serve it as static files. Everything below assumes that.

STACK
- Node 20+ with Fastify for the admin and the API
- SQLite through better-sqlite3, WAL mode
- The public page rendered as static HTML on every change and served by Caddy directly, so the page survives the application being dead
- Caddy in front

THE DATA MODEL
- pages: id, slug, name, custom_domain, logo_path, accent, timezone, support_url, is_public, password_hash
- components: id, page_id, group_name, name, description, position, status, status_since — operational, degraded, partial outage, major outage, under maintenance
- component_history: id, component_id, status, from_at, to_at — append-only, and what every uptime figure is computed from
- incidents: id, page_id, title, impact, status, started_at, resolved_at, is_scheduled, scheduled_start, scheduled_end, components_json
- incident_updates: id, incident_id, body_md, status, created_by, at — append-only. An incident is a sequence of updates and a published update is never edited, only followed by another
- subscribers: id, page_id, kind, target, token, confirmed_at, unsubscribed_at, components_json — email, webhook, RSS
- notifications: id, incident_update_id, subscriber_id, sent_at, error — one row per person per update, so nobody is told twice
- metrics: id, page_id, name, source, unit, is_public; metric_points: metric_id, value, at

THE PUBLIC PAGE
- One banner at the top: everything operational, or the current worst state, in words a customer understands
- Components grouped, each with its state and 90 days of history as one bar per day
- Uptime percentage with its window and its definition written next to it. Everybody computes uptime differently and a number without a definition is decoration
- Open incidents at the top with their update history newest first, each timestamped in the reader's own zone with the original zone shown
- Scheduled maintenance announced in advance and shown before it starts
- Optional public metrics — response time, queue depth — as small charts
- Static, under 50KB, no framework, works on a phone. Everybody loads it at once, precisely when things are going wrong
- Regenerated on every change and on a schedule, so the newest state is on disk even if the admin process is down

WRITING AN INCIDENT
- Templates for the common shapes, because nobody writes well at three in the morning. Investigating, identified, monitoring, resolved — each with a skeleton to fill
- The first update should go out within minutes and say almost nothing except that you know. That is what customers want: acknowledgement, not diagnosis
- Impact chosen deliberately: none, minor, major, critical
- Components attached to the incident, and their status set from it in one action
- A post-incident summary after resolution, which is a separate field and can be added later
- Nothing published is ever edited. A correction is a new update saying what was wrong. A status page that quietly rewrites its own history is worth nothing

NOTIFICATIONS
- Email, webhook, RSS and Atom. SMS only through a provider, and it is the one part with a real per-message cost — say so
- Per-component subscriptions, so somebody who only uses one part of the product is not paged about another
- Double opt-in, one-click unsubscribe with no login
- One row per subscriber per update, written before sending, so a crash mid-send resumes exactly and nobody is told twice
- The notification path must not depend on the same mail infrastructure as your product. If your product is down because your provider is down, your status emails will not go either — use a different sender for these

AUTOMATION
- An API to open, update and resolve an incident, and to set a component's state, so a monitor can act
- Automatic opening from a monitor is useful and dangerous: require confirmation from more than one check, and never let it write customer-facing prose. An automated incident sets a state; a human writes the words
- A webhook in as well as out, and a command-line tool, because the fastest path during an outage is a terminal that is already open

ACCESS
- The admin behind authentication and, ideally, reachable independently of everything else
- A private page option behind a password for internal or customer-specific status

OPERATIONS
- .env: DATABASE_PATH, BASE_URL, SMTP_URL, SESSION_SECRET, STATIC_OUTPUT_PATH
- Migrations on boot, each once
- Custom domain with on-demand TLS, checked against the pages table before a certificate is requested
- Nightly backup off the machine, restore script
- Health endpoint — and an external check on the status page itself, because the page nobody is watching is the page that is quietly broken

WHAT MATTERS MOST
Where it runs and static generation. Put it somewhere else entirely, render the page to disk, and then unplug the application and confirm the page still serves. If that does not work, nothing else here matters.

Give me the repository, the static generator, migrations, .env.example, the incident templates, the CLI, and a README whose first section is the independent deployment.

What you lose

  • Hosting that is independent of your own infrastructure — a self-hosted status page can go down with the thing it reports on
  • Email and SMS notification delivery to subscribers during an incident, at the exact moment your systems are struggling
  • Incident templates and a workflow your team already knows under pressure
  • Automatic component status driven by existing monitoring integrations
  • A domain your customers already trust and have bookmarked

If you would rather not build

  • Instatus — paid, hosted status pages with a generous free tier

What it costs

read from their page 15 Aug 2026

PlanBilled monthlyBilled yearlyLast read
—$29/mo—15 Aug 2026

Their pricing page is where these came from. Seeing a different price? Tell us.

The escape hatch

open source · no votes, no paid placement

cState

$0

Status page as a static site — incidents are Markdown files, hosted anywhere.

cstate/cstatefree · open source

Upptime

$0

Uptime monitor and status page that runs entirely on GitHub Actions.

upptime/upptimefree · open source

Gatus

$0

Health checks declared in a YAML file, with a status page generated from them.

TwiN/gatusfree · open source

Why this verdict

our own opinion · changed only by a person

90/100

Verdict yes at 90 — the highest in this set. A status page is static content plus a cron job, and hosting it as static files on a different provider is genuinely more resilient than a dynamic app. The only real reason to pay is subscriber notification at scale.

History

tracked since 6 Aug 2026 · nothing is ever overwritten

Interest · last 30 dayspeak 2/day
views01230 Aug4 Sept9 Sept14 Sept19 Sept24 Sept28 Sept
— views— prompt copies none yet— votes none yet

Questions about Statuspage

answered from the record above

Is Statuspage free?

No — the plan we track is $29 a month. Hobby tier for a public page. Private pages start at $79/mo and audience-specific pages at $300/mo.

Can you replace Statuspage by building your own?

YES. Replaceable in one session with an AI coding agent. Replacement score 90 out of 100, build time one session. Read what you lose before you decide.

How much does Statuspage cost?

$29 a month on Hobby — $348 a year. Recorded 6 Aug 2026.

What do you lose by replacing Statuspage?

Hosting that is independent of your own infrastructure — a self-hosted status page can go down with the thing it reports on; Email and SMS notification delivery to subscribers during an incident, at the exact moment your systems are struggling; Incident templates and a workflow your team already knows under pressure; Automatic component status driven by existing monitoring integrations; A domain your customers already trust and have bookmarked. If any of those carry weight for you, keep paying.

Is there an open-source alternative to Statuspage?

Yes: cState, Upptime, Gatus. The prompt on this page is for when you want it your way instead.

Related entries

same category first, most replaced first

All 25 in Monitoring & uptime

Not sending yet

Every week, something stops being worth paying for.

New verdicts, prices that moved, entries added. One email a week. Unsubscribe in one click. Nothing is being sent yet — your address is kept here, and the first issue is the first thing it is used for.

free forever · no tracking pixel · stored here, never passed to anyone

Esc