Self-Hosted · Source-Available · Free for Personal Use

Introducing Applegate Monitor — Know Before Your Users Do

A self-hosted, multi-tenant status and uptime monitoring platform for websites, mail servers, DNS, VPN, IoT devices, and TP-Link Omada networks.

By Richard Applegate · 🚀 v3.4.0 · 🌐 Live Demo · 📦 GitHub
uptime.richardapplegate.io — Live Status Dashboard
🔌 WireGuard Gateway 50.191.288.169 176d
● UP
📊 Grafana grafana.richardapplegate.io 176d
● UP
🌐 Web Server richardapplegate.io 176d
● UP
📍 Richard's Pi #2 at Home 10.0.0.11
● UP
🧭 Applegate DNS Server #1 10.0.0.2
● UP
🚀 What's New — v3.4.0

v3.4.0Simplified back to single-server — the HA/auto-failover feature was fully removed. The operational cost (bidirectional MariaDB replication, promote webhook, split-brain guard, Cloudflare Load Balancer) was out of proportion for a self-hosted monitor. Core app behaviour is identical — no migration, no config changes, no downtime to upgrade.

v3.3.5Semver version-check fix — admin UI no longer incorrectly flags a newer local build as "update available." Switched to proper numeric semver comparison. Also hardens the promote script with auto-detection of Portainer-managed containers.

v3.3.2GET /health endpoint — unauthenticated liveness probe returning DB reachability, poll-loop freshness, uptime, and server count. Returns 200 / 503 — compatible with Cloudflare LB, AWS ALB, and any HTTP uptime monitor.

v3.3.1Security patch 🔒 — ReDoS-safe subscribe endpoint, API key names HTML-escaped, key storage upgraded to HMAC-SHA256. Read the full release notes →

What Is Applegate Monitor?

Applegate Monitor is a self-hosted, multi-tenant status and uptime monitoring platform built by Richard Applegate. It gives you a clear, real-time picture of every service you run — websites, mail servers, DNS, VPN endpoints, IoT devices, and network gear — all from a single deployment. No SaaS. No monthly fees. Your data on your server.

One install serves unlimited branded status pages, each with its own logo, color scheme, slug, and even a custom domain. Whether you're running a homelab, a small-business network, or managing infrastructure for multiple clients, Applegate Monitor is designed to alert you before your customers do.

8 Built-In Check Types

Every server can run one or more checks simultaneously. All checks record response time per poll, so you can spot degradation before it becomes downtime.

📡

ICMP Ping

Classic ping check with round-trip latency — the fastest way to confirm a host is reachable.

🔌

TCP / UDP Ports

Raw port probes for custom services, databases, or WireGuard VPN endpoints (e.g. UDP 51820).

🌐

HTTP / HTTPS

Full HTTP requests with status-code validation, response time, SSL certificate tracking, and optional keyword body match (contains / not_contains).

🧭

DNS Record

Resolves A, AAAA, CNAME, MX, TXT, or NS records with optional expected-value assertions.

📶

Omada Gateway

Live WAN status, link speed, uptime, and WAN IP from TP-Link Omada SDN controllers (Open API v6).

📱

Omada LTE

Cellular / LTE backup WAN monitoring on Omada gateways — know when your failover is live.

🖧

Omada Devices

Monitor individual access points and switches by MAC address — track connectivity and device health across your Omada SDN fabric.

🟧

Square POS

Monitor Square POS locations for ACTIVE status and online device count. Centralized account management — store credentials once, reference by ID across all checks.

Multi-Tenant Branded Dashboards

This is where Applegate Monitor stands apart from typical uptime tools. From a single deployment you can spin up unlimited branded status pages — each with its own logo, accent color, background, subtitle, slug, and even a fully custom domain.

Viewers assigned to a dashboard see only the servers in their group. Other dashboards — and the servers on them — are completely invisible. Admins see a master view across every group.

/dashboard/anthem
Anthem Coffee
Tacoma POS🔒 74d● UP
Puyallup Wi-Fi🔒 112d● UP
Point Ruston LTE🔒 12d● UP
/dashboard/homelab
Homelab
NAS🔒 58d● UP
Plex🔒 201d● UP
WireGuard🔒 89d● UP
status.clientco.com
Client Co (custom domain)
API🔒 64d● UP
Mail🔒 47d● UP
CDN🔒 156d● UP

Add a Custom Domain to a group and point DNS at your server — the app reads the Host header and serves the correctly branded dashboard automatically.

Built-In Platform Features

Real-Time Updates (SSE)

Server-Sent Events push live status changes to every open browser. No polling, no refresh.

🪝

Webhook Alerts

Discord, Slack, Teams, Telegram, Pushover, Email, or Generic JSON — auto-detected from the URL. Test button built in.

🔒

SSL Cert Tracking

Automatic TLS expiry detection on every HTTPS check, with days-remaining shown on the server detail view.

📊

Uptime History

24h / 7d / 30d uptime percentages, 24-hour response-time chart, and a 90-check heartbeat bar.

👥

Role-Based Access

Admin and Viewer roles with per-group scoping — viewers can edit their own servers but never see others'.

🌑

Dark Mode UI

Clean, focused dark UI tested on iOS, Android, and desktop — optimized for operators who live in terminal windows and dashboards.

📋

Admin Audit Log

Every admin action — logins, server/user/group changes, password resets — is recorded with timestamp, identity, and IP. Filterable with pagination.

💾

Backup & Restore

Single-transaction MariaDB dumps with gzip compression and auto-pruning. Cron-compatible backup script with a confirmation-gated restore.

🔑

Google OAuth Login

Sign in with Google — credentials stored securely in the database with CSRF protection. Local login still available.

👤

User Profiles

First name, last name, and email fields on every account. Admins can manage all profiles from the user administration panel.

🗂️

Dashboard Sub-sections

Organize servers into a two-level hierarchy — Sections and Sub-sections — with collapsible headings for clean, scalable dashboards.

🔍

Server Search

Live filtering by name, host, section, sub-section, or description — available in both the main dashboard and admin drawer.

📂

Collapsible Groups

Collapse or expand dashboard group headers with a smooth chevron animation. Preference persists across page reloads via localStorage.

🔴

Heartbeat Incident Modal

Click any red heartbeat indicator to instantly see all matching incidents within a ±90-second window — quick incident history without leaving the dashboard.

📝

Server Descriptions

Add a description to any server — shown on the dashboard card below the server name and in the admin sidebar as a third line for quick context.

📱

Mobile Hamburger Nav

All topbar nav items collapse into a clean dropdown at ≤1100px — fully usable on phones and tablets without a cramped header.

🌍

Proxy-Aware Routing

Custom-domain routing works reliably behind Cloudflare Tunnel, Caddy, nginx, and other reverse proxies via multi-source hostname detection.

🔐

Per-Dashboard Credentials

Share Square accounts with specific dashboards via an "Allowed Dashboards" selector — viewers only see credentials scoped to their groups.

🔎

HTTP Keyword Body Check

Assert that an HTTP response body contains or not_contains a specific string — catches maintenance-mode pages that silently return 200 with error content.

📖

Per-Server Runbooks

Attach a markdown runbook to any server. When it goes down or degrades, the runbook appears in the detail panel for logged-in users — no more hunting for recovery steps mid-incident.

📧

Weekly Uptime Report Email

Automated uptime summary email every Monday at 09:00 UTC covering all your servers. A manual "Send Now" button is available in the admin panel whenever you need it.

Embeddable Status Badges

Drop live SVG badges into your READMEs, docs, or internal dashboards — no third-party service, no rate limits, no sign-up. Badge URLs are generated right inside the server edit form for easy copying.

# Available badges: /api/badge/:id/status # Up / Down / Degraded /api/badge/:id/uptime?duration=24h # Uptime % (24h, 7d, 30d) /api/badge/:id/ping # Latest response time /api/badge/:id/cert-exp # SSL certificate expiry

Color thresholds are sensible out of the box — uptime green ≥ 99%, yellow ≥ 95%, red below — and every parameter (label, value text, warn/down days) is overridable via query string.

Why It Matters

Most people only find out their website went down when a friend texts them — or worse, when a customer complains. Downtime costs trust, and trust is hard to rebuild. Applegate Monitor flips that dynamic: you get the alert, you investigate, and you fix it before it becomes a headline.

Unlike heavyweight platforms that require cloud accounts or charge per-monitor fees, Applegate Monitor is fully self-hosted. Your monitoring data stays on your machine, on your terms. No external dependency. No subscription.

Who Is It For?

🏠

Homelab Enthusiasts

Self-host alongside your existing Docker stack and get a consolidated status view for every service — NAS, media, VPN, reverse proxy — in one clean dashboard.

🛠️

IT Professionals & MSPs

One deployment, one login per client, perfectly isolated dashboards. Viewers never see other tenants. No SaaS dependency. No per-seat pricing.

🏢

Small Businesses (Reach Out First!)

The license is non-commercial by default — but businesses are welcome to reach out. Richard is open to custom licensing arrangements. Contact him before deploying in a commercial setting.

🌱

Community & Tinkerers

Source is available on GitHub for personal study and homelab use. Bug reports and feature ideas are welcome — if you'd like to contribute code or fork for your own use, reach out first to discuss.

✨ Unique Feature Highlight

Applegate Monitor is one of the very few status tools with built-in TP-Link Omada SDN support — surface live WAN status, link speed, uptime, and even cellular LTE failover health directly inside your dashboard. Ideal for anyone running Omada gateways at home or across multiple sites.

Getting Started

Deploy on any Linux host with Docker. A MariaDB container, a session secret, and a reverse proxy (Caddy recommended) are all you need:

# Requirements: Docker + Docker Compose. MariaDB runs as a container. # 1. Clone the repo git clone https://github.com/X4Applegate/status-server cd status-server # 2. Configure your deployment cp docker-compose.example.yml docker-compose.yml # Edit docker-compose.yml: DB credentials, SESSION_SECRET, TZ # 3. Launch docker compose up -d --build # 4. Open http://your-server:3000 and create your admin account

On first visit you'll be prompted to create your admin account. After that, create a dashboard (group), add your servers, and share the dashboard URL with viewers. Full setup guide in the README.


A Note on Licensing

Applegate Monitor is source-available — you can view, study, and run it on your own hardware for personal and homelab use. The source is published on GitHub so you can audit every line before deploying it.

The license is proprietary: commercial use, redistribution, and modification require prior written permission from the author. If you're a business or contributor who wants to deploy it, fork it, or collaborate on features, reach out to Richard directly. He's genuinely open to custom licensing, partnerships, and community contributions when discussed first. The goal is to help the community — not to build walls.

A Note on AI Assistance

This project was designed, built, and is maintained by Richard Applegate. Claude by Anthropic is used as a coding assistant to help with bug fixes, feature improvements, security hardening, and code modifications. Claude did not create this project — all product decisions, architecture, and direction are made by the author.


Try It Today

See the live status page, star the repo, and start monitoring your infrastructure the way it was meant to be — self-hosted, transparent, and yours.