Status Pages
Public-facing status pages to communicate system health and incidentsEdit
Create public status pages to communicate system health, incidents, and scheduled maintenance to your users.
Status pages are hosted on unique subdomains and are publicly accessible without authentication.
Public Status Page
Once published, your status page displays real-time system health to users:

What users see:
- Status Banner — Overall system health (All Systems Operational, Partial Outage, etc.)
- Components — Individual services with current status and 90-day uptime chart
- Past Incidents — Recent incident history grouped by date
- Subscribe Button — Subscribe to receive incident notifications
Status Badges
Embed dynamic status badges on external websites, READMEs, or documentation to show real-time system health.
Badge URL Format:
https://yourdomain.com/api/status-pages/[status-page-id]/badgeQuery Parameters:
style— Badge style:flat(default) orflat-squarelabel— Left-side text (default: "status", max 64 characters)
Embedding in Markdown:


Embedding in HTML:
<img src="https://yourdomain.com/api/status-pages/YOUR_PAGE_ID/badge" alt="System Status" />Status Colors:
| Status | Color | Default |
|---|---|---|
| Operational | Green | #2ecc71 |
| Degraded | Yellow | #f1c40f |
| Partial Outage | Orange | #e67e22 |
| Major Outage | Red | #e74c3c |
| Maintenance | Blue | #3498db |
Colors are customizable via the status page Settings tab under Status Colors.
The badge is a public endpoint — no authentication required. It includes CORS headers for cross-origin embedding on any website.
Badges refresh every 5 minutes (server-side cache). For real-time updates, link directly to your status page.
Testing Your Badge:
Open your browser and visit the badge URL directly to preview the SVG output. Try different combinations:
| URL | Result |
|---|---|
/api/status-pages/ID/badge | Default flat badge with "status" label |
/api/status-pages/ID/badge?style=flat-square | Square-cornered badge |
/api/status-pages/ID/badge?label=API | Custom "API" label on the left |
/api/status-pages/ID/badge?label=Uptime&style=flat-square | Combined: custom label with square style |
Replace ID with your status page ID (found in the URL when managing your status page).
iCal Calendar Feed
Subscribe to status page incidents in any calendar application (Google Calendar, Apple Calendar, Outlook).
Feed URL:
https://yourdomain.com/api/status-pages/[status-page-id]/icalSubscribing:
- Copy the iCal feed URL for your status page
- In your calendar app, add a new calendar subscription
- Paste the URL and subscribe
The feed includes the last 50 incidents with impact level, status, affected services, and links to incident details.
The iCal feed uses the same toggle as the RSS feed. Enable RSS Feed in your status page settings to activate both feeds.
Incident Details
Users can click any incident to view the full timeline of updates:

Subscribing to Updates
Users can subscribe to receive notifications when incidents are created, updated, or resolved.

- Click Subscribe on the status page
- Enter email address
- Click Subscribe via Email
- Check inbox for verification email
- Click verification link to activate subscription

Send incident notifications directly to a Slack channel:
- Create a Slack app at api.slack.com/apps
- Enable Incoming Webhooks
- Add webhook to your workspace and select channel
- Copy the webhook URL
- Paste URL in the subscription dialog
Slack notifications include:
- Rich formatted messages
- Color-coded by incident impact
- Affected services and status updates
- Direct link to status page
For custom integrations, subscribe via webhook:
- Select Webhook tab
- Enter your webhook endpoint URL
- Receive JSON payloads for all incident events
Subscribe via RSS for feed readers and monitoring tools.
Subscribe via iCal to receive incidents in your calendar application.
- Copy the iCal URL:
https://yourdomain.com/api/status-pages/[id]/ical - Add a new calendar subscription in your app
- Paste the URL and subscribe
Supports Google Calendar, Apple Calendar, Outlook, and any app that accepts .ics feeds.
Managing Status Pages
Navigate to Communicate → Status Pages to view all your status pages.

Click Manage to access the management interface:

Creating a Status Page
- Click Create Status Page
- Enter:
- Name — Internal identifier
- Headline — Public title shown on the page
- Description — Brief description for users
- Click Create

Your page is created in draft mode. Configure components and settings before publishing.
Publishing
- Add at least one component
- Configure branding in Settings
- Click Publish to make the page public
- Share the URL with your users
Components
Components represent individual services or features on your status page.

- Go to Components tab
- Click Add Component
- Enter:
- Name — Service name (e.g., "API", "Website", "Database")
- Description — Brief explanation
- Status — Current operational status
- Linked Monitors — Associate monitors for reference

Linked Monitors
Associate monitors with components for reference. Linked monitors appear in the Overview tab and help you track which monitors relate to each service.
Component status is managed manually. Update component status when creating or resolving incidents.
| Status | Color | Description |
|---|---|---|
| Operational | Green | Service functioning normally |
| Degraded Performance | Yellow | Running but slower than normal |
| Partial Outage | Orange | Some features unavailable |
| Major Outage | Red | Service completely down |
| Under Maintenance | Blue | Scheduled maintenance in progress |
Incidents
Incidents communicate service disruptions to your users.

- Go to Incidents tab
- Click Create Incident
- Enter:
- Title — Brief description (e.g., "API Response Delays")
- Message — Initial update for users
- Status — Current investigation status
- Impact — Severity level
- Affected Components — Which services are impacted
- Choose whether to notify subscribers
- Click Create

Incident Updates
- Open an existing incident
- Click Add Update
- Write update message
- Update status if changed
- Choose whether to notify subscribers
Scheduled Maintenance
- Create incident with Scheduled status
- Set start and end times
- Enable automatic status transitions
- Configure reminder notifications
| Status | Description |
|---|---|
| Investigating | Issue detected, team investigating |
| Identified | Root cause found, working on fix |
| Monitoring | Fix deployed, monitoring stability |
| Resolved | Issue completely resolved |
| Scheduled | Planned maintenance |
| Impact | Description |
|---|---|
| None | Informational update |
| Minor | Small subset of users affected |
| Major | Significant impact on service |
| Critical | Complete service outage |
Subscribers
Manage users who receive incident notifications.

Features:
- View all subscribers (email, webhook, Slack)
- See verification status
- Search and filter by email or URL
- Export to CSV
- Delete subscribers
- View statistics (total, verified, pending)
Notification Types
Subscribers receive notifications for:
- New incidents created
- Incident status updates
- Incident resolution
- Scheduled maintenance reminders
Settings
Configure branding and notification settings.

- Logo — Header logo for status page
- Favicon — Browser tab icon
- Status Colors — Customize colors for each status type
- Custom Domain — Use your own domain (e.g.,
status.yourcompany.com)
- Subscriber Types — Enable/disable email, webhook, Slack subscriptions
- RSS Feed — Enable RSS feed for subscribers
- Email Footer — Custom text in notification emails
Use your own domain (e.g., status.yourcompany.com) instead of the default subdomain.
How Custom Domains Work
Step-by-Step Setup
Configure in Supercheck
- Go to your status page → Settings tab
- Enter your custom domain (e.g.,
status.yourcompany.com) - Click Save
Add DNS Record
Log in to your DNS provider (e.g., Cloudflare, GoDaddy, Namecheap) and add a CNAME record.
For example, if your custom domain is status.yourcompany.com:
| Type | Name | Target |
|---|---|---|
| CNAME | status | supercheck.io |
The Name is the subdomain part of your custom domain (the part before your root domain). The Target is shown in the Settings tab after you save your domain.
CNAME Target:
- Cloud users: Point to
supercheck.io - Self-hosted: Point to your
STATUS_PAGE_DOMAINhostname (e.g.,yourdomain.com)
Reserved domain namespace: Do not set your custom domain to STATUS_PAGE_DOMAIN itself or any of its subdomains. That namespace is reserved for default UUID URLs ([uuid].STATUS_PAGE_DOMAIN). Use a separate hostname and point its CNAME to the target shown in Settings.
Cloudflare users: Set the proxy status to DNS only (grey cloud icon) during initial verification. You can re-enable the proxy after the domain is verified.
Verify DNS
- Wait for DNS propagation (typically 5–30 minutes, can take up to 48 hours)
- Return to the Settings tab and click Verify DNS
- Once verified, your custom domain is active and serving HTTPS traffic
HTTPS / SSL
How HTTPS is handled depends on your deployment:
| Deployment | HTTPS Handling |
|---|---|
| Supercheck Cloud | HTTPS is enabled automatically — no action required |
| Self-hosted (Docker Compose) | The default docker-compose-secure.yml includes a catch-all Traefik route that automatically provisions Let's Encrypt certificates for custom domains. No extra configuration needed. |
| Behind Cloudflare proxy | Cloudflare handles SSL at the edge. The default Docker Compose config still works — Cloudflare passes through Let's Encrypt ACME challenges automatically. Set SSL/TLS mode to Full or Full (Strict) in your Cloudflare dashboard. |
| Custom / self-managed certificates | Replace the certresolver=letsencrypt label on the status-custom Traefik router with your own TLS configuration (e.g. mounted certificates via a Traefik dynamic config file, or a wildcard cert). |
| Other reverse proxies (nginx, Caddy) | Configure your reverse proxy to accept traffic for the custom domain and terminate TLS. Forward to the app on port 3000. |
Cloudflare SSL/TLS mode: If using Cloudflare proxy with your custom domain, set the SSL/TLS encryption mode to Full or Full (Strict) in Cloudflare dashboard → SSL/TLS. The Flexible mode can cause redirect loops.
Removing a Custom Domain
To remove a custom domain, clear the domain field in Settings and save. The default subdomain URL will continue to work.
Troubleshooting
| Issue | Solution |
|---|---|
| "CNAME not found" | Wait 15–30 minutes for DNS propagation, then try again |
| "Points to wrong target" | Verify your CNAME target matches the value shown in Settings |
| "Domain already in use" | The domain is configured on another status page — remove it there first |
| 404 on custom domain | Ensure the configured custom domain is not STATUS_PAGE_DOMAIN (or one of its subdomains) |
| Verification fails with Cloudflare | Disable the Cloudflare proxy (use "DNS only" / grey cloud) and retry |
| Redirect loops with Cloudflare | Set Cloudflare SSL/TLS mode to Full or Full (Strict) |
| HTTPS not working (self-hosted) | The default Docker Compose config handles this automatically via Let's Encrypt. If behind Cloudflare, ensure SSL mode is Full or Full (Strict). If using custom certs, update the Traefik status-custom router TLS config. |
Self-hosted configuration: Set STATUS_PAGE_DOMAIN to your base hostname (e.g., example.com). URL-like values such as https://example.com:443 are normalized automatically, but plain hostnames are recommended.
Test DNS Propagation: Use dnschecker.org to verify your CNAME record has propagated globally before clicking Verify DNS.