Status Page Builder

Configure service name, components, and incident message → live preview → download standalone HTML.

Configuration

Status: operational, degraded, partial, major, maintenance

Live Preview

Why run a status page?

During an outage, customers search for answers before your support queue explodes. A status page is the official channel: what is broken, what you are doing, and when you last updated. Even a static page beats silence — it signals you know there is a problem and reduces duplicate tickets.

This builder produces static HTML you download and host yourself. There is no account, no subscription, and no automatic monitoring hookup. You update the page manually during incidents (or re-download after editing fields here).

Static vs hosted status products

Hosted products (Statuspage, Better Stack, Hyperping, and others) poll monitors, post incident timelines, and email subscribers automatically. They cost money and setup time but scale when incidents are frequent. Static HTML is honest and cheap for early-stage teams — graduate when manual updates become a bottleneck or when you need subscriber notifications.

Component model

Enter components one per line as Name|status. Supported statuses: operational, degraded, partial, major, maintenance. Each maps to a color in the preview. Overall status summarizes the headline customers see first; component rows add detail for power users.

Worked example 1 — partial API degradation

Overall: Degraded performance

Components: API|degraded, Web App|operational, Database|operational

Incident banner: “Elevated 503 errors on API v2 in eu-west-1. Identified. Mitigation in progress. Updated 2026-03-15 16:40 UTC.”

Customers see scope — not everything is on fire.

Worked example 2 — maintenance window

Overall: Scheduled maintenance

Components: Platform|maintenance

Post start/end UTC in the banner. Remove banner and reset to operational when done — stale maintenance pages erode trust.

Worked example 3 — major outage comms cadence

Update every 20–30 minutes minimum during SEV1, even if message is “still investigating.”

After resolution: overall → operational, clear incident text, add “Resolved at HH:MM UTC” line.

Internal: run Post-Mortem Generator and Downtime Cost for leadership.

Good status page habits

  • Host at status.yourcompany.com on infrastructure independent of the main app when possible.
  • Timestamps always in UTC with label.
  • Separate component status from incident narrative.
  • Link post-mortems after resolution when appropriate.
  • Run a quarterly drill: can on-call update the page in under 5 minutes?

When NOT to use this builder alone

  • You need email/SMS subscriber alerts — requires hosted product or custom mailing list.
  • Compliance mandates immutable incident audit trail — static HTML lacks version history unless you git-manage it.
  • Dozens of microservices — consider API-driven status or generated pages from a single source of truth.

Accessibility and mobile readability

Incidents spike mobile traffic to status pages. Our templates use responsive layout and sufficient contrast, but you should still test on a phone before go-live. Avoid embedding critical info only in images — screen readers and slow networks need text.

SEO and down-detector confusion

Link your official status URL from your homepage footer and Twitter bio. Search engines may rank third-party “is X down?” sites during crises; a clear official page reduces misinformation.

Version control for static status HTML

Store status.html in git. Incident edits become commits with timestamps — lightweight audit trail without a hosted product. Tag releases like status-incident-2026-03-15 for post-mortem links.

Deep dive: incident communication templates

Keep three snippet texts ready: investigating, identified, resolved. Paste into the incident banner field. Example investigating: “We are investigating elevated error rates affecting login. Updates every 30 minutes.” Identified adds cause category without premature root cause: “Database connection pool exhaustion.” Resolved includes duration and next steps: “Resolved at 16:40 UTC after rollback. Post-incident review within 5 business days.”

Social media and support macros should link the status URL, not duplicate full technical detail. Support agents need the same words as the status page to avoid contradictory answers.

Practice updating the builder in under five minutes during a game day. Manual processes fail under sleep deprivation — muscle memory matters more than template aesthetics.

War room display tips

Full-screen the preview iframe during incidents for office TVs — dark ops template reduces glare. Refresh preview after each edit before download so downloaded file matches what the room saw. Assign one “comms driver” who owns status text; engineers own technical mitigation — split roles reduce duplicate edits.

After major incidents, archive downloaded HTML in the post-mortem ticket. Future teams learn what customers were told hour-by-hour — valuable for comms training, not just engineering fixes.

Common mistakes when building static status pages

  • Hosting on the same origin as the app. If your CDN and app share failure domains, customers see a browser error instead of your status page during the worst outages.
  • Announcing root cause before confirmation. “Database corruption” in the first banner when you only know “elevated errors” creates retraction work and erodes trust.
  • Stale green state after recovery. Leaving “investigating” text for 18 hours after fix signals neglect — worse than no page at all.
  • Internal codenames on public components. payments-svc-v3 means nothing to customers; map to Checkout or Payments.
  • No UTC label on timestamps. “Updated 3:15 PM” without timezone forces global customers to guess.
  • Skipping quarterly drills. First real SEV1 should not be the first time someone tries the download-and-upload workflow.

Status vocabulary methodology

Align headline status with component rows before you publish. A useful internal rule: overall status equals the worst customer-visible component unless you explicitly document why the headline is calmer (rare). Map severities before incidents happen so on-call does not invent language under pressure:

Overall labelWhen to useTypical component mix
All systems operationalNo customer impactAll components operational
Degraded performanceElevated errors or latency, workaround existsOne component degraded, others operational
Partial outageMajor feature broken for a subset of usersOne partial, others mixed
Major outageCore journey unavailable for most usersOne or more major
Scheduled maintenancePlanned work with communicated windowmaintenance on affected components

Update cadence during SEV1: minimum every 30 minutes even if the message is “still investigating.” During a 2-hour incident, that yields at least 4 customer-visible updates — enough to reduce support ticket volume measurably (teams often see 15–25% fewer “is it down?” contacts when cadence is met).

Independence scorecard (honest self-audit)

Rate each item 0 or 1: separate DNS provider, separate hosting bucket, HTTPS cert not tied to main app deploy, at least two people can edit without production SSH, runbook tested in last 90 days. Score 4–5: strong static setup. Score 0–2: status page may fail when you need it most — fix process before picking dark vs minimal theme.

Worked example — multi-component major outage with numbers

Scenario: Payment processor timeout affects checkout from 09:12–10:04 UTC (52 minutes).

Builder config: Overall = major outage. Components: Checkout|major, Login|operational, API|degraded, Mobile App|operational.

Banner at 09:15 UTC: “Checkout failures for card payments. Retries may succeed. Investigating with provider. Updates every 30 min.”

09:45 UTC: “Identified: upstream latency. Mitigation in progress.”

10:06 UTC: All operational; banner replaced with “Resolved 10:04 UTC.”

Internal follow-up: 52 min × $9,500/hr peak rate ≈ $8,230 at-risk revenue — log in post-mortem via Downtime Cost.

Cross-functional comms RACI during incidents

Clarify roles before SEV1: who edits status text (comms driver), who approves customer-facing wording (support lead or legal for regulated industries), who publishes the file (platform engineer with hosting access). Duplicate HTML uploads from two people with different wording is a common war-room failure mode.

Support macros must match status page language exactly. Run a 10-minute tabletop quarterly: declare fake incident, update builder, verify support docs and macro text align. Mismatched messages increase ticket handle time 20–40% during real incidents when agents guess which source is authoritative.

Related tools

Status Page Templates · Free Status Page Download · Post-Mortem Generator · Reliability Money Toolkit · Free Tools.

Frequently Asked Questions

Do I need a backend for the downloaded status page?

No. The download is static HTML you can host on any web server, S3, Cloudflare Pages, Netlify, or GitHub Pages.

Does the status page update automatically when my site goes down?

No. You edit fields and re-download, or manually edit the HTML. Automatic updates require hosted products with monitor integration.

What component statuses can I set?

operational, degraded, partial, major, and maintenance — each maps to a color in the preview.

Can I list multiple services on one page?

Yes. Enter one component per line as Name|status. Use the multi-service template for a pre-filled layout.

Should I put my status page on a separate domain?

Many teams use status.yourcompany.com so DNS and hosting stay reachable when the main app is impaired.

Is this a replacement for Statuspage or Better Stack?

No. This is a free static page builder without subscriber email, automated checks, or incident timelines.

Does this builder store my configuration?

No account and no server storage. Configuration lives in your browser until you download the HTML file.

What should I do after an incident ends?

Mark components operational, remove or archive the incident banner, note resolution time in UTC, and link an internal post-mortem when ready.