{"id":280397,"date":"2026-02-13T14:37:57","date_gmt":"2026-02-13T14:37:57","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/lm-monitor\/"},"modified":"2026-04-17T12:20:19","modified_gmt":"2026-04-17T12:20:19","slug":"lukstack-uptime-monitor","status":"publish","type":"plugin","link":"https:\/\/en-ca.wordpress.org\/plugins\/lukstack-uptime-monitor\/","author":23448646,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_crdt_document":"","version":"2.2.1","stable_tag":"2.2.1","tested":"6.9.4","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"LukStack Uptime Monitor","header_author":"Luk Meyer","header_description":"Professional website monitoring plugin for agencies with uptime tracking, SSL monitoring, performance metrics, and instant alerts","assets_banners_color":"ffffff","last_updated":"2026-04-17 12:20:19","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/lukstack-uptime-monitor\/","header_author_uri":"","rating":5,"author_block_rating":0,"active_installs":10,"downloads":401,"num_ratings":2,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"2.0.0":{"tag":"2.0.0","author":"lukmeyer","date":"2026-02-13 14:37:25"},"2.0.1":{"tag":"2.0.1","author":"lukmeyer","date":"2026-02-15 17:46:47"},"2.0.2":{"tag":"2.0.2","author":"lukmeyer","date":"2026-02-17 20:01:03"},"2.1.0":{"tag":"2.1.0","author":"lukmeyer","date":"2026-04-15 17:31:47"},"2.1.1":{"tag":"2.1.1","author":"lukmeyer","date":"2026-04-15 17:53:08"},"2.2.0":{"tag":"2.2.0","author":"lukmeyer","date":"2026-04-17 12:00:54"},"2.2.1":{"tag":"2.2.1","author":"lukmeyer","date":"2026-04-17 12:20:19"}},"upgrade_notice":{"2.2.1":"<p>Fixes a misleading &quot;WordPress Cron is disabled&quot; warning introduced by the 2.2.0 remote cron rollout. Users with DISABLE_WP_CRON set (managed hosts, performance setups) will no longer see a false alarm when the remote cron server is handling their checks. Also fixes a broken &quot;Learn how to fix this&quot; link.<\/p>","2.2.0":"<p>Major improvement: built-in remote cron server (AWS, EU Frankfurt) eliminates the need for external cron services. Reliable monitoring even for low-traffic sites. Auto-registers on activation \u2014 no setup required.<\/p>","2.1.1":"<p>Fixes Freemius SDK configuration for WordPress.org, adds full i18n support, and resolves a duplicate AJAX call bug.<\/p>","2.1.0":"<p>Introduces the Pro plan with faster monitoring, SSL checks, and support for up to 100 websites. Free plan continues to work with up to 2 websites and 15-minute intervals. Freemius SDK added for license management.<\/p>","2.0.2":"<p>Critical fix: monitoring checks now run at the correct interval. Security improvements including XSS and SSRF fixes. Recommended update for all users.<\/p>","2.0.1":"<p>New Dashboard Widget, improved responsive design, and better cron reliability with atomic locking.<\/p>"},"ratings":{"1":0,"2":0,"3":0,"4":0,"5":2},"assets_icons":{"icon-256x256.png":{"filename":"icon-256x256.png","revision":3496974,"resolution":"256x256","location":"assets","locale":""}},"assets_banners":{"banner-772x250.png":{"filename":"banner-772x250.png","revision":3498236,"resolution":"772x250","location":"assets","locale":""}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3508874,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"preferredVersions\":{\"php\":\"8.2\",\"wp\":\"latest\"},\"login\":{\"username\":\"admin\",\"password\":\"password\"},\"landingPage\":\"\\\/wp-admin\\\/admin.php?page=lukstack-uptime-monitor\",\"steps\":[{\"step\":\"installPlugin\",\"options\":{\"activate\":true},\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"lukstack-uptime-monitor\"}}]}"}},"all_blocks":[],"tagged_versions":["2.0.0","2.0.1","2.0.2","2.1.0","2.1.1","2.2.0","2.2.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3461986,"resolution":"1","location":"assets","locale":""},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3461986,"resolution":"2","location":"assets","locale":""},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3461986,"resolution":"3","location":"assets","locale":""},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3461986,"resolution":"4","location":"assets","locale":""},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3461986,"resolution":"5","location":"assets","locale":""}},"screenshots":{"1":"Main dashboard showing all monitored websites with status, response time, and uptime","2":"Adding a new website to monitor","3":"Settings page with webhook configuration","4":"Dashboard widget with quick status overview","5":"Discord notification example","6":"Slack notification example","7":"Help and documentation page"},"jetpack_post_was_ever_published":false},"plugin_section":[],"plugin_tags":[1110,5603,1536,29148,15439],"plugin_category":[54],"plugin_contributors":[255806],"plugin_business_model":[],"class_list":["post-280397","plugin","type-plugin","status-publish","hentry","plugin_tags-alerts","plugin_tags-monitoring","plugin_tags-ssl","plugin_tags-uptime","plugin_tags-webhook","plugin_category-security-and-spam-protection","plugin_contributors-lukmeyer","plugin_committers-lukmeyer"],"banners":{"banner":"https:\/\/ps.w.org\/lukstack-uptime-monitor\/assets\/banner-772x250.png?rev=3498236","banner_2x":false,"banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/lukstack-uptime-monitor\/assets\/icon-256x256.png?rev=3496974","icon_2x":"https:\/\/ps.w.org\/lukstack-uptime-monitor\/assets\/icon-256x256.png?rev=3496974","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/lukstack-uptime-monitor\/assets\/screenshot-1.png?rev=3461986","caption":"Main dashboard showing all monitored websites with status, response time, and uptime"},{"src":"https:\/\/ps.w.org\/lukstack-uptime-monitor\/assets\/screenshot-2.png?rev=3461986","caption":"Adding a new website to monitor"},{"src":"https:\/\/ps.w.org\/lukstack-uptime-monitor\/assets\/screenshot-3.png?rev=3461986","caption":"Settings page with webhook configuration"},{"src":"https:\/\/ps.w.org\/lukstack-uptime-monitor\/assets\/screenshot-4.png?rev=3461986","caption":"Dashboard widget with quick status overview"},{"src":"https:\/\/ps.w.org\/lukstack-uptime-monitor\/assets\/screenshot-5.png?rev=3461986","caption":"Discord notification example"}],"raw_content":"<!--section=description-->\n<p>LukStack Uptime Monitor is a lightweight yet powerful website monitoring solution built for agencies, freelancers, and web professionals who manage multiple websites.<\/p>\n\n<p>Track uptime, response times, and SSL certificate expiration for all your client sites from a single WordPress dashboard. When something goes wrong, you will know immediately through email notifications or webhook integrations with Slack, Discord, and other services.<\/p>\n\n<h4>Reliable Monitoring Out of the Box<\/h4>\n\n<p>Unlike plugins that rely on WordPress Cron (which only runs when someone visits your site), LukStack Uptime Monitor includes a <strong>built-in remote cron server<\/strong> operated by the plugin author and hosted on AWS in the EU (Frankfurt) region. Your site is automatically registered on plugin activation and the server triggers your monitoring checks every minute \u2014 reliably, even on low-traffic sites. No personal data is transmitted. No third-party cron services like cron-job.org or UptimeRobot required.<\/p>\n\n<h4>Free Plan Features<\/h4>\n\n<ul>\n<li><strong>Uptime Monitoring<\/strong> - Automatic checks every 15 minutes<\/li>\n<li><strong>Monitor up to 2 websites<\/strong><\/li>\n<li><strong>Webhook Support<\/strong> - Native integration with Slack, Discord, Microsoft Teams, and generic webhooks<\/li>\n<li><strong>Manual Checks<\/strong> - Test any site instantly with one click<\/li>\n<li><strong>Dashboard Widget<\/strong> - Quick status overview right on your WordPress dashboard<\/li>\n<\/ul>\n\n<h4>Pro Plan Features<\/h4>\n\n<ul>\n<li><strong>Everything in Free<\/strong><\/li>\n<li><strong>Monitor up to 100 websites<\/strong><\/li>\n<li><strong>5 minute check interval<\/strong> for faster downtime detection<\/li>\n<li><strong>SSL Certificate Monitoring<\/strong> - Get warned before certificates expire<\/li>\n<li><strong>Website Performance Tracking<\/strong> - Monitor response times with millisecond precision<\/li>\n<\/ul>\n\n<h4>Who Is This For?<\/h4>\n\n<ul>\n<li><strong>Web Agencies<\/strong> managing client websites<\/li>\n<li><strong>Freelancers<\/strong> maintaining multiple projects<\/li>\n<li><strong>Site Owners<\/strong> who want peace of mind<\/li>\n<li><strong>DevOps Teams<\/strong> needing a simple monitoring solution<\/li>\n<\/ul>\n\n<h4>How It Works<\/h4>\n\n<ol>\n<li>Add a website URL to monitor<\/li>\n<li>LukStack Uptime Monitor checks the site automatically<\/li>\n<li>If the site goes down or returns an error, you get notified<\/li>\n<li>When the site recovers, you get a recovery notification<\/li>\n<\/ol>\n\n<h4>Webhook Integrations<\/h4>\n\n<p>LukStack Uptime Monitor automatically formats notifications for popular services:<\/p>\n\n<ul>\n<li><strong>Slack<\/strong> - Rich message attachments with color-coded severity<\/li>\n<li><strong>Discord<\/strong> - Embedded messages with status information<\/li>\n<li><strong>Microsoft Teams<\/strong> - Via generic webhook connector<\/li>\n<li><strong>Zapier \/ Make<\/strong> - JSON payload for custom automations<\/li>\n<\/ul>\n\n<h4>Privacy<\/h4>\n\n<p>LukStack Uptime Monitor stores the URLs you choose to monitor and their status data. No personal information (admin emails, user accounts, site content) is collected by the plugin itself.<\/p>\n\n<p>The plugin does transmit data to the following external services:<\/p>\n\n<ul>\n<li><strong>LukStack Cron Server<\/strong> (operated by the plugin author, hosted on AWS EU Frankfurt) \u2014 receives your site URL and a locally generated shared secret on plugin activation, then triggers monitoring checks on your site every minute. See the External services section below for details.<\/li>\n<li><strong>Freemius<\/strong> (license management and opt-in usage tracking) \u2014 anonymized data only when you explicitly opt in. See https:\/\/freemius.com\/privacy\/<\/li>\n<li><strong>Webhook URLs<\/strong> (Slack, Discord, etc.) \u2014 only when you configure them and only when a monitored site changes status.<\/li>\n<\/ul>\n\n<p>All external transmissions are described in detail in the External services section below.<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to external services as part of its core monitoring functionality. Below is a description of each service, what data is sent, and when.<\/p>\n\n<h4>Monitored Websites<\/h4>\n\n<p>LukStack Uptime Monitor sends HTTP requests to the website URLs you add for monitoring. This is the core functionality of the plugin and is required to check uptime and response times. An SSL connection on port 443 is also made to check the SSL certificate expiration date for HTTPS sites (Pro). These requests are sent automatically by the built-in cron server (see below) and when you manually click \"Check now\". The data sent is a standard HTTP GET request with a custom user agent header. No personal data is transmitted.<\/p>\n\n<h4>LukStack Cron Server<\/h4>\n\n<p>This plugin connects to the LukStack cron server to ensure reliable monitoring checks even when your WordPress site has no visitors. Because no dedicated privacy policy URL is published for this service, the full data-handling details are documented below.<\/p>\n\n<p><strong>Service operator<\/strong><\/p>\n\n<p>Operated by Luk Meyer (plugin author). Contact: via the WordPress.org support forum for this plugin (https:\/\/wordpress.org\/support\/plugin\/lukstack-uptime-monitor\/).<\/p>\n\n<p><strong>Hosting and location<\/strong><\/p>\n\n<p>Hosted on Amazon Web Services (AWS), region eu-central-1 (Frankfurt, Germany). Data does not leave the EU. The service uses AWS Lambda, AWS DynamoDB, and AWS EventBridge Scheduler. AWS acts as a data processor under a standard data processing agreement.<\/p>\n\n<p>Server endpoint: https:\/\/gt5zheubf8.execute-api.eu-central-1.amazonaws.com<\/p>\n\n<p><strong>What data is transmitted FROM your site TO the cron server<\/strong><\/p>\n\n<p>On plugin activation and when an admin visits the WordPress admin (throttled to at most once per hour):<\/p>\n\n<ul>\n<li>Your site URL (value of WordPress home_url())<\/li>\n<li>A 48-character shared secret, randomly generated on your site, stored in your own wp_options table. This secret is used only to authenticate incoming trigger requests. It is not a WordPress password or account credential.<\/li>\n<li>The plugin version (e.g. \"2.2.0\")<\/li>\n<\/ul>\n\n<p>No personal data, no admin email, no user account information, no site content, no visitor data, and no credentials are transmitted.<\/p>\n\n<p><strong>What data is transmitted FROM the cron server TO your site<\/strong><\/p>\n\n<p>Every minute, the cron server sends an HTTP POST request to the REST endpoint \/wp-json\/lukstack\/v1\/trigger on your site, authenticated via the X-LukStack-Secret header. The request body is empty. The sole purpose of this request is to trigger the plugin's internal monitoring logic.<\/p>\n\n<p><strong>What data is stored on the cron server<\/strong><\/p>\n\n<ul>\n<li>Site URL<\/li>\n<li>Shared secret (needed to authenticate triggers \u2014 transmitted over HTTPS only)<\/li>\n<li>A SHA-256 hash of the site URL used as record key<\/li>\n<li>Plan type (Free or Pro) \u2014 used to gate trigger frequency server-side<\/li>\n<li>Timestamps: registration time, last successful trigger, last failed trigger, consecutive failure counter<\/li>\n<li>Last error message if any<\/li>\n<\/ul>\n\n<p>No logs of monitored sites, no uptime data, no visitor data, no personal data.<\/p>\n\n<p><strong>Data retention<\/strong><\/p>\n\n<p>Data is kept only as long as the plugin is installed on your site. When the plugin is deleted from your WordPress installation, the site is marked inactive on the cron server after approximately 100 consecutive failed trigger attempts (about 100 minutes) and no further requests are sent. Inactive records may be purged periodically.<\/p>\n\n<p><strong>Your rights and how to exercise them<\/strong><\/p>\n\n<p>You can at any time:<\/p>\n\n<ul>\n<li>Disable the remote cron by deactivating the plugin \u2014 triggers stop, but the record remains until auto-expiry.<\/li>\n<li>Request deletion of your site's record by posting in the plugin's WordPress.org support forum with your site URL (or a hash of it). Records are typically deleted within 7 days of a confirmed request.<\/li>\n<li>Rotate the shared secret by re-registering (the settings page exposes a \"Force re-register now\" button when WP_DEBUG is enabled in your wp-config.php).<\/li>\n<\/ul>\n\n<p><strong>Security<\/strong><\/p>\n\n<ul>\n<li>All transmissions are over HTTPS (TLS).<\/li>\n<li>Incoming triggers to your site are validated using hash_equals() (constant-time comparison) to prevent timing attacks.<\/li>\n<li>The shared secret is stored with autoload disabled and is not exposed in the admin UI unless WP_DEBUG is enabled.<\/li>\n<\/ul>\n\n<p><strong>Legal basis (GDPR)<\/strong><\/p>\n\n<p>The processing described above is necessary for the performance of the service you enabled by installing this plugin (Art. 6 (1) (b) GDPR). Only technical identifiers (URL, secret, timestamps) are processed; no special categories of personal data are involved.<\/p>\n\n<h4>Freemius<\/h4>\n\n<p>This plugin uses Freemius SDK for license management, usage tracking (opt-in only), and the upgrade flow. When a user opts in, anonymized data such as the site URL, WordPress version, PHP version, and plugin version may be sent to Freemius servers. Users can opt out at any time.<\/p>\n\n<p>This service is provided by Freemius, Inc.\nTerms of Service: https:\/\/freemius.com\/terms\/\nPrivacy Policy: https:\/\/freemius.com\/privacy\/<\/p>\n\n<h4>Slack (optional)<\/h4>\n\n<p>If you configure a Slack webhook URL in the plugin settings, LukStack Uptime Monitor sends POST requests to the Slack Incoming Webhooks API when a monitored site changes status (goes down, recovers, or has SSL issues). The data sent includes the website URL, its status, response time, and a timestamp. No personal data is transmitted.<\/p>\n\n<p>This service is provided by Slack Technologies, LLC \/ Salesforce, Inc.\nTerms of Service: https:\/\/slack.com\/terms-of-service\nPrivacy Policy: https:\/\/slack.com\/privacy-policy<\/p>\n\n<h4>Discord (optional)<\/h4>\n\n<p>If you configure a Discord webhook URL in the plugin settings, LukStack Uptime Monitor sends POST requests to the Discord Webhooks API when a monitored site changes status. The data sent includes the website URL, its status, response time, and a timestamp. No personal data is transmitted.<\/p>\n\n<p>This service is provided by Discord, Inc.\nTerms of Service: https:\/\/discord.com\/terms\nPrivacy Policy: https:\/\/discord.com\/privacy<\/p>\n\n<h4>Generic Webhooks (optional)<\/h4>\n\n<p>You may configure any third-party webhook URL (e.g. Microsoft Teams, Zapier, Make, or a custom endpoint). When a monitored site changes status, a POST request with a JSON payload is sent to that URL. The data sent includes the website URL, its status, response time, and a timestamp. No personal data is transmitted. Please refer to the terms of service and privacy policy of the respective service you configure.<\/p>\n\n<h3>Additional Information<\/h3>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 5.8 or higher<\/li>\n<li>PHP 7.4 or higher<\/li>\n<li>PHP extensions: curl, openssl, json<\/li>\n<\/ul>\n\n<h4>Support<\/h4>\n\n<p>For support questions, please use the WordPress.org support forum for this plugin.<\/p>\n\n<h4>Credits<\/h4>\n\n<p>Developed by Luk Meyer.<\/p>\n\n<!--section=installation-->\n<h4>Automatic Installation<\/h4>\n\n<ol>\n<li>Go to Plugins &gt; Add New in your WordPress admin<\/li>\n<li>Search for \"LukStack Uptime Monitor\"<\/li>\n<li>Click \"Install Now\" and then \"Activate\"<\/li>\n<\/ol>\n\n<h4>Manual Installation<\/h4>\n\n<ol>\n<li>Download the plugin ZIP file<\/li>\n<li>Go to Plugins &gt; Add New &gt; Upload Plugin<\/li>\n<li>Select the ZIP file and click \"Install Now\"<\/li>\n<li>Activate the plugin<\/li>\n<\/ol>\n\n<h4>After Activation<\/h4>\n\n<ol>\n<li>Go to LukStack in the admin menu<\/li>\n<li>Add your first website URL<\/li>\n<li>(Optional) Configure webhook notifications in Settings<\/li>\n<li>Click \"Check now\" to verify monitoring is working<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"how%20many%20websites%20can%20i%20monitor%3F\"><h3>How many websites can I monitor?<\/h3><\/dt>\n<dd><p>The free version supports up to 2 websites. The Pro plan supports up to 100 websites.<\/p><\/dd>\n<dt id=\"how%20often%20are%20websites%20checked%3F\"><h3>How often are websites checked?<\/h3><\/dt>\n<dd><p>The free plan checks every 15 minutes. The Pro plan checks every 5 minutes for faster downtime detection.<\/p><\/dd>\n<dt id=\"can%20i%20monitor%20ssl%20certificates%3F\"><h3>Can I monitor SSL certificates?<\/h3><\/dt>\n<dd><p>SSL certificate monitoring is available in the Pro plan. You will receive warnings when a certificate is within 30 days of expiring, with critical alerts at 7 days.<\/p><\/dd>\n<dt id=\"why%20does%20my%20site%20show%20as%20down%20when%20it%20is%20actually%20online%3F\"><h3>Why does my site show as DOWN when it is actually online?<\/h3><\/dt>\n<dd><p>This can happen if:<\/p>\n\n<ul>\n<li>Your site blocks automated requests or specific user agents<\/li>\n<li>A firewall or security plugin is blocking the monitoring server<\/li>\n<li>The site requires authentication<\/li>\n<li>There are geographic restrictions<\/li>\n<\/ul>\n\n<p>Try adding your monitoring server IP to any whitelist or firewall rules.<\/p><\/dd>\n<dt id=\"will%20this%20slow%20down%20my%20wordpress%20site%3F\"><h3>Will this slow down my WordPress site?<\/h3><\/dt>\n<dd><p>No. The monitoring checks run in the background, triggered by the remote cron server every minute (with plan-gated intervals). The actual HTTP checks run asynchronously and do not affect your site frontend performance.<\/p><\/dd>\n<dt id=\"can%20i%20monitor%20non-wordpress%20sites%3F\"><h3>Can I monitor non-WordPress sites?<\/h3><\/dt>\n<dd><p>Yes. LukStack Uptime Monitor can monitor any publicly accessible website, regardless of the platform.<\/p><\/dd>\n<dt id=\"how%20do%20i%20set%20up%20slack%20notifications%3F\"><h3>How do I set up Slack notifications?<\/h3><\/dt>\n<dd><ol>\n<li>Create an Incoming Webhook in your Slack workspace<\/li>\n<li>Copy the webhook URL<\/li>\n<li>Paste it into LukStack &gt; Settings &gt; Webhook URL<\/li>\n<li>Click \"Send Test Notification\" to verify<\/li>\n<\/ol><\/dd>\n<dt id=\"how%20do%20i%20set%20up%20discord%20notifications%3F\"><h3>How do I set up Discord notifications?<\/h3><\/dt>\n<dd><ol>\n<li>Go to your Discord server settings<\/li>\n<li>Navigate to Integrations &gt; Webhooks<\/li>\n<li>Create a new webhook and copy the URL<\/li>\n<li>Paste it into LukStack &gt; Settings &gt; Webhook URL<\/li>\n<\/ol><\/dd>\n<dt id=\"why%20are%20automatic%20checks%20not%20running%3F\"><h3>Why are automatic checks not running?<\/h3><\/dt>\n<dd><p>This plugin uses a built-in remote cron server (hosted on AWS, EU Frankfurt) that automatically triggers checks on your site every minute. No setup is required; your site is registered automatically on plugin activation. If checks are not running, verify that:<\/p>\n\n<ul>\n<li>Your site is publicly reachable (the cron server cannot trigger sites behind basic auth, IP whitelists, or private networks)<\/li>\n<li>Your firewall or security plugin is not blocking the user agent <code>LukStack-Cron-Runner<\/code><\/li>\n<li>The plugin is up to date<\/li>\n<\/ul>\n\n<p>WordPress Cron remains scheduled as a fallback, so checks will also run when visitors hit your site.<\/p><\/dd>\n<dt id=\"can%20i%20monitor%20localhost%20or%20internal%20sites%3F\"><h3>Can I monitor localhost or internal sites?<\/h3><\/dt>\n<dd><p>No. For security reasons, localhost (127.0.0.1) and private IP ranges are blocked from monitoring.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20send%20any%20data%20externally%3F\"><h3>Does this plugin send any data externally?<\/h3><\/dt>\n<dd><p>The plugin makes outbound requests to:<\/p>\n\n<ul>\n<li>The websites you choose to monitor (to check their status)<\/li>\n<li>The LukStack cron server (hosted on AWS EU Frankfurt) \u2014 site URL and shared secret on registration, then an authenticated trigger every minute<\/li>\n<li>Your configured webhook URL (to send notifications, if configured)<\/li>\n<li>Freemius servers for license management (opt-in only)<\/li>\n<\/ul>\n\n<p>The plugin also receives incoming requests on its REST endpoint (\/wp-json\/lukstack\/v1\/trigger) from the LukStack cron server, authenticated by a shared secret. See the External services section for full details.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>2.2.1<\/h4>\n\n<ul>\n<li>FIXED: Misleading \"WordPress Cron is disabled\" warning on the main plugin page \u2014 it now only appears when both the remote cron server is unregistered AND WordPress Cron is disabled, i.e. when monitoring actually cannot run<\/li>\n<li>FIXED: Broken \"Learn how to fix this\" link that pointed to a removed help-page anchor \u2014 now links to the settings page where the remote cron status and re-register button live<\/li>\n<li>FIXED: Stale admin notice that suggested setting up an external cron job \u2014 now reflects the built-in remote cron as the primary trigger mechanism<\/li>\n<li>IMPROVED: Main page now shows \"Automatic checks run every X minutes via the LukStack remote cron server\" when registration is active, and clearly labels the WP Cron time as \"fallback\" when it is not<\/li>\n<\/ul>\n\n<h4>2.2.0<\/h4>\n\n<ul>\n<li>NEW: Built-in remote cron server (AWS, EU Frankfurt) \u2014 reliable monitoring without third-party cron services like cron-job.org or UptimeRobot<\/li>\n<li>NEW: Sites are automatically registered with the LukStack cron server on plugin activation and admin access<\/li>\n<li>NEW: Monitoring is triggered externally every minute \u2014 works even when no visitors hit your WordPress site<\/li>\n<li>NEW: Secure REST API endpoint (\/wp-json\/lukstack\/v1\/trigger) authenticated with a locally generated 48-character shared secret<\/li>\n<li>NEW: Help &amp; Info page rewritten to document the new cron architecture<\/li>\n<li>IMPROVED: Plan interval gating (Free 15 min \/ Pro 5 min) still applies \u2014 surplus triggers become cheap no-ops<\/li>\n<li>SECURITY: Shared-secret authentication uses hash_equals() for constant-time comparison, preventing timing attacks<\/li>\n<li>SECURITY: Remote cron secret is stored with autoload=false and never exposed in the admin UI (except with WP_DEBUG enabled)<\/li>\n<\/ul>\n\n<h4>2.1.1<\/h4>\n\n<ul>\n<li>Fixed Freemius SDK configuration for WordPress.org compliance<\/li>\n<li>Full internationalization (i18n) for all admin pages, settings, and help documentation<\/li>\n<li>Fixed deprecated current_time() usage in dashboard widget<\/li>\n<li>Fixed duplicate bulk-check event handler causing double AJAX calls<\/li>\n<li>Improved JavaScript localization for settings and admin scripts<\/li>\n<\/ul>\n\n<h4>2.1.0<\/h4>\n\n<ul>\n<li>Added Freemius SDK integration for license management and opt-in usage analytics<\/li>\n<li>Added Pro plan with 5-minute check interval, SSL monitoring, performance tracking, and up to 100 websites<\/li>\n<li>Free plan now supports up to 2 websites with 15-minute check interval<\/li>\n<li>Added deactivation feedback dialog to better understand user needs<\/li>\n<li>Improved uninstall handling via Freemius after_uninstall hook<\/li>\n<\/ul>\n\n<h4>2.0.2<\/h4>\n\n<ul>\n<li>Fixed critical timezone mismatch causing monitoring checks to run every ~70 minutes instead of every 5 minutes<\/li>\n<li>Fixed XSS vulnerability in webhook test response handling<\/li>\n<li>Improved SSRF protection with DNS rebinding prevention<\/li>\n<li>Fixed database format string mismatch in status update function<\/li>\n<li>Improved SQL security with prepared statements and esc_like() for all queries<\/li>\n<li>Removed redundant nonce\/capability checks in AJAX helper function<\/li>\n<li>Consolidated statistics queries from 5 separate queries into 1 for better performance<\/li>\n<\/ul>\n\n<h4>2.0.1<\/h4>\n\n<ul>\n<li>Added Dashboard Widget for quick website status overview<\/li>\n<li>Improved responsive design with 3 breakpoints (1024px, 782px, 600px)<\/li>\n<li>Improved mobile card-style table layout<\/li>\n<li>Improved cron locking with atomic database-based approach<\/li>\n<li>Improved code quality (variable naming, CSS organization)<\/li>\n<\/ul>\n\n<h4>2.0.0<\/h4>\n\n<ul>\n<li>Initial public release<\/li>\n<li>Uptime monitoring with automatic intervals<\/li>\n<li>Response time tracking<\/li>\n<li>SSL certificate expiration monitoring<\/li>\n<li>Email notifications for status changes<\/li>\n<li>Webhook support for Slack, Discord, and generic endpoints<\/li>\n<li>Per-site notification email configuration<\/li>\n<li>Manual check functionality<\/li>\n<li>Bulk check all sites<\/li>\n<li>Uptime percentage tracking<\/li>\n<li>Comprehensive help documentation<\/li>\n<li>Full internationalization support<\/li>\n<\/ul>","raw_excerpt":"Monitor multiple websites for uptime, performance, and SSL certificate expiration. Built-in remote cron for reliable checks \u2014 no third-party services  &hellip;","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/280397","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=280397"}],"author":[{"embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/lukmeyer"}],"wp:attachment":[{"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=280397"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=280397"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=280397"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=280397"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=280397"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/en-ca.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=280397"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}