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/notificationsor/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 ingo.modas 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 theCONCURRENTLYoption 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 ininternal/notifier/service.goto use per-goroutine background timeout contexts for channel delivery and separate short-lived DB contexts for async logging, preventingEmail Send Failedalerts 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 updatedcmd/deploy-notifierto send logs as Telegram document attachments (sendDocument) instead of inlining large<pre>blocks that can fail withBad 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 astick-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-bon port18085) and updated Caddy@websiteupstream routing to pool18080+18085with health-aware failover, so website traffic remains served while one website instance restarts. - Website deploy sequencing and restore safety
Updated deploy/restart automation inmakefileto roll website instances sequentially (status-website-bthenstatus-website) with per-instance health checks, and to stop both website units during binary restore operations. - Post-deploy website path validation
Extendedbin/scripts/deployment_health_check.shto validate both/healthand 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
- Subscriber and status-page documentation cross-links
Updated Managing Status Page Subscribers, Status Page Settings Guide, Managing Components and Component Groups, Creating and Managing Incidents, Scheduling Planned Maintenance, Notifications: Subscribers vs Internal Alerts, Notification Channels Overview, and Notification Hub to point readers to the new subscriber-delivery guide where relevant. - Notification feature inventory wording
Refreshed the feature overview docs to explicitly call out per-component subscriber preferences alongside existing status page subscription features.
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 realtimetsa_endedevent 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 causedg/hreference 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 thesubjecttranslation 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-pageswith 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-analyticsto 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/articlesexplaining 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/monitorsnow persists in browser storage and restores on reload, with safe fallback toAll Status Pageswhen a previously saved page no longer exists. - Monitors grouped browsing mode
Added a newGroup by: Status Pagetoggle beside Card/Compact view controls, including collapsible per-status-page sections, visible monitor counts, and anUngroupedbucket 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-managementproduct-page references and handler fallbacks with/incidentsto avoid 404s while preserving valid/university/incident-management/...guide URLs.
Improvement
- University navigation visibility
AddedUniversityto 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 tostatic/img/og-meta/university.pngfor 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/universitywith 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.xmland 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
Addeddocs/guides/SUPPORT_MONITOR_NETWORK_FALLBACK_MACROS.mdwith 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
InsertMonitorResultWithMetadatanow explicitly writes the primary region UUID tomonitor_results.region_idinstead 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 toInsertMonitorResultWithMetadatabefore 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-asknow falls back tostatus_pagesDB 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.mepages 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 choosegravatarorcustomin profile settings (persisted inusers.avatar_source). - User avatars: custom style selection
Custom avatars support a style dropdown (persisted inusers.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/monitorsdashboard no longer shows0.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
Addeddocs/implementation/HA_FAILOVER.mdwith 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
querySelectorAllto 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.
7drange now renders a visually distinct weekly shape instead of mirroring the24hchart.- Status page link below monitor name no longer spans full row width
displaychanged fromblocktoinline-blockso 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.icsURL 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
7dsparkline 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
7dmode. - 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/articlesto 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 (fromos.Stat) rather than the originalpublished_atdate, 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.gohtmltemplate file, enabling IndexNow detection of template-only content changes without a full deploy.
Fixed
- Synced
monitors.status_page_idand 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.txtis now served per-component
the status-pages component serves a dedicatedrobots_status_pages.txt, while the marketing site serves the standardrobots.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-rowdeploy_guardtable) so agent-reported DOWN results for self-hosted targets are suppressed while a deploy is in progress.
Improvement
- Deploy
make deploynow usesrestart-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
exportedscheduler.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 withSecure: falsein 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
correctedresponse_time_msexpected-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 togglesSTATUS_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 whenauto_incidentsis 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, legacynotification_configsare 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
updatedmonitors.component_idforeign key toON DELETE SET NULLto 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 toes).
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 includesX-CSRF-Tokenfor 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-smfor 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, andwebex. - Docs
dependency providers article now includes the supported providers list + icons.
Improvement
- Faster
/user/dashboardinitial 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_resultstables.
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-pluginfrom 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 theX-CSRF-Tokenheader. - 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/:componentpath 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/healthzto 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/userreturns website component health when accessed through public proxy). Main server now probes database connectivity (shallow check) and includes dependency health in response. Scheduler's/healthzendpoint 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 (removedjavascript: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
tracklast_loginandlast_activefor 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 sharedassetPathhelper.
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
- Blog
published a new series of articles about status pages: - What Is a Status Page?
- Status Page vs Uptime Monitoring
- Public vs Private Status Pages
- How Status Pages Reduce Support Tickets
- Email deliverability checks
detect likely-undeliverable registrations and send notifications (dashboard + Telegram). - SSL alert notifications
configurable alert stages and expanded email detail.
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 ofcdn.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-buildfor 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_srcto be provided as either a full URL or just thepa-*.jsfilename (auto-expanded tohttps://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
srcURL/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
/testroutes 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/featurespackage with reusable feature gates system for plan-gated features - Added
templates/user/partials/upgrade_feature.gohtmlreusable partial template for upgrade CTAs - Added
dict,strList, andortemplate 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/:iddeep-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_templatesnapshot. - 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-ywrapper. - All cards now have
shadow-smfor 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-subtlewith 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
newexclude_self_from_analyticsboolean 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_atinto 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'salertOnStatusChange()function, causing the alerts table to remain empty and the/user/monitors/{id}/alertspage 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/:idroute was registered on the root router without session middleware, soGetUserFromContext()returned nil. Added route touserGroupfor 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_atacross DNSBL, SSL, and DKIM/SPF monitors. - Added
SELF_HOSTED_DOMAINSenvironment variable (comma-separated) to configure which domains are self-hosted. Defaults tostatuspage.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/statuspageroute 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_incidentsfeature. - 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_aggregationstable 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
renderUserhelper 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/:idin 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/tokenswith ownership enforcement; routesGET /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.