Logo

Status Page

Changelog

Track the latest features, improvements, and updates.

Fixed
  • Monitor creation for DNSBL/SSL/DKIM-SPF now sets `next_check_at` into the future immediately (6 hours ahead) to prevent "Next Check" showing past times.
  • Analytics print styles improved so charts render correctly in print/PDF.
Improvement
  • Brand palette and Custom CSS injection applied to live status pages and archives; UI polish for palette controls (auto-save, disable when off, remove flow).[Fixed]
  • Fixed critical bug where `InsertAlert()` was never called in the scheduler's `alertOnStatusChange()` function, causing the alerts table to remain empty and the `/user/monitors/{id}/alerts` page to always show "No alerts for this monitor"
  • Alerts are now recorded for ALL monitors on status change, not just those attached to components (auto-incidents still require component attachment)
  • **Fixed cascade failure issue**
    Local scheduler now skips checks for self-hosted infrastructure (statuspage.me, hostedstatus.page) to prevent false "down" events when the local status-pages service crashes. External agents are used exclusively for monitoring our own infrastructure.
  • Fixed critical scheduler goroutine bug causing tool monitors (SSL, DNSBL, DKIM/SPF/DMARC) to stop executing after 18+ days locally and 1+ month in production. The scheduler goroutine was exiting immediately after starting all schedulers because it had no blocking mechanism, causing deferred cleanup to run and kill all child goroutines. Added `<-ctx.Done()` to keep the goroutine alive until context cancellation.
  • Fixed analytics dashboard failing on production with "Failed to load analytics data" error. The `/api/analytics/status-pages/
    id` route was registered on the root router without session middleware, so `GetUserFromContext()` returned nil. Added route to `userGroup` for authenticated users while keeping the root route for token-based stakeholder access.
  • Fixed analytics showing incorrect uptime percentages for recently created status pages. The system was counting days before monitors existed as 0% uptime (e.g., 90-day period for a 30-day-old monitor showed ~38% instead of ~100%). Now clamps the analytics start date to the earliest monitor creation date for the status page.
  • Reduced Caddy load balancer failover timing from 15s (5s interval + 10s duration) to 7s (2s interval + 5s duration) for faster automatic failover when status-pages service is unavailable
  • The embed API, public API, and homepage routes now failover more quickly to the user service when status-pages is down
  • Added "Next Check" column to DNSBL and Email Auth monitoring tables to show when the next automated check will occur
New
  • Admin Tools page with Auto-Heal actions to normalize `next_check_at` across DNSBL, SSL, and DKIM/SPF monitors.
  • Added `SELF_HOSTED_DOMAINS` environment variable (comma-separated) to configure which domains are self-hosted. Defaults to `statuspage.me,hostedstatus.page`. Monitors targeting these domains skip local region checks to prevent cascade failures.
  • Added custom favicon upload for status pages - users can now upload their own PNG, JPG, SVG, or ICO favicon (max 100KB) to personalize their status page branding. Requires Custom CSS plan feature.
  • Added automatic brand color palette extraction from logo - users can extract dominant colors from their uploaded logo using k-means clustering, with suggested palettes for primary, secondary, accent, background, and text colors. Dark mode colors are auto-derived.
  • Added color palette editor with live preview in status page settings - includes color picker inputs, hex value editing, and real-time preview of how brand colors will appear on the status page.

Fixed
  • Analytics share token management aligns with database schema and no longer queries non-existent columns.
  • Revoked or expired analytics share links now render a clear "access revoked" message instead of failing unexpectedly.
  • Analytics share token usage counting is performed on token-based analytics API access.
  • Added a legacy `/user/analytics/statuspage` route that redirects to the current analytics JSON endpoint to prevent older/cached clients from failing with 404.
  • Plan upgrades/changes initiated from the billing pricing UI now redirect back to billing with `success=true`, ensuring the purchase thank-you modal shows after successful plan changes.
  • The plan purchase client script now handles successful plan-change responses that return a redirect URL instead of a Dodo checkout payment link.
  • Adaptive Postโ€‘Incident Monitoring eligibility now correctly detects non-free plans even when the stored plan key casing differs (e.g., `GROWTH`).
Improvement
  • Analytics dashboard now requires selecting a status page before loading metrics (no automatic fetch on page load).
  • Analytics downtime-only filter now affects both the chart and component health table.
  • Shared analytics links open a simplified read-only analytics view.
  • API/HTTP monitors can now mark DOWN when response time is greater or less than a threshold via Advanced Conditions.
Updated
  • Added new Analytics documentation articles (dashboard + sharing).

Fixed
  • Dashboard tool history now records entries even when a lookup is served from cache.
  • Tools dashboard pages now reliably show the plan badge across `/user/*` routes.
  • Fixed incident visibility leak where componentless incidents could potentially be exposed to unauthorized users.
  • Fixed automated incident creation failures when incident state lookup returned empty values.
  • Fixed issue where incidents could be created without being linked to any status page (orphaned incidents).
  • Automated incident creation now respects plan limits for `auto_incidents` feature.
  • Status page activity checks now work correctly for both component-based and componentless incidents.
  • Fixed email recipients not displaying on first dialog open when editing email notification channels.
  • Monitors no longer disappear from public status pages when their component assignment is cleared; they now render under a standalone "Monitors" section
  • Fixed monitor status-page resolution in dashboard models so component-less monitors are correctly attributed to their status page (including uptime calculations and downgrade preview).
Improvement
  • **Response Time Percentiles** - `daily_monitor_aggregations` table now computes and stores P95 and P99 response time percentiles during nightly aggregation job via PostgreSQL PERCENTILE_CONT() function
  • **Print-Optimized Reports** - Analytics dashboard includes @media print styles for landscape tabular output, enabling users to generate monitoring reports without PDF export
  • Added visible "Recent checks" history to the dashboard Domain WHOIS and Domain Age tools.
  • Added pagination and an items-per-page picker to "Recent checks" for the Domain WHOIS and Domain Age dashboard tools.
  • Non-subscribed users see up to 3 recent checks; paid users see unlimited history.
  • Recent checks update immediately after running a new lookup.
  • Recent checks show whether results were cached or fresh.
  • Blog post pages now use their cover image for social previews (OpenGraph/Twitter) when available.
  • Standardized more dashboard pages to render via the shared `renderUser` helper so plan/CSRF context is consistently available.
  • Incident creation form now includes direct status page selection for better UX.
  • Improved incident validation to ensure all incidents are properly linked to a status page.
New
  • **Analytics Dashboard** - Comprehensive historical monitoring analytics for status page owners with time-series charts, customizable date ranges (7/30/90/365 days or custom), and print support
  • **Analytics Metrics** - Display key performance indicators
    uptime percentage, average/min/max/p95/p99 response times, MTBF/MTTR, incident count, and downtime duration
  • **Component Health Breakdown** - Per-component analytics showing availability, response time percentiles, incident frequency, and operational status (up/degraded/down)
  • **Dual-Layer Analytics Cache** - Redis hot cache (7d/30d periods, 30min TTL) + file-based cold cache (90d/365d periods, 6h TTL) + in-process LRU (500 entries) for optimal performance
  • **Analytics Share Tokens** - Secure token-based access for stakeholders with optional expiry dates, read-only flags, and usage tracking (foundation for Q2 2026 stakeholder feature)
  • **Team Members Stub** - Database table created for future Teams feature enabling role-based access control (owner/editor/viewer)
  • Made blog and Help Center tags clickable with SEO-friendly tag pages (e.g. `/blog/tag/monitor/`, `/docs/tag/monitor/`).
  • Component selection is now optional when creating incidents โ€“ create general status-page-wide incidents.
  • Added "Verify" button for unverified email notification channels to manually resend verification emails.
Updated
  • Added user dashboard sidebar "Analytics" entry linking to `/user/analytics` (auto-redirects to the first active status page).
  • Registered public Analytics page at `/analytics/
    id?token=...` for stakeholder access (read-only) and ensured the template passes the token to API calls.
  • Wired `GET /api/analytics/status-pages/
    id` in the server and initialized an analytics cache (Redis + file) for performance.
  • Implemented full token management UI
    list, create, and revoke share tokens with optional expiry and read-only flags; includes copy-to-clipboard share URL generation and usage tracking.
  • Token management accessible at `/user/analytics/
    id/tokens` with ownership enforcement; routes: `GET /user/analytics/:id/tokens` (list), `POST` (create), `DELETE/:token_id` (revoke).

Fixed
  • Fixed malformed checkbox HTML in Domain WHOIS tool where CSS code was incorrectly mixed into the label element.
  • Added missing template variables (user, isUserLoggedIn) to Domain WHOIS and Domain Age tools for proper user dashboard rendering.
  • Double-reading of HTTP response body during monitor checks now avoided with shared body content
  • SLA report template panic when switching months (float/int comparisons in template logic)
  • Incorrect daily downtime attribution that could exceed 24 hours on a single day for long-running incidents
Improvement
  • Monitor onboarding wizard now displays CDN detection warnings with actionable recommendations
  • Monitor test runs now include metadata storage in JSONB column for CDN detection results
  • Status page settings UI with ownership transfer tab and pending transfer status
  • OSS Hero application form automatically restores draft data after failed submissions
  • Failed OSS applications now trigger admin Telegram alerts with error details and IP address
  • SLA report month navigation updated to use explicit Month + Year dropdowns (stable template rendering)
  • Aligned dark theme styling of WHOIS raw output on the user tools page to match the public tool for better readability.
New
  • Public changelog page with date-based markdown entries at /changelog
  • CDN detection system for monitoring checks (Cloudflare, Akamai, Fastly, CloudFront, Sucuri, Imperva)
  • Status page ownership transfer system with email invitations and single-use tokens
  • Educational warnings when monitors detect CDN usage to prevent false positive HTTP 200 responses
  • Blog post explaining CDN false positives and health check endpoint best practices
  • OSS Hero application form now auto-saves drafts on submission failures
  • Admin Telegram notifications for OSS Hero application submissions (success and failure)
  • Automated SLA breach email notifications with deep links to the relevant monitor SLA report
  • One-off SLA incident metrics backfill utility for recomputing daily aggregates over a date range
Updated
  • Added Tools submenu links for Domain WHOIS and Domain Age in the user dashboard for easier access with the option to flush cache.