Changelog

Track the latest features, improvements, and updates.

Current Month · April 2026

Fixed
  • Navbar notification dropdown state consistency
    Standardized row-click handling so opening a notification from either navbar also clears its unread state, while dedicated checkmark clicks mark items as read in place without redirecting.
  • Notification dropdown HTML escaping
    Escaped notification title, body, and link values in the shared dropdown renderer to avoid injecting raw notification content into navbar markup.
Improvement
  • Notification bell per-row read actions
    Added explicit per-notification "mark as read" checkmark actions to the admin navbar bell dropdown and aligned the user bell dropdown behavior so notifications can be marked read directly from the menu without visiting /admin/notifications or /user/notifications.
  • Shared navbar notification dropdown helper
    Extracted the duplicated admin/user bell dropdown logic into a reusable shared helper to keep loading, mark-read, mark-all-read, badge updates, and live-notification insertion behavior consistent across both dashboard navbars.

Fixed
  • Subscription action payload compatibility
    Adjusted Dodo-related handler payload construction so plan-change and subscription operations remain compatible with the current SDK/request contract.
Improvement
  • Dodo subscription plan change request alignment
    Updated Dodo billing and subscription handling to use the newer subscription plan request structure and revised proration-mode wiring across authentication and subscription flows.
Miscellaneous
  • Dodo dependency refresh
    Refreshed related module definitions in go.mod as part of the subscription request structure update.

Fixed
  • Public sitemap eligibility filtering
    Excluded disabled status pages and suspended or banned users from public sitemap generation.
  • Incident creation validation flow
    Tightened incident creation/edit validation and related user incident UI handling to reduce invalid submissions and improve error behavior.
  • Email validation caching behavior
    Refined email validation caching logic to reduce unnecessary validator work while preserving expected validation outcomes.
  • Monitor results index migration safety
    Updated the monitor-results region/created-at index migration to remove the CONCURRENTLY option and clarify migration comments for safer execution in this repo's migration flow.
Improvement
  • Monitor metrics query performance
    Optimized monitor metrics retrieval by bulk-fetching admin-managed region IDs and introducing more concurrent query handling in the monitor metrics API path.
  • Status page domain routing for free platforms
    Improved status-page middleware to better enforce the intended domain redirection behavior for free-platform status pages.
  • Notification dropdown read actions
    Improved dashboard notification UX by enabling direct mark-as-read actions from the navbar dropdown instead of requiring the full notifications page.
  • Analytics visualization coverage
    Extended analytics reporting with prediction-event quality data and accompanying UI/chart updates for better monitoring insight.
New
  • IndexNow ignored URLs management
    Added storage, migrations, and admin UI support for managing ignored IndexNow URLs, including bulk ignore/unignore workflows and server-side retrieval helpers for sitemap submission filtering.
  • Prediction event quality analytics
    Added new prediction-quality metrics and charting support to the user analytics experience, along with supporting analytics cache and handler updates.
Updated
  • Down Prediction documentation examples
    Expanded the Down Prediction article with clearer outage-prevention guidance and a concrete alert example, plus new supporting documentation imagery.

Fixed
  • Async notifier context-cancellation fix across channels
    Normalized async notification fan-out in internal/notifier/service.go to use per-goroutine background timeout contexts for channel delivery and separate short-lived DB contexts for async logging, preventing Email Send Failed alerts caused by inherited request/check context cancellation (smtp_settings + context canceled).
  • Deploy notifier end-state full-log policy
    Updated deploy notifications so full deploy logs are attached only once at terminal pipeline states (success, failure, unknown), while non-final updates stay lightweight. Also updated cmd/deploy-notifier to send logs as Telegram document attachments (sendDocument) instead of inlining large <pre> blocks that can fail with Bad Request: message is too long.
  • Hourly "Today (UTC)" strip now respects issue state even without hourly samples
    Corrected the no-hourly-data fallback path so per-hour segments are still classified and colored from incident/maintenance overlap instead of rendering all 24 hours as tick-unknown.
  • Maintenance precedence in hourly rendering
    Enforced strict precedence where maintenance overrides incident/alert styling for the same hour (maintenance > incident > alert/default).
  • Future-hour masking on hourly strip
    Upcoming UTC hours are now forcibly normalized to gray/unknown (tick-future + tick-unknown) and stripped of incident/maintenance/alert metadata so not-yet-happened periods cannot appear red/yellow.
  • Hourly popover source consistency
    Hour popovers now derive and display source context from segment metadata (maintenance, incident state, or alert context) in line with hourly segment semantics.
Improvement
  • Zero-downtime website deploy topology
    Added a second website service unit (status-website-b on port 18085) and updated Caddy @website upstream routing to pool 18080 + 18085 with health-aware failover, so website traffic remains served while one website instance restarts.
  • Website deploy sequencing and restore safety
    Updated deploy/restart automation in makefile to roll website instances sequentially (status-website-b then status-website) with per-instance health checks, and to stop both website units during binary restore operations.
  • Post-deploy website path validation
    Extended bin/scripts/deployment_health_check.sh to validate both /health and a real website endpoint (WEBSITE_CHECK_ENDPOINT, default /) during startup and the 60-second monitor window.
New
  • Per-component subscriber notifications guide
    Added a new Notifications article, Per-Component Subscriber Notifications, documenting the public subscribe modal, selective incident delivery, page-wide incident behavior, maintenance scope, and feed scope.
Updated

Past Releases

2026 · 85 releases

Fixed
  • Protected account action CSRF handling
    Fixed edit, deletion, and password-reset actions in internal account-management flows to consistently send the correct session CSRF token and surface clear retry guidance when validation fails.
  • Temporary credential targeting confirmation
    Added response confirmation so reset-password results are verified against the selected account before a new password is displayed.
  • Signed-in self-delete safeguard
    Prevented signed-in operators from deleting their own active privileged account and routed those requests into a notification flow for separate review.
Improvement
  • Account management workflow polish
    Improved internal account-management interactions by removing a legacy page-load dependency, tightening modal error handling, and making generated temporary passwords click-to-copy for faster handoff.

Fixed
  • On-call escalation countdown freshness
    The active incidents panel on the on-call schedule detail page now updates escalation countdowns in real time (seconds/minutes) instead of showing a stale server-rendered minute value until reload.
  • On-call active incidents live refresh
    The active incidents list on the schedule detail page now refreshes in the background every 15 seconds and updates immediately after acknowledgment, so assignments/ack state/escalation visuals stay current without a full page reload.
  • Account settings notifications navigation
    The Account Settings → Notifications tab now opens the notification preferences page instead of the unread-notifications inbox, so sound and delivery settings are reachable from the settings nav again.
  • TSA inactivity timeout semantics
    The TSA banner no longer shows a permanent session-lifetime countdown. The idle countdown appears only after inactivity begins, and impersonation last-seen is no longer refreshed by background XHR polling, so the 5-minute timeout now correctly reflects actual operator idle behavior.
  • Realtime TSA approval prompt delivery
    Newly created TSA requests now emit a user-side realtime event that opens the approve/decline modal immediately in the dashboard, while keeping the existing page-load pending-request fallback.
  • TSA pending-request decline reliability
    Fixed user decline/approve dialog request serialization in the dashboard prompt so CSRF headers and request IDs are sent correctly, preventing false failure loops on page reload/navigation.
  • TSA idle banner reset consistency
    The inactivity countdown in the user red banner now fully resets on renewed activity and no longer resumes from stale paused values while the session is actively in use.
  • Realtime TSA pill teardown
    When a TSA session ends (manual stop, timeout, or window close), the user now receives an immediate realtime tsa_ended event so stale "TSA in progress" navbar timers are removed without requiring page reload.
Improvement
  • On-call active incidents polling performance
    Background polling now short-circuits unchanged payloads and only re-renders changed incident rows, reducing unnecessary DOM churn while preserving live countdown and relative-time updates.
  • On-call alert log refresh performance
    Manual alert-log refresh now uses digest checks and row-level reconciliation, so unchanged refreshes avoid rebuilding the full table and changed entries update with lower UI churn.
  • On-call escalation notification semantics
    Escalated on-call assignments now emit a dedicated in-app/SSE type (on_call_escalated) instead of being folded into regular assignment events, enabling accurate critical handling in clients.
  • Realtime notification audio coverage
    In-app SSE notifications now play an audible alert so new events are noticeable even when the dropdown is closed.
  • Persistent critical notification alarm
    Critical notification types (including on-call escalations) now trigger a repeating alarm that continues until the operator explicitly dismisses it.
  • User-level notification sound preference
    Added a new account setting to mute non-critical in-app notification chimes while preserving the persistent critical alarm flow.

Fixed
  • Supported OSS logo alignment
    Centered the Supported OSS logo row on the open-source page so short lists no longer stick to the left side of the section.
  • Status page settings plan gating
    Started standardizing status-page settings gating so OSS Hero and other plans now see locked UI for unsupported options like white label and web analytics, while the backend preserves existing locked values instead of clearing them on unrelated saves.
  • Analytics period retention gating
    Historical uptime and analytics quick ranges now respect plan retention limits in both the UI and backend; user analytics pages are excluded from HTML minification to prevent inline script rewrite regressions that caused g/h reference errors on quick-range clicks.
  • On-call override overlap hardening
    Added a database exclusion constraint to prevent overlapping overrides per schedule and mapped concurrent overlap violations to user-facing 409 conflict responses instead of generic server errors.
  • On-call email acknowledge safety
    On-call email acknowledge links now open a confirmation page on GET and only perform acknowledgment on POST, preventing crawlers or link previews from mutating incident state accidentally.
  • On-call escalation step reliability
    The escalation scheduler now advances escalation steps only when reassignment succeeds, and correctly handles same-assignee escalations without silently skipping or prematurely consuming a step.
  • On-call action CSRF coverage
    On-call schedule actions in the user UI now send CSRF tokens consistently for acknowledge, test alert, preference save, and schedule deletion flows instead of relying on mixed client behavior.
Improvement
  • OSS directory publishing workflow
    Added direct navigation from the OSS applications screens into the public directory workflow so publishing approved projects takes fewer manual steps.
  • On-call detail refresh UX and accessibility
    The schedule detail view now preserves shift-end details during current-user refreshes and upgrades key controls like refresh and calendar toggle to more accessible button and keyboard-operable interactions.
New
  • OSS Hero public directory management
    Added a managed OSS Hero Public Directory so approved applications can be prepared and published to the public open-source page without editing static JSON files by hand.
Updated
  • Open-source page listing source
    The public open-source page now prefers visible database-backed OSS directory entries, with the legacy static logo list kept as a fallback until the new directory is populated.
  • OSS approval follow-up flow
    Approved OSS Hero applications now seed a hidden directory draft automatically so logo, destination URL, visibility, verification badge, and ordering can be reviewed right after approval.
  • OSS first-time account setup
    Auto-created OSS Hero accounts now receive a direct password-setup path with clearer first-time setup wording instead of being sent through a generic forgot-password flow.

New
  • Translation Studio docs
    Added updated Translation Studio documentation for dashboard and status page workflows.
  • Embeddable Status Banner docs
    Added a user guide for configuring and embedding the new hosted status banner.
Updated
  • Languages page
    Refreshed the languages page to reflect Translation Studio across the dashboard and public status pages.
  • Older translation docs now point to the latest guide
    Legacy translation articles now link to the current Translation Studio documentation.
  • Embed and status page docs cross-links
    Linked the new banner guide from related embed and status page settings documentation.

Fixed
  • More status page text is now clickable in Translator Mode
    Additional status page strings are now recognized by the translator toolbar for translation suggestions.
  • Shared-page permissions apply more consistently
    Component and incident workflows on shared status pages now respect page access rules more consistently.
New
  • Status page language
    Each status page can now use its own public language, separate from your dashboard language.
  • Translation helper on status pages
    You can now use Translator Mode directly on your public status pages.
  • Preview with Translator
    Open your status page with Translator Mode already active so you can start suggesting translations right away.
  • Temporary Support Access alerts
    Users now get clearer in-app and email alerts when a support session is active.
Updated
  • Translation helper stays active when navigating
    The translator toolbar now stays active as you move through status page and archive views.
  • Status page helper toggle in profile
    The Translation Helper section in your profile now includes a toggle to enable or disable the translation toolbar across all your status pages at once.

Fixed
  • Email Auth Monitor and SSL Monitor add buttons
    Fixed a form issue that could block monitor creation on the DKIM/SPF and SSL pages.
  • Shared-page access in the simple dashboard
    Team members with access to a shared status page can now open the simple dashboard and save component overrides more reliably.
  • Simple dashboard incident updates no longer duplicate unnecessarily
    Repeated note updates now stay grouped more cleanly in incident history.
Improvement
  • Simple dashboard inline editing
    Component status changes and note updates are now faster to manage directly in the dashboard.
New
  • SMS notifications
    You can now send text message alerts through Twilio, Vonage, MessageBird, or Esendex using your own provider account. Available on Pro and higher plans.
  • SMS cost controls and event filters
    SMS channels now support configurable dedup windows, daily send caps, and event-level triggers so you can control both noise and cost.
  • SMS delivery history
    SMS sends and failures now appear in Notification History so it is easier to confirm delivery and spot problems.
Updated
  • Swedish localization added
    Swedish is now available in the supported language set.

Fixed
  • Resetting a component to Operational now fully clears the override
    Components switched back to Operational now return cleanly to their default state and close any related auto-created incident.
New
  • Simple Status Page Dashboard
    Simple status pages now have a dedicated dashboard for updating component statuses, adding notes, and tracking active incidents from one place.
  • Simple Dashboard default landing option
    You can now set the Simple Dashboard as your default landing page after login.
  • Status notes can create and resolve incidents automatically
    Adding a note during a status change can open an incident and notify subscribers, while returning a component to normal can close that incident automatically.
  • Override notes appear on public pages
    Notes added to component status overrides are now shown directly on the public status page.

Fixed
  • Overall status calculations now ignore disabled monitors
    Disabled monitors are no longer included when computing overall status, preventing inactive checks from skewing page-level health.

Improvement
  • Admin user filtering
    Expanded admin user management with additional filtering options and data attributes so large user lists are easier to search and segment.
  • Degradation prediction tuning
    Adjusted degradation prediction thresholds in the monitoring scheduler to improve alert accuracy and reduce premature degradation signals.
New
  • Admin broadcast email tools
    Added an admin broadcast email interface, supporting handler/model work, and related menu wiring so internal teams can send broader operational messages from the admin panel.
  • Operational outage documentation
    Published a provider outage postmortem and supporting incident-analysis content, including refreshed blog coverage and new visual assets for the Contabo outage write-up.
Updated
  • Monitoring incident write-ups
    Updated outage-related blog and guide content with clearer summaries, supporting screenshots, and stronger cross-linking to follow-up documentation.

New
  • Release notes publication workflow
    Added a release notes guide covering February 27 to March 17, 2026 and extended metadata handling and tests so these summary pages generate cleaner share previews.
Updated
  • Localization key coverage
    Added the subject translation key across supported locale files to keep email- and notification-related UI text consistent.

Fixed
  • WordPress plugin download CTA
    Updated the public pricing page plugin button to point directly to the hosted ZIP download.
  • Suspended-account email suppression
    Outbound email sending and queued email flushing now skip suspended users instead of attempting delivery.
  • Template safety in status page analytics UI
    Removed a Go-template parsing hazard caused by literal {{status}} placeholder text inside the status page list analytics JavaScript.
Improvement
  • Status page quick analytics snapshot
    Added 30-day quick analytics popovers and modal summaries on /user/status-pages with uptime, average response time, incident counts, downtime totals, and unique visitor counts plus a direct link into the full historical analytics view.
  • Incident context visibility
    Expanded the incident details view to show linked runbooks and impacted monitor context together so responders can jump from an incident into the right operational follow-up faster.
New
  • Runbooks for incident response
    Added user-managed runbooks with create/edit/delete flows, status-page or component scoping, automatic incident linking for matching components, and inline runbook visibility from the incident details sidebar.
  • User dashboard search API
    Added authenticated navbar search for status pages, monitors, and team members so dashboard search results can be loaded dynamically instead of relying only on static JSON.
Updated
  • Localization coverage for new user UI
    Added translation keys and shipped locale updates for runbooks, incident context labels, status page quick analytics, component override messaging, and navbar search labels across the supported language set.

Improvement
  • Operational analytics processing
    Added asynchronous queue + worker processing for status page view events so analytics collection remains non-blocking during traffic spikes.
  • Analytics retention cleanup
    Added periodic cleanup for processed queue rows and expired daily anonymous dedupe records so view analytics storage stays bounded over time.
New
  • Privacy-friendly status page view analytics
    Added built-in daily view counters for status pages with total views, approximate unique visitors, incident-period views, and incident unique visitors using anonymous daily hashing and no cookies, localStorage IDs, or raw IP storage.
  • More selectable status page dependencies
    Added new dependency provider options to the existing Dependencies tab in status page settings so pages can select more third-party services from the list and configure their per-page impact and ordering.
  • Shared analytics links for view metrics
    Analytics share-token links now load the new status page view counters as well, so shared dashboards can access the same privacy-friendly view metrics as signed-in users.
Updated
  • Support documentation
    Updated the customer-facing guide at /docs/articles/status-page-view-analytics to document all four view metrics, privacy guarantees, hashing approach, and metric semantics.

Improvement
  • User dashboard activity visibility
    Reworked analytics and dashboard activity surfaces to make recent activity easier to scan, including clearer access to the full activity view.
New
  • Authenticated user API surface
    Added authenticated API endpoints for incidents, maintenances, monitors, and status pages, along with user API-key scope handling and an in-app API console for testing and discovery.
  • Zapier integration for event workflows
    Added Zapier hook subscriptions, event handling, database support, and a visual-builder setup guide so users can route product events into no-code automations.
  • Admin tools page
    Added a dedicated admin tools surface with supporting scheduler and agent-monitoring work to centralize internal operational tooling.
Updated
  • Localization for new tools and analytics UI
    Added or updated translations across supported locales for the new tools page and recent dashboard activity changes.

Fixed
  • Status page component group matching
    Optimized known component-group ID checks in the default status page template to avoid incorrect grouping behavior in rendered pages.
Improvement
  • Subscription downgrade flow cleanup
    Simplified subscription management by removing the separate trial-cancellation path and improving downgrade-to-free handling across the billing flow.

Improvement
  • Plan limit messaging in the user dashboard
    Refined plan-limit notifications and status page list messaging so users get clearer upgrade guidance when they approach or hit account limits.
  • Pricing page copy clarity
    Tightened pricing page descriptions to better explain plan differences and reduce ambiguity during evaluation.
  • Landing page CTA state awareness
    Updated landing page variants so primary calls to action adapt more cleanly to the visitor's current signed-in state.
Updated
  • Simple status page marketing assets
    Refreshed simple status page documentation content and added supporting imagery for the public marketing flow.

New
  • University content wave 3
    Published 11 new university guides covering SSL monitoring, multi-region monitoring, maintenance windows on status pages, custom domains, status page components, custom branding, subscription options, SLA vs SLO vs uptime, monitoring false positives, on-call escalation policies, and incident update cadence.
  • Simple status pages support article
    Added a customer-facing article in /docs/articles explaining when to use simple status pages, how their reported-status timeline works, and how incidents/components affect them.
  • Simple status pages guide
    Added /docs/guides/SIMPLE_STATUS_PAGES with behavior, precedence rules, tick semantics, caching notes, and troubleshooting for manual incident-driven pages.
Updated
  • University topic coverage
    Expanded the university library to better support live feature pages for SSL monitoring, multi-region checks, maintenance windows, custom domains, custom branding, incident workflows, and on-call operations through stronger educational content and internal linking.
  • University metadata consistency
    Tightened March 8-11 university descriptions and summaries to reduce overlap and improve search snippet quality across the growing article library.
  • Simple status page language and metadata
    Removed uptime-centric wording from simple status page tick UX and made public metadata descriptions simple-page aware so incident/status semantics are reflected accurately.

Improvement
  • Monitors list filtering persistence
    The Status Page filter on /user/monitors now persists in browser storage and restores on reload, with safe fallback to All Status Pages when a previously saved page no longer exists.
  • Monitors grouped browsing mode
    Added a new Group by: Status Page toggle beside Card/Compact view controls, including collapsible per-status-page sections, visible monitor counts, and an Ungrouped bucket for monitors without an associated status page.
  • Grouped view compatibility across existing controls
    Grouping now works with status filters, Enabled/Disabled/All tabs, monitor state transitions, deletions, and both card + compact list rendering.
Updated
  • Monitors list UX documentation
    Added a new Monitoring support article, Monitors List: Sticky Filters and Grouping, covering sticky filter behavior, grouped sections, local storage keys, and support troubleshooting.
  • Monitoring article cross-linking
    Updated Choosing Monitor Locations to link to the new monitors-list UX guide for easier in-doc discovery.

Fixed
  • University product page links
    Replaced stale /incident-management product-page references and handler fallbacks with /incidents to avoid 404s while preserving valid /university/incident-management/... guide URLs.
Improvement
  • University navigation visibility
    Added University to the desktop Resources menu, mobile Discover menu, footer Resources list, and Resources active-state matching so the new section is discoverable across the site.
  • Dedicated university social previews
    All university-related pages now default to static/img/og-meta/university.png for Open Graph and Twitter image metadata.
  • Expanded university library
    Added follow-up university guides for synthetic vs real user monitoring, alert fatigue reduction, and on-call handoff checklists.

Improvement
  • Manual restart support
    Improved operational controls for monitoring nodes by adding a clearer manual restart workflow with failure reporting.
  • Safer setup flow
    Improved first-time and recovery setup behavior so existing monitoring nodes resume more reliably while newly configured nodes can still be completed safely before activation.
New
  • University content hub
    Launched /university with markdown-backed landing, category, and article pages for evergreen guides on status pages, incident management, uptime monitoring, and on-call workflows.
  • University sitemap support
    Added a dedicated /university-sitemap.xml and included university URLs in the sitemap index and complete sitemap output.
Updated
  • Initial university curriculum
    Published the first university guide set covering status page examples and best practices, incident communication templates, maintenance and postmortem templates, uptime monitoring fundamentals, and on-call rotation guidance.
  • Shared public styling for university pages
    University templates now use the docs-style public help bundle and shared public metadata flow for a more consistent reading experience.

Improvement
  • Distributed monitoring rollout improvements
    Improved how monitoring nodes are updated so both one-off updates and broader rollouts are more consistent and easier to manage.
  • Deployment inventory support
    Added a structured inventory-based rollout flow so monitoring nodes can be updated from a defined target list instead of ad hoc manual steps.
  • Operational rollout guidance
    Expanded deployment guidance for monitoring nodes, including safer rollout expectations and clearer handling of target-specific configuration.
  • Alias-friendly remote management
    Improved remote host handling so updates work more cleanly with named SSH host configurations and explicit install paths.
  • Release version tracking
    Added a stable rollout versioning approach for monitoring node updates so intentional monitoring releases can be tracked separately from other routine deploys.
  • Version drift visibility
    Added a way to review which monitoring nodes are on the expected release and identify nodes that have drifted from the intended rollout.

New
  • Transport fallback support guide
    Added a new Monitoring support article, Transport Errors, Timeouts, and IPv4 Fallback, documenting interval-aware timeout behavior, one-shot IPv4 fallback for eligible transport failures, and how to interpret "UP with IPv4 fallback" notes in Recent Checks.
  • Support macro templates for transport incidents
    Added docs/guides/SUPPORT_MONITOR_NETWORK_FALLBACK_MACROS.md with copy-ready responses for IPv6/IPv4 path mismatch cases, timeout-heavy monitors, DNS/config mismatches, and internal escalation handoff.
Updated
  • Monitoring locations article
    Updated Choosing Monitor Locations with a new section on IPv6/IPv4 transport behavior, fallback notes, and links to deeper troubleshooting guidance.

Fixed
  • False down events showing 0s response time
    Fixed false positive "down" events that were incorrectly recorded with 0ms response time due to an error in the monitoring algorithm. The backfill script corrects historical data by skipping these erroneous entries, as they were not actual failures.
  • Region UUID storage in monitor results
    InsertMonitorResultWithMetadata now explicitly writes the primary region UUID to monitor_results.region_id instead of relying on the database default, fixing the bug where all region status pills showed as gray/unknown due to the literal string 'primary' being stored instead of the actual UUID.
  • Scheduler region ID passing
    The scheduler now resolves and passes the primary region UUID to InsertMonitorResultWithMetadata before inserting monitor results, ensuring correct region association in the database.
Improvement
  • Bootstrap 5 popovers for region status pills
    Monitor list region indicators now use rich HTML popovers (hover/focus) instead of native browser tooltips, showing region name, status, and average response time with proper styling and color-coded status badges.
  • Compact region pill UI
    The plain text "Regions: Munich, Portsmouth, Seattle" label has been removed from monitor rows; only colored status pills are shown for multi-region monitors, keeping the list view cleaner and more scannable.
New
  • Per-region average response time in monitor list
    Multi-region monitors now display region-specific average response time in the pill hover popover, using the same averaging model as the global "Avg response" column but scoped to each individual region.
Updated
  • Monitor location documentation
    Updated support articles (monitoring-locations, monitoring-primary-region, getting-started-first-monitor) to document the new region pill UI, popover behavior, and per-region metrics visibility in the Monitors list.

Fixed
  • On-demand TLS allow decision on cache miss
    /caddy-ask now falls back to status_pages DB lookup when a platform slug is missing in loaded cache, preventing stale-cache SSL issuance denials for valid pages.
  • SSL provisioning reliability for new slugs
    New *.statuspage.me pages no longer fail certificate issuance solely because slug cache was loaded but not yet containing the slug.
Improvement
  • Automatic slug propagation on page creation
    Status page slugs are now synchronized automatically when pages are created, improving first-access reliability.
New
  • Faster domain readiness for new status pages
    New status page slugs are now propagated immediately so newly created pages are ready for secure access faster.
Updated
  • HTTPS provisioning flow
    Improved certificate allow-check behavior for newly created status page domains to reduce false denials.

Fixed
  • Private avatar endpoint
    Public /api/avatars* is blocked at the edge; avatar images are only accessible through authenticated routes.
  • More resilient avatar rendering
    When the DiceBear upstream is unavailable or returns unexpected responses, the proxy returns a deterministic SVG fallback instead of failing the page.
Improvement
  • DiceBear proxy hardening
    Avatar proxy requests are restricted to SVG/PNG output paths and forward query strings to DiceBear (private caching headers included).
New
  • User avatars: source selection
    Users can choose gravatar or custom in profile settings (persisted in users.avatar_source).
  • User avatars: custom style selection
    Custom avatars support a style dropdown (persisted in users.avatar_style): identicon, bottts, pixel-art, lorelei, initials.
  • User avatars: local DiceBear rendering
    Custom avatars are rendered via an authenticated local proxy endpoint (/user/api/avatars/...) and are deterministically seeded from the user’s email.
Updated
  • Profile UI
    Profile settings now include avatar source + custom style controls with helper text.

Fixed
  • User monitors: trend deltas now hydrate correctly
    The /user/monitors dashboard no longer shows 0.00% for uptime/response change by default; the metrics hydration API now returns the change fields and the UI applies them in both card and compact list views.
Improvement
  • User monitors: neutral indicator for no change
    0.00% changes now render with a neutral dash icon + muted styling instead of looking positive/negative.

New
  • On-Call: per-member notification channel preferences
    Each schedule member can now configure their preferred notification channel (Slack, Pushover, Discord, etc.) for on-call alerts, overriding the team-level default on a per-person basis.
  • On-Call: notification rules per member
    Members can define personal notification rules including DND hours and repeat-until-acknowledged escalation, so alerts keep firing until the on-call engineer confirms receipt.
  • On-Call: active incident response dashboard
    The schedule detail view now includes an active incident panel showing the current assignee, acknowledgement status, escalation timer, and quick-action buttons, giving responders immediate context without leaving the schedule.

Improvement
  • On-Call calendar: event click quick menu
    Clicking an override event now opens a contextual quick menu with "Edit assignee", "Duplicate override", and "Delete override" actions directly from the calendar, without opening the full detail panel.
  • On-Call calendar: undo toast after drag/resize
    Accidentally dragging or resizing an override now shows an "Undo" toast with a 5–8 second window to revert the change.
  • On-Call calendar: success toasts for delete actions
    Deleting an override now shows a lightweight success toast (create and update toasts were already in place).
  • On-Call calendar: compact density toggle
    Week and day views now have a compact/comfortable density toggle so users can fit more events on screen without switching to a different view.
  • On-Call calendar: legend chips
    The calendar legend now displays stronger, color-coded chips for Rotation, Override, and Conflict event types for clearer visual differentiation.
  • On-Call calendar: active filter counts
    The filter bar now shows the number of active filters next to each filter label so users can see at a glance how many selections are in effect.
  • On-Call calendar: improved mobile defaults
    On small screens the calendar now defaults to day or list view instead of week view, preventing cramped layout on mobile devices.
  • On-Call calendar: clearer "now" line
    The current-time indicator in time-grid views now displays a visible time label alongside the line so the current hour is immediately apparent.
  • On-Call calendar: timezone mode in header
    The active timezone mode (local / schedule / UTC) is now displayed more prominently in the calendar header so it is always visible without opening the settings panel.
  • On-Call calendar: keyboard shortcut for create override
    A keyboard shortcut now opens the "Create override" modal directly from the calendar, without requiring a mouse click.
  • On-Call calendar: enter-to-save in override modals
    Pressing Enter in any field of the create or edit override modal now submits the form, consistent with standard modal behavior.
  • On-Call calendar: focus return after modal close
    After closing an override modal or dismissing a drag error, focus is returned to the previously active element, improving keyboard and screen-reader accessibility.

Improvement
  • Scheduler leader election reliability
    Implemented scheduler leader election wiring in the server/scheduler startup flow so only the elected instance performs scheduled job execution.
  • Deploy workflow readiness for failover
    Updated deployment scripts and Make targets to support failover-oriented operations and safer scheduler/service orchestration.
  • Public navigation update
    Added on-call scheduling visibility in public marketing navigation and feature surface to improve discoverability.
New
  • HA failover watchdog service
    Added a dedicated failover watchdog script and systemd unit (status-failover-watchdog) to continuously monitor leader state and support automatic failover handling in high-availability deployments.
  • Scheduler HA implementation guide
    Added docs/implementation/HA_FAILOVER.md with operational setup and rollout guidance for leader election and failover behavior.

Fixed
  • Monitor sparkline and detail chart repaints no longer fire randomly. Monitors appear in multiple DOM tabs (Enabled/Disabled/All), causing duplicate element IDs; all metric/sparkline update paths now use querySelectorAll to update all clones, and detail pane updates are scoped to the exact clicked/expanded instance to prevent cross-panel interference.
  • Switching range tabs (1h / 24h / 7d) now deterministically updates the chart immediately on XHR completion; late responses for a superseded range are discarded via range guard checks.
  • 7d range now renders a visually distinct weekly shape instead of mirroring the 24h chart.
  • Status page link below monitor name no longer spans full row width
    display changed from block to inline-block so only the link text is clickable. Clicking the link no longer toggles the row expand/collapse panel.
  • Down check error messages in Recent Checks are no longer truncated to 60 characters; full text is now rendered with safe HTML escaping and word-wrap.
Improvement
  • Monitor sparkline graphs now anchor the Y-axis floor to 3× the actual data range (clamped to 0), so small absolute jitter no longer fills the full chart height and looks like a chainsaw.
  • Monitor metrics API now samples data across the full selected time range using SQL bucketing (width_bucket) instead of returning only the latest 80 raw checks. This ensures range changes produce visually distinct graphs.
  • Sparkline bucket count and output point cap are now tuned per range
    1h → 24 buckets/24 pts, 24h → 48 buckets/40 pts, 7d → 7 buckets/7 pts (true daily averages).
New
  • On-Call: Shift-start notifications
    When the on-call rotation changes, the newly on-call person automatically receives a "Your shift has started" email and a Slack/Discord/Telegram channel notification (if a status page notification channel is configured).
  • On-Call: One-click acknowledge from email
    Assignment emails now include a signed one-click "Acknowledge" link so the on-call person can acknowledge an incident directly without logging in (link expires in 48 hours, single-use).
  • On-Call: Override conflict detection
    Creating an override that overlaps with an existing override now returns a clear error instead of silently stacking.
  • On-Call: "Take On-Call Now" button
    A new button on the schedule detail page lets any eligible team member immediately take over the current shift, creating a self-override until the natural shift end.
  • On-Call: Visual Gantt timeline
    The 14-day timeline is now a color-coded Gantt chart (blue = rotation, amber = override, today highlighted) instead of a plain text table.
  • On-Call: Assignee name in incident list
    The incident list now shows the assigned team member's name in the assignee badge (with ✓ or ⏱ acknowledgment status).
  • On-Call: Multi-level escalation policies
    Schedules now support an ordered escalation policy (L1 → L2 → L3 …). Each step defines a timeout and a target schedule. The escalation scheduler walks steps in order, reassigning the incident and resetting the timer at each level. Existing single-step escalation settings are automatically migrated as step 1.
  • On-Call: iCal calendar feed
    Each schedule exposes a secret-token-protected .ics URL that can be subscribed to in Google Calendar, Apple Calendar, or Outlook for a rolling 60-day view of who is on-call.
  • On-Call: Click-to-assign Gantt editor
    Clicking any day cell in the 14-day Gantt chart opens a user-picker dialog (avatar + name + email card grid). Selecting a person creates a full-day override for that day. If a conflicting override already exists, you are prompted to replace it.
  • On-Call: Schedule link in emails
    All on-call emails (incident assignment, escalation, shift-start, schedule-changed) now include a "View schedule →" link pointing directly to the schedule detail page. Assignment and shift-start emails also include a 7-day schedule table rendered as a proper HTML table (previously the table was silently dropped by the markdown renderer).
Updated
  • 7d sparkline hover tooltip now shows date only (no time) and labels the value as "Daily avg
    …ms".
  • Detail chart series name and tooltip formatter reflect "Daily Avg Response (ms)" when in 7d mode.
  • DOWN check error messages now include explicit expected-vs-actual detail: "Expected conditions not satisfied. Expected \<condition\>, got \<actual value\>" for status code, response time, body, and header conditions
    in both the main scheduler and the distributed agent check executor.

New
  • Added an optional “How did you find us?” question to onboarding (saved as users.attribution_source + users.attribution_detail).
Updated
  • Updated monitor documentation in docs/articles to match the current Monitors compact-list flow
    pause/resume from row action icons, inline AJAX behavior with progress overlay, automatic tab move/counter refresh, and temporary Restarting… state after resume.
  • Sitemap <lastmod> for docs and blog articles now reflects the actual file modification time (from os.Stat) rather than the original published_at date, so the IndexNow admin tool and scheduler can accurately detect re-submitted or updated pages.
  • Sitemap <lastmod> for static marketing/public pages is now derived from the modification time of the corresponding .gohtml template file, enabling IndexNow detection of template-only content changes without a full deploy.

Fixed
  • Synced monitors.status_page_id and added a migration to backfill missing IDs.
  • Fixed landing page hero (#landingHero) CTAs being unclickable in dark mode due to a decorative overlay intercepting clicks.
New
  • Added SLA target tracking and UI support when editing monitors.
Updated
  • Added new blog articles and enhanced existing posts with structured data.

Fixed
  • Fixed user settings updates to correctly handle unchecked HTML checkboxes.
Improvement
  • Enhanced status page functionality and inactive-state handling.
  • Improved agent deployment workflow with dynamic remote directory and user handling.
  • Expanded the makefile help output with detailed target descriptions and usage instructions.
New
  • Added a distributed monitoring agent with configuration and health check endpoints.
Updated
  • Updated the account plan limits & quotas doc to reflect current plan tiers (Free, Pro, Growth, Business, OSS Hero) with accurate core limits (status pages, monitors/page, check interval, subscribers).

Improvement
  • Refactored the event email tester UI and enhanced functionality.
  • Refactored trial welcome email logic to use user IDs and improved message formatting.
  • Enhanced billing management with manually-set plan metadata.
  • Implemented AJAX receipt downloads and updated receipt button behavior.
New
  • Added Telegram notifications for disputes and payment failures.

Improvement
  • Improved billing period handling and receipt download logic in user billing.
New
  • Added a setting to automatically start new signups on a Pro trial.
  • Added a new SaaS monitoring/status stack landing page template (Feb 21).

Fixed
  • Resolved an edge case where a previously deleted status page slug could remain incorrectly blocked beyond its intended protection window.
  • Fixed an edge case where a user's email address could remain flagged as undeliverable after the underlying issue had been resolved.

Improvement
  • Status pages
    improved maintenance display layout and styling for better readability in the default status page template and the hour incidents popover.
  • Public site
    updated footer and navbar branding across marketing landing pages and pricing page.
  • Public site: robots.txt is now served per-component
    the status-pages component serves a dedicated robots_status_pages.txt, while the marketing site serves the standard robots.txt; in dev (all-in-one) mode the correct file is selected based on request host and custom-domain headers.

Fixed
  • On-Call schedule detail
    member/override AJAX calls now include CSRF headers (prevents 403s).
  • Monitor auto-incidents
    on-call assignment email now sends for monitor-created incidents (when an active linked schedule exists).
Improvement
  • On-Call schedules
    added a direct “On-Call” entry in the user dashboard menu.
  • On-Call schedules
    timezone is now a searchable IANA timezone dropdown.
New
  • Docs
    added On-Call scheduling guide: /docs/Incidents+%26+Maintenances/on-call-scheduling.

Fixed
  • Account closure
    cancel an active trial when a user closes their account.
New
  • Docs
    added an account closure guide: /docs/account%20&%20billing/account-close-account.
Updated
  • Docs
    clarified trial/subscription behavior on account closure: /docs/account%20&%20billing/account-reactivation-grace-period.

Improvement
  • Monitors
    show the existing critical-action spinner overlay while deleting a monitor, with the message “Deleting a monitor...”.
  • Status pages
    prewarm newly-created pages (and verified custom domains) via a DB-backed queue + scheduler worker to avoid first-hit cold-start/TLS delays.
Updated
  • Status pages
    component card uptime now defaults to 1y, with a hover popover showing 1d/7d/30d/90d/1y (including 1y coverage as X/365 days) and improved popover styling/z-index.
  • Status pages
    added a visual setting to choose the default uptime window shown on component cards.

Fixed
  • Monitors
    fixed an issue where deleting a monitor could fail with a server error in some cases (including disabled monitors).

Fixed
  • Locales
    ensured runtime locale JSON files end with a newline.
New
  • i18n
    added Croatian (hr) language support across standardized translations and runtime locale bundles.
  • Teams
    added Settings History UI with localized strings.
  • Public Website
    added a new “European Alternative” landing page.
Updated
  • i18n Tooling
    improved locale verification/merge tooling and regenerated language completeness.

New
  • Notifications
    added PagerDuty integration support in notification channels.
  • Docs
    added a PagerDuty integration article.
Updated
  • Pricing
    added and displayed notification-channel logos (Pushover, Rocket.Chat, Webhook, PagerDuty).
  • i18n
    expanded translations across locales for the new integration.

Improvement
  • Asset Pipeline
    improved asset bundling and PurgeCSS integration to reduce frontend payload and improve page performance.
  • Public Landing Pages
    added ROI comparison UX and a monthly vs annual ROI period toggle.
Updated
  • Build Assets
    refined optimization flow for static resources to produce leaner production bundles.
  • Public Landing Pages
    updated styles and content, and improved asset path handling.
  • Docs
    updated deployment safety guidance and zero-downtime deployment notes.

Fixed
  • User Billing API
    tightened refund eligibility checks to prevent refund requests for zero-amount first charges.
  • Account Deletion Flow
    clarified cancellation notice behavior and related translations.
New
  • Public Website
    added a new Languages & Translations page with community translation tooling and multi-language support details.
  • Public Website
    added a new Press & Media page with brand assets, press mentions, and contact details.
  • Public Website
    added a DEV.to organization verification route and template.
  • Billing (User)
    added active subscription details, including pricing and billing cycle visibility.
Updated
  • Billing UI
    expanded subscription detail presentation and plan-change/billing-cycle messaging.
  • i18n
    added and updated translation keys across multiple locales for billing and account flows.
  • Tooling
    improved external translation push script behavior for more reliable repository handling.

Fixed
  • Monitoring
    deploy restarts could cause external agents to report self-hosted services as DOWN, artificially lowering uptime percentages.
  • Monitoring
    added a deploy guard (single-row deploy_guard table) so agent-reported DOWN results for self-hosted targets are suppressed while a deploy is in progress.
Improvement
  • Deploy
    make deploy now uses restart-rolling (website → status-pages → user → admin → scheduler) instead of restarting all services simultaneously.
  • Deploy
    deploy guard has a 5-minute TTL safety net (auto-expires if not cleared).
  • Scheduler
    shutdown now cancels the scheduler context first; HTTP shutdown timeout increased from 5s to 10s.
  • Code
    exported scheduler.IsSelfHostedTarget() for reuse in deploy-guard suppression.

Fixed
  • Auth
    hardened cookie flags in production (Secure + HttpOnly) for admin JWT session cookie, status page private auth cookie, and the user logout defensive cookie expiry.
  • Auth
    login no longer overrides session cookie options with Secure: false in production.
  • Security
    removed the missed debug logging from server logs.
New
  • Docs
    added an internal Backup and Disaster Recovery runbook with current DB backup approach, restore steps, RTO/RPO targets, monitoring, off-site sync options, and periodic restore testing.

Improvement
  • Developer experience
    improved API key workflows for managing and rotating keys.
New
  • User/API
    added API key management functionality.

Fixed
  • Scheduler
    corrected response_time_ms expected-condition semantics so operators/ranges reflect expected success thresholds consistently.
Improvement
  • Security
    tightened SSRF protections for server-side URL fetching/checking.
  • Auth
    refactored authentication logging to be clearer and more consistent.
New
  • User
    added a Notification Hub page to review notification channels across status pages, backed by a matrix API.
  • User Dashboard
    added auto-refresh summary + response-time degradation trends (7-day vs prior 7-day), surfaced directly on the dashboard.
  • Status Pages
    added a component “map” view/data (Status Page → groups → components → monitors) to make dependency structure easier to audit.
  • Docs
    added new guides for Notification Hub and for understanding plan limits/quota tracking.
Updated
  • Onboarding
    added an explicit “skip onboarding” action and a soft gate to route incomplete onboarding users back to onboarding until mandatory steps are done.
  • Dashboard/UI
    refreshed templates and added shared partials (quota badge, mobile action bar, degradation alert).
  • Analytics (Teams)
    improved error handling to distinguish not-found from unexpected failures.
  • i18n
    updated translations/locales to cover new UI strings.

New
  • Docs
    added an Advanced Expected Conditions guide covering ALL (AND) / ANY (OR), condition types, and common configuration pitfalls.
Updated
  • Docs
    JSONPath monitoring guide now links to the Advanced Expected Conditions guide and clarifies success (UP) vs failure (DOWN) semantics.

Improvement
  • Admin translations
    bulk-approve now coalesces requests and enqueues each affected language once.
New
  • Translation suggestions
    approving a suggestion enqueues a per-language apply request; the scheduler component drains the queue and runs the existing apply pipeline (backup → apply → merge/verify → git commit/push).
Updated
  • Ops
    added rollout toggles STATUS_TRANSLATIONS_AUTO_APPLY (default on), STATUS_TRANSLATIONS_AUTO_APPLY_DEBOUNCE_SECONDS (default 15), STATUS_TRANSLATIONS_AUTO_APPLY_RETRY_SECONDS (default 120).

Fixed
  • Backend
    fixed internal handler visibility for dependency state calculation (WorstDependencyOverallStateByStatusPageID).
  • Monitors
    fixed monitor DOWN/RECOVERED notifications being unintentionally coupled to auto-incident settings (alerts now send on state flips even when auto_incidents is disabled, respecting notification preferences).
Improvement
  • Onboarding UI
    replaced the large sidebar button with a non-intrusive, pulsating Floating Action Button (FAB) for completing onboarding.
  • Dashboard
    removed the persistent "Onboarding complete" success alert to reduce visual noise.
  • Monitor alerts
    improved DOWN/RECOVERED email formatting (plain-text intro line + clean markdown details).
  • Notification configs
    when using the new linked-channel UI, legacy notification_configs are now auto-synced so sending stays consistent.
New
  • Dashboard
    added dependency awareness; dashboard now warns if any configured 3rd-party dependencies (vendors) are experiencing outages, even if no direct incidents are open.
  • Status pages
    added per-monitor impact controls (full / degrade_only / none) so some monitors can be low-impact or excluded from overall status; group headers can show a configurable softened-impact badge when impact changes the displayed state.
  • Status pages
    added per-component notification overrides (inherit vs override-only) so a component can use different notification channels than the parent status page.
  • Notification channels
    added Google Chat, Mattermost, and Rocket.Chat channel types (webhook-backed).
  • Email deliverability
    added a per-user “send alerts anyway” override for accounts flagged as undeliverable.

Fixed
  • UI
    fixed keyboard shortcut contrast in translator mode dialog.
  • Database
    updated monitors.component_id foreign key to ON DELETE SET NULL to prevent cascade deletion issues.
Improvement
  • Backend
    refactored translation suggestion application logic and backup generation.
  • Docs
    improved documentation for translation progress.
New
  • Translation Mode
    enabled in-app translation mode for dashboard users to suggest and edit translations live.
  • i18n
    added new translation locale files and assets.

Fixed
  • i18n
    updated Serbian translations for "slug" to "identifikator".
  • UI
    fixed string interpolation for error and success messages in user templates (Historical analytics, trial widgets, team details).
Improvement
  • Code structure
    refactored i18n object keys and documentation.
  • Templates
    cleaned up various user templates to support new translation keys.
New
  • i18n
    added translations for domain age, settings, custom domain verification, delete confirmations, palette management, templates, invitations, and historical data access in Spanish, French, Brazilian Portuguese, and Serbian.

Fixed
  • Incidents list
    created-date sorting now uses real timestamps to ensure correct descending order.
  • Analytics share tokens
    Create Token action now localizes correctly.
Improvement
  • Notifications
    localized the status-page notification channels UI.
  • i18n
    improved Spanish locale support (regional Spanish tags map to es).
New
  • Incidents
    archive resolved incidents to hide them from status page lists while keeping the direct link accessible; optional public archive reason; unarchive support.
  • Docs
    added incident archiving documentation.

Fixed
  • Spanish locale bundle
    added missing newline at end of file.
Updated
  • Locales
    expanded French, Brazilian Portuguese, and Serbian translations (heartbeat monitors, security, and common UI terms).

Improvement
  • Subscribers
    improved subscription email validation and user feedback.
  • Trial emails
    messaging updated for clarity and consistency.
  • Trial comparison and widget templates
    improved layout and feature details.
New
  • Trials
    expiry warning email and related database migrations.
  • Dashboard
    uptime checks, monitors, and incidents statistics.
  • Sessions
    session version added for improved session management.

Fixed
  • Security keys (WebAuthn)
    registration (attestation) endpoints now enforce CSRF, and the frontend includes X-CSRF-Token for begin/finish.
  • Security keys (WebAuthn)
    user/admin removal requests now include the CSRF header for consistency.
New
  • Status pages
    changing/setting/removing the status-page password now triggers a security alert email to the account owner.

Fixed
  • Dependency providers
    Zendesk/Webex/Google (Cloud + Workspace Chat) fetching updated to match upstream API formats.
  • Dependency providers
    RSS/Atom providers now report operational when there are no recent items.
  • Status page dependency cards now render the correct status color (operational/degraded/outage/etc) instead of always gray.
  • Admin
    dependency provider batch save no longer 403s due to CSRF header mismatch.
  • 2FA enable no longer rejects valid OTP codes (input normalization + tolerant validation).
  • Backup codes endpoint now returns stored codes.
Improvement
  • Status page dependency cards are aligned using a responsive grid and include shadow-sm for better scanability.
  • WebAuthn (user/admin)
    step-up verification required to register/remove security keys (password, OTP, or backup code).
  • 2FA disable flow now supports step-up verification (password, OTP, or backup code).
New
  • Account security
    security alert emails for sensitive actions (2FA enable/disable, security key add/remove, password set/reset).
  • 2FA setup
    first-party QR-code PNG endpoints for OTP provisioning (/user/otp/qr, /admin/otp/qr) to avoid third-party secret leakage.
Updated
  • Dependency provider fetch type options expanded to include google_incidents, zendesk, and webex.
  • Docs
    dependency providers article now includes the supported providers list + icons.

Improvement
  • Faster /user/dashboard initial load by moving overall uptime calculation to an async endpoint and rendering a lightweight placeholder while it loads.
  • Reduced dashboard DB load by batching per-status-page monitor counts (avoids N+1 queries).
  • Analytics dashboard rendering is more resilient (better error handling).
  • Improved the time-range scans on large monitor_results tables.
New
  • Dependency providers
    scheduled refresh + snapshot storage for richer dependency history.
  • Public pages
    read count support on comparison/marketing pages.

Improvement
  • Monitors
    faster metrics hydration by deduplicating monitor IDs.
  • Email deliverability checks
    reduced unnecessary work for activated users.
  • Status page shell caching
    ensures cache directory exists before writes.
  • Outgoing emails
    unsubscribe URL support to improve deliverability.
New
  • Email logs
    new admin view for troubleshooting email delivery.

Improvement
  • IndexNow
    improved key verification handling and endpoint selection for submissions.
New
  • Admin invite links management page.

Fixed
  • Invite acceptance page no longer falls back to the login form due to template dispatch.
  • Invite acceptance no longer fails during user creation in edge cases.
Improvement
  • Improved onboarding flow for invited users to ensure accounts are secured before accessing the app.
  • Onboarding monitor creation now uses the same UI as the dashboard “Add Monitor” flow.
New
  • Admin dashboard registry for dependency providers (global vendor definitions
    name/logo/API URL).
  • Invited-user onboarding “Secure account” step requiring password and/or OAuth linking before proceeding.
Updated
  • Added i18n keys for new monitor form labels/buttons and status page label (translated across supported locales).

Improvement
  • IndexNow admin
    new button to add all visible URLs and improved selection handling.
New
  • IndexNow
    resubmission scheduler plus admin UI for managing submissions.
  • IndexNow admin
    filter option for selected URLs.
Updated
  • IndexNow submissions now track success/error details for clearer diagnostics.

Improvement
  • SEO
    added contextual internal links to /wordpress-plugin from high-intent pages (tools, integrations, pricing, and a key status page guide) to help WordPress users find the plugin landing page.

Fixed
  • Blog read tracking
    corrected slug assignment and added stronger logging/error handling to diagnose slug mismatches.
  • Migrations
    restored missing down migrations after an accidental deletion.
Improvement
  • User status pages
    real-time monitor status aggregation and a visible “last checked” timestamp for clearer freshness.
  • Monitoring queries
    optimized latest monitor status retrieval using a lateral join.
  • Blog & Docs
    improved internal link title fetching (better title resolution for docs links).
  • Migrations
    added rollback scripts and improved safety around removing database elements.
New
  • Admin
    aggregation status endpoints and dashboard UI to monitor daily aggregation jobs and their results.
  • Public
    email notification channel confirmation now has a dedicated success page.

Fixed
  • Incident creation modal
    fixed CSRF validation error when creating a new component via the component creation dialog on /user/incidents/new. The XHR fetch request now includes the CSRF token in the X-CSRF-Token header.
  • Status page day ticks
    restored incident details in tick popovers (including multi-day progress) by merging historical incidents from shell cache with live incident data.
Improvement
  • Blog & Docs
    enhanced Goldmark link processing to handle Linkify-generated anchors, replacing path-based link text with article/document titles.
  • Link processing
    added smart punctuation handling to strip trailing punctuation from slug lookups (handles cases like /blog/post-name. at end of sentences).
  • Cross-referencing
    blog posts can now reference docs and vice versa, with automatic title resolution from both catalogs.
  • Health checks: updated response format to include dependency status map ({"status":"ok|degraded|error", "component":"...", "dependencies":{"database":"ok|degraded|error"}}). Returns HTTP 200 with degraded status instead of error codes for partial failures. Uses permissive model where /healthz/:component path is informational
    always returns the actual running component's status regardless of path.
New
  • Blog & Docs
    automatic internal link conversion with title fetching. Plain text internal links (e.g., /docs/status%20pages/status-pages-web-analytics) are now automatically converted to properly formatted anchor tags with fetched document titles, improving readability and user experience.
  • Health check endpoints
    extended /healthz to support component-specific queries via /healthz/:component. Uses permissive model where any component path returns the actual running component's health (e.g., https://statuspage.me/healthz/user returns website component health when accessed through public proxy). Main server now probes database connectivity (shallow check) and includes dependency health in response. Scheduler's /healthz endpoint also supports component parameter for consistency.

Fixed
  • Status page
    fixed missing tick and improved tick hydration to remove duplicates and align with daily bars.
  • Status page
    fixed “no data for today” by fetching today’s live data using UTC date truncation and adding date filtering in relevant queries.
  • Status page caching
    improved caching strategy for the live status endpoint and incident cache invalidation behavior.
  • Monitoring queries
    fixed monitor_id type casting and corrected timestamp selection in monitor results.
  • Logging/deploy
    removed noisy 404 debug logs and fixed deployment health-check script path.
Improvement
  • Status page live-status hydration
    improved fetch state management, error handling, and slug handling.
  • Status page incidents UI
    improved hour-incidents popover behavior (dynamic event binding + accessibility) and improved incident tick delegation.
  • Ops/debuggability
    added build fingerprint headers and server time to responses.
  • Ops/systemd
    added service files and a sync script; updated service files to load environment variables.
  • Email
    allow sending weekly reports to users with “undeliverable” email status if verified.
Updated
  • Website
    added component routes and service configuration.
  • Dodo environment
    improved normalization and expanded tooltip details.

Miscellaneous
  • No user-facing changes.

Fixed
  • Status page
    ensured Bootstrap Icons assets are loaded so UI icons (including external-link) render reliably.
  • Status page
    removed caching from /api/status-page/:slug/live-status (skeleton hydration + auto-reload endpoint) to prevent stale status indicators (e.g., showing "Degraded" after issue resolves).
  • Status page settings
    component edit/delete buttons no longer submit the main settings form.
  • Components API
    validates component names (non-empty) and URLs (optional, absolute http/https only).
  • Public pages
    fixed crawlability/accessibility issues (removed javascript:void(0) links in nav, added a proper <main> landmark, improved link/tap-target affordances).
  • Blog
    removed a duplicated docs link line in the privacy-first analytics article.
Improvement
  • Status page UX
    stabilized hour/day pill popover positioning (no flicker/jump on hover-scale) and fixed the ghost/no-data popover resize jitter.
  • Status page rendering
    ensured component URLs are available across cached render modes (MISS/HIT/SHELL-HIT/SKELETON) so the external-link icon appears consistently.
  • Status page auto-reload
    refreshes per-component status dot/pill alongside charts to avoid “cached-looking” component states.
  • User dashboard
    improved component editing UX to edit component name and optional URL in one modal.
  • Public marketing pages
    improved Lighthouse/PageSpeed by deferring non-critical JS, preloading key CSS/fonts, and lazy-hydrating below-the-fold embeds.
  • SEO
    strengthened internal link clustering across the Monitoring blog series (consistent relative internal links + related-article cross-links).
New
  • Status page
    optional per-component external-link icon next to the component name when a component URL is configured (opens in a new tab).
Updated
  • Blog
    refreshed internal links across Monitoring articles to point to canonical on-site routes (e.g. /blog/monitoring/..., /docs, /pricing).
  • Changelog
    linked the 2026-01-11 blog series entry to the actual articles.

Improvement
  • Historical Uptime UI
    added quick date presets, uptime charting, and monitor filtering for easier navigation.
New
  • Analytics
    added Historical Uptime dashboard pages under Analytics, including page/monitor granularity and CSV/JSON export.
  • Team permissions
    status page owners can choose which team roles can access Historical Uptime (default Owner/Admin).

Improvement
  • Admin
    user summary and tables show additional user details and status indicators.
  • Pricing/plan comparison
    improved layout behavior (sticky navbar offset + overflow handling).
New
  • User sessions
    track last_login and last_active for improved account/session visibility.
Updated
  • Docs/articles
    published additional status-page articles (draft → published).

New
  • Docs
    added Zero-Downtime Deployment documentation and solution architecture overview.

Miscellaneous
  • No user-facing changes.

Fixed
  • Alternative page template
    removed an unnecessary safeJS wrapper around JSON-LD scripts.
  • Plan limit persistence
    admin saves now upsert newer plan limit columns (2FA/security keys/postmortems, heartbeat min/max/grace, team seats, settings audit).
Improvement
  • Landing pages
    added social links and improved image handling for light/dark themes.
  • Test coverage
    added comprehensive tests across auth/config/db/utils and expanded Makefile testing commands.
  • Public templates
    refactored asset URLs to use the shared assetPath helper.
New
  • Pricing and billing
    plan features now reflect the actual plan limits configured in the admin UI (including grouped feature rendering).
  • Admin plan limits
    expanded edit + compare UI to include additional plan limits (team seats, heartbeat limits, settings changes audit).
  • Plan features
    refactored feature handling to support grouping and improved visibility.
  • Competitor comparisons
    added SEO FAQ functionality with structured data support.
Updated
  • UI copy
    renamed “GA Tracking” to “Web Analytics”.

Improvement
  • Blog system
    improved article parsing/catalog and related handler logic.
New
Updated
  • Blog
    refreshed existing status page content and templates for incident communication.

Fixed
  • Active discounts API
    treat client-side context cancellations as non-critical (returns HTTP 408 instead of 500).
  • Incident updates no longer overwrite the initial incident message; updates are now appended while preserving the original "Investigating" entry.
Improvement
  • Enhanced status page incident timeline
    connector alignment and segment collapse for long sequences.
  • Improved incident update readability with preserved line breaks (pre-wrap) across templates.
  • Expanded team management capabilities and audit logging for administrative actions.
New
  • Team seat limits
    Each plan now defines how many members (seats) can be invited per team. The subscription owner doesn't count toward the seat limit.
  • Billing page usage snapshot
    Added Teams, Seats per Team, and Heartbeat Monitors usage cards with progress bars.
Updated
  • Documentation
    Teams article clarified plan-based limitations (teams enabled, team count, seats per team).
  • Documentation
    Billing article added Usage Snapshot section explaining all tracked resources.
  • Documentation
    Web Analytics article updated to reflect team-admin access on shared pages.

Improvement
  • Multiple UI/UX improvements across dashboard and public pages.
  • Backend refinements across handlers and services.
Miscellaneous
  • General stability updates and minor fixes.
New
  • Added translations for English, French, and Serbian.

Fixed
  • Fully self-hosted Twemoji PNG assets by updating the local Twemoji runtime to load from /static/vendor/twemoji/assets/ instead of cdn.jsdelivr.net.

Fixed
  • Fixed subscription modal JavaScript error by moving modal HTML and script to end of body tag, ensuring DOM elements exist before script execution.
Improvement
  • Replaced info color scheme (cyan) with primary color scheme (purple) across 57 template files for better brand consistency in alerts, badges, and background highlights on dashboard, public pages, and admin panel.
  • Added cache-busting timestamps (v=20260107193100) to all CSS references to prevent browser caching issues.
  • Removed demo.css references from all templates (previously unused demo asset).
  • Updated future 24-hour tick colors on status pages to be much lighter in light theme (#e8e8e8 with reduced opacity) while maintaining current appearance in dark theme for better visual hierarchy.
Updated
  • Updated Frest Admin Template CSS to latest version (May 2025) from source SCSS files.
  • Established proper SCSS compilation workflow using make scss-build for future CSS updates.

Fixed
  • Fixed HTTP 500 internal server error when subscribing to status updates with an undeliverable email address.
Improvement
  • Added manual override prompt for subscriptions blocked by email validation, allowing users to confirm and force subscription if they believe the address is valid.

Improvement
  • Auth page styling and layout improvements.
New
  • Auth pages
    theme toggle support.

Improvement
  • Self-hosted 19 third-party JS/CSS libraries (twemoji, sweetalert2, chart.js stack, leaflet, jdenticon, sortablejs, apexcharts, marked, tagify, confetti, popper, tippy, bootstrap) under static/js/css/vendor to remove CDN runtime dependencies.
  • Added vendor copy automation (bin/scripts/copy-vendor-libs.js) wired into npm postinstall/make assets-full; templates now load local paths across admin/user/public/status pages.
  • Kept external-only analytics (Plausible, GoatCounter, etc., Sapat) by design.
New
  • Added Swetrix as a web analytics provider for status pages (header-only, requires project_id).
Updated
  • Web analytics settings UI, placement rules, and support docs now include Swetrix.
  • Clarified web analytics copy/docs to note analytics work on custom domains and hosted subdomains (statuspage.me, sp.fyi, hostedstatus.page).

Fixed
  • Disable footer placement for Plausible Analytics and always inject Plausible scripts in the page header.
  • Disable footer placement for Umami Analytics and always inject Umami scripts in the page header.
  • Fix web analytics enablement not persisting after saving analytics configuration, which prevented tracking snippet injection on public status pages.
  • Fix status pages list activity timestamps
    show seconds for <60s and auto-refresh on each status page's monitor interval.
  • Fix scheduled SSL monitor emails not sending reliably; now sends 30/15/5 day warnings and a renewal confirmation email.
Improvement
  • Admin tools
    added a "Realign Next Check (UTC)" action to force-align enabled tool monitors to the next UTC boundary.
  • Add RSS/Atom feed autodiscovery tags (<link rel="alternate">) to public status page HTML.
  • Redesign the user dashboard “Your Status Pages” table into an operational view (health, active incidents, affected monitors, latest activity).
  • Show monitor type/target/interval and last check time in status page settings → Monitors.
  • Live-update the affected row in “Your Status Pages” when new monitor check data arrives.
  • Allow Plausible script_src to be provided as either a full URL or just the pa-*.js filename (auto-expanded to https://plausible.io/js/...).
  • Align Simple Analytics install snippet with the official embed (remove defer).
  • Lock analytics script placement for providers with official placement requirements/recommendations (e.g., Cabin footer-only; Fathom/Pirsch/Simple header-only).
  • Auto-disable SSL tool monitors after 15 consecutive invalid/expired certificate checks and email the user with re-enable instructions.
New
  • Add public status page feeds at /rss.xml (RSS 2.0) and /atom.xml (Atom 1.0) to follow incident and maintenance updates.
  • Surface RSS/Atom feed links in the status page “Subscribe to Updates” modal.
Updated
  • Update Plausible Analytics service configuration to accept a site-specific script src URL/path (e.g. https://plausible.io/js/pa-XXXXX.js) rather than a domain-only setup.
  • Update tool monitors scheduling
    DNSBL + SSL run daily aligned to 00:00 UTC; Email Auth runs every 6 hours aligned to 00/06/12/18 UTC; manual checks no longer shift the next scheduled run.

Fixed
  • Password field focus on protected pages now retries on load/pageshow to avoid browser skip cases.
  • Uptime tooltips on day ticks now show four-decimal precision to avoid rounding away small downtime.
  • User Tools monitors (SSL/DNSBL/Email Auth) now run reliably via the scheduler even when only the user component is deployed.
Improvement
  • Password-protected status pages now autofocus and select the password field on load for quicker access.
  • Public status pages can optionally show monitor type badges (API/DNS/Site) before monitor names.
  • Public status pages now render monitor type badges with a visible badge background and center the availability period controls.
  • Status page settings now include a "View your status page" button next to Save, with an unsaved-changes prompt before viewing.
New
  • Added a per-monitor toggle to exclude it from overall status and global uptime calculations.
Updated
  • Status page hourly history now renders as a compact segmented progress bar (with per-hour hover details) instead of large numbered pills.
  • Future hours in the Today (UTC) bar now render as solid gray to clearly signal upcoming time slots.
  • Status page day ticks now render downtime as hard-stop vertical fills with bad color anchored at the bottom instead of diagonal gradients.
  • Day tick popovers now include a visual notice when a day was unhealthy or had downtime, even if no incidents are listed.

Fixed
  • Fallback to the default status page template when the optional Daisy/test templates are missing, preventing blank renders for /test routes and gated views.
  • Private and blocked status pages now set X-Robots-Tag and meta noindex to stay out of search results.
New
  • All status subdomains and custom domains now serve /robots.txt to satisfy crawlers.
2025 · 7 releases

Improvement
  • Made upgrade page for Incident Templates dynamic
    the required plan name is now fetched from the plan limits cache instead of being hardcoded
  • Refactored incident_templates handlers to use the new features package for upgrade data
  • Upgrade pages now support dynamic feature names, descriptions, images, and custom benefits
New
  • Created internal/features package with reusable feature gates system for plan-gated features
  • Added templates/user/partials/upgrade_feature.gohtml reusable partial template for upgrade CTAs
  • Added dict, strList, and or template functions for better template composition

Fixed
  • Added the admin tools CSRF token to stop 403 responses when running the Auto-Heal action for free tools.
  • Corrected the Auto-Heal DKIM/SPF query to target the existing dkim_spf_monitors table, preventing 500 errors.
  • Fixed /user/analytics/:id deep-links not auto-loading charts/data by force-loading the default 90-day view on page load.
  • Fixed the dashboard “Service health” overall badge showing UNKNOWN by returning and using the same live overall status semantics as the public status page.
Improvement
  • Converted the landing page "Featured On" SaaS directory widgets into a single-row scrolling carousel to match the existing logo treatment and avoid grid wrapping and ensured both homepage logo rows (customers and SaaS directories) auto-scroll by initializing every carousel track, not just the first and reduced the logo height to 50px for a tighter strip layout.
  • Landing page signup analytics now attributes signups by activation intervals (based on recorded template activation times) instead of relying on the users.landing_template snapshot.
  • Dashboard quick-start and zero-status-page callouts now use Frest card/icon patterns, and the Activity action control adopts the Frest icon-only style for consistency.
  • Tools dashboard now includes a Frest-style quick-start bar and uses label badges for all tool tiles to match the updated dashboard visual language.
  • Replaced remaining Boxicons on user dashboard-related templates/partials with Bootstrap Icons to avoid missing assets and keep styling consistent.
  • Monitor add/edit forms now use Frest-style headers, alert treatments, and padded containers for a consistent dashboard UX.
  • Applied comprehensive Frest UI/UX beautification across all 70+ user dashboard templates and partials:
  • All pages now use consistent container-xxl flex-grow-1 container-p-y wrapper.
  • All cards now have shadow-sm for subtle depth.
  • Card headers feature icon badges with bg-label-* rounded-circle styling.
  • All solid badge backgrounds (bg-success, bg-danger, etc.) replaced with label variants (bg-label-success, bg-label-danger).
  • Action buttons converted to icon-only pill style
    btn btn-sm btn-icon btn-text-secondary rounded-pill.
  • Alerts now use subtle backgrounds
    bg-info-subtle, bg-warning-subtle, bg-danger-subtle, bg-success-subtle with matching borders.
  • All FontAwesome (fa-*), Boxicons (bx bx-*), and Tabler (ti ti-*) icons replaced with Bootstrap Icons (bi bi-*).

Improvement
  • Inject privacy-friendly analytics snippets on public status pages with placement control, exclusion rules, and a custom-domain-only disclosure.
  • Add self-exclusion option for status page owners
    when enabled in Account Settings > Notifications > Privacy, logged-in owners won't be tracked by their own status page analytics, keeping visitor data clean and accurate.
  • Add UI disable/enable behavior for analytics configuration section
    when the "Enable web analytics" toggle is off, all configuration fields are visually dimmed (50% opacity) and disabled from interaction.
  • Add owner self-exclusion backend logic in public status page handler
    checks if logged-in viewer is the page owner with self-exclusion enabled before injecting analytics scripts.
  • Add privacy settings toggle in user account notifications page for self-exclusion preference management.
  • Add database migration (0229) to support owner self-exclusion
    new exclude_self_from_analytics boolean column on users table.
  • Create comprehensive WEB_ANALYTICS_IMPLEMENTATION.md documentation covering database schema, models, API endpoints, privacy features, user guide, and security considerations.
  • Create user-facing documentation article "Configuring Web Analytics" with step-by-step setup guide, service comparison, troubleshooting, and compliance information.

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.