# LMN Site Monitor

**Version:** 0.8.1  
**Author:** [Francisco Moreno](https://fcomoreno.net)  
**License:** GPLv3  
**Compatible with:** PHP 8.3+, WordPress 6.9+

A lightweight WordPress uptime and SSL monitoring plugin with email alerts, latency tracking, and dashboard widget.

---

### Description

**LMN Site Monitor** is a lightweight WordPress monitoring plugin that keeps track of your websites and alerts you when something goes wrong.

Monitor uptime, SSL certificate expiration, and response time directly from your WordPress dashboard — no external SaaS required.

**Key features**

- Uptime monitoring (HTTP/HTTPS) with configurable intervals.
- SSL certificate expiration checks with full SNI support.
- Domain expiry notifications.
- Response latency tracking.
- Automatic retry after downtime to avoid false positives.
- Instant HTML email alerts (with automatic dark mode support).
- Dashboard widget with customizable monitor limits.
- CSV export of monitoring results.

LMN Site Monitor is designed to be fast, accessible, and WordPress-native — giving you essential monitoring tools without unnecessary complexity.
Learn more at LMN Site Monitor official page: [https://lumina.fmkr.net/site-monitor/](https://lumina.fmkr.net/site-monitor/)

---

### Screenshots

1. Main dashboard without added sites
2. Dashboard with three sites added
3. Dashboard showing a down site and an alert sending error message
4. Email alert settings tab
5. Setting up an external SMTP
6. About LMN Site Monitor tab
7. Changelog tab
8. Dashboard in dark mode
9. Desktop widget

### Localization

This plugin is fully translatable and currently includes base translations for:

- English (en_US)
- Spanish (es_ES)
- Catalan (ca)
- French (fr_FR)
- Arabic (ar)
- German (DE)
- Basque (eu)
- Italian (it_IT)
- Japanese (ja)
- Korean (ko_KR)
- Dutch (nl_NL)
- Portuguese (pt_PT)
- Turkish (tr_TR)
- Ukrainian (uk)
- Simplified Chinese (zh_CN)

If you would like to contribute a new translation, you can do so via WordPress.org’s translation platform.

### Installation

1. Upload the ZIP to WordPress from “Plugins > Add New”.
2. Activate “LMN Site Monitor”.
3. Add your websites from the “Site Monitor” panel in the main menu.

---

== Changelog ==

================================  
Version: 2026-03-14 — v0.8.1

- FIX: Fix translation errors.

================================  
Version: 2026-03-14 — v0.8.0

- NEW: New languages: Arabic, German, Basque, Italian, Japanese, Korean, Dutch, Portuguese, Turkish, Ukrainian, and Simplified Chinese.
- NEW: Automatic retry after downtime to avoid false positives.
- NEW: Domain expiry notifications.
- MAINT: i18n maintained; PHPCS/WPCS compliant.

================================  
Version: 2026-03-03 — v0.7.0

- NEW: Cards are now wider, displaying more information at a glance.
- NEW: Bulk actions now include sorting options: alphabetical (A→Z) and by date added.
- NEW: Drag-and-drop card reordering with persistent storage between sessions.
- NEW: Pin system — pin any site to keep it fixed at the top, excluded from sorting.
- NEW: WHOIS / DNS lookup button on each card: shows IP, DNS provider, NS, MX records, TTL and SSL expiry. Native PHP only, no external APIs or API keys required.
- NEW: JetBrains Mono font integrated for monospace elements, self-hosted (GDPR-safe, no external CDN).
- IMPROVE: Full PHPCS / WPCS compliance — zero warnings. Proper nonce and capability checks, sanitization and escaping throughout.
- IMPROVE: All new strings are fully translatable and i18n-compatible.
- IMPROVE: Responsive design preserved and refined across all screen sizes.
- FIX: Removed duplicate `wp_mail_failed` hook and unified error handlers.
- FIX: Native WP cron schedules (`hourly`, `daily`) are no longer overwritten.
- FIX: Added `file_exists()` check before reading `changelog.txt`.
- FIX: Added missing `wp_unslash()` in widget preferences handler.
- FIX: SSL badge severity now syncs with the user-configured expiry threshold.
- FIX: PHPCS `MissingTranslatorsComment` resolved in alert email builders.
- IMPROVE: Removed dead `load_textdomain()` method.
- IMPROVE: Fixed inconsistent indentation in `ajax_save_order`.

================================  
Version: 2025-10-31 — v0.6.5

- NEW: Full internationalization (en_US, es_ES, ca, fr_FR).
- NEW: Added Catalan (ca) and French (fr_FR) translations.
- IMPROVE: Hybrid textdomain loader – automatically loads WP.org language packs and falls back to /languages for ZIP installs.
- FIX: Added translators comments for all placeholders to comply with WordPress I18n standards.
- FIX: Escaped all dynamic outputs in admin interface and header tips.
- MAINT: Removed deprecated load_plugin_textdomain() function per Plugin Check recommendations.

================================  
Version: 2025-10-25 — v0.6.4

- Full sanitization and 0 warnings
- All PHPCS/WPCS warnings removed.
- Full sanitization and reordered nonce verification.
- PHP 8.3+ and WordPress 6.8.3+ compatibility.

================================  
Version: 2025-10-16 — v0.6.3

UI:

- FIX: Unique IDs in forms (nonces and submit buttons).
- FIX: Console warnings removed for duplicated #\_wpnonce and #submit IDs.
- IMPROVE: Accessibility and DOM structure of the admin panel.

Maintenance:

- Version bumped to v0.6.3.

================================  
Version: 2025-10-15 — v0.6.2

UI:

- IMPROVE: Unified blue header (h2.hndle) with v0.6.2 badge.
- ADD: Lightweight Markdown rendering (titles, lists, **bold**, `code`, separators).
- KEEP: Consistent padding and structure (.postbox.lm-card > h2.hndle + .inside).

Maintenance:

- Version bumped to v0.6.2.

================================  
Version: 2025-10-15 — v0.6.1

UI:

- NEW: “Changelog” tab with direct reading of `changelog.txt`.
- IMPROVE: Body with clean background, better padding, and improved typographic rhythm.
- IMPROVE: Lightweight Markdown rendering: **bold**, `code`, titles (# ## ###), and highlighted list prefixes (NEW, FIX, IMPROVE…).

Maintenance:

- Version bumped to v0.6.1.

===========================================  
Version: 2025-10-14

Functional:

- SMTP working: form aligned with real keys (`smtp_*`) and authentication.
- Preserves SMTP password if left empty (not overwritten).
- Compatible with Gmail (app passwords) and Office 365.

UI:

- Listing replaced by responsive card grid (auto-fit/minmax).
- “OK” status (green/white text) and “Down” (red/white text).
- Down sites highlighted with red border + soft pulse (respects reduced motion).
- Inline styles cleaned → CSS moved to `assets/admin-theme.css`.

Maintenance:

- Nonces and handlers verified; no changes in cron or checking logic.
- CSV import/export and bulk actions unchanged.

===========================================  
2025-10-07 — v0.6.0

- NEW: CSV import using the same format as export (adds URLs without removing existing ones).
- NEW: Bulk actions in list (Delete selected) using standard WordPress handlers.
- IMPROVE: Listing UI: master checkbox, batch action bar, and confirmations.
- IMPROVE: Error handling and post-action messages for imports or batch actions.

===========================================  
2025-10-06 — v0.5.3

- NEW: CSV export from the “About Site Monitor” section.
- NEW: “About Site Monitor” section with quick metrics and cron status.
- IMPROVE: Minor cleanup in headers and constants (VERSION).

===========================================  
2025-10-06 — v0.5.2

- NEW: “About Site Monitor” box in the right column of the admin area.

===========================================  
2025-10-06 — v0.5.1

- CHANGE: Default light HTML email + automatic dark mode via `prefers-color-scheme`.

===========================================  
2025-10-06 — v0.5.0

- NEW: HTML alert email with badges, detail table, and action buttons.
- NEW: User preference in dashboard widget (number of sites displayed).
- IMPROVE: Classic UI improved (light/dark themes, responsive tables and forms).
- FIX: Text contrast in dark theme (labels, cells, and descriptions).

===========================================  
2025-10-05 — v0.4.0

- NEW: Admin page with listing, quick actions, and settings.
- NEW: HTTP and SSL expiry checks with email alerts.
- NEW: Configurable cron (5 min, 15 min, hourly, daily) and “force check” option.
