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
**Component Health Breakdown** - Per-component analytics showing availability, response time percentiles, incident frequency, and operational status (up/degraded/down)
**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.