{
  "id": 5763445,
  "title": "How I Built a Zero-Config Hardware Monitor for a Remote Server Behind CGNAT",
  "url": "https://urgent.news/2026/09/05/how-i-built-a-zero-config-hardware-monitor-for-a-remote-server-behind",
  "topic": "tech",
  "section": "Tech",
  "published": "2026-09-05T10:23:15.000Z",
  "source": {
    "name": "Dev.to",
    "slug": "dev-to",
    "url": "https://dev.to/rhshourav/how-i-built-a-zero-config-hardware-monitor-for-a-remote-server-behind-cgnat-2dnn"
  },
  "original_language": "en",
  "account": "I created PeekESP, a system-metrics dashboard for remote Linux and Windows machines behind CGNAT. My home server is in my hometown, while I reside in Dhaka, which is a five-hour drive away. Checking if the server is still running usually required SSHing in, verifying everything was fine, and closing the terminal. The typical solutions did not work for this scenario. The home internet connection was behind CGNAT, meaning there was no port to forward and no inbound connections could be opened to the machine. A VPN was initially considered, but it was not suitable: an ESP32 cannot join a Tailscale network due to its WireGuard plus control plane combination, and there is no embedded client. Thus, I developed PeekESP. It consists of a tiny ESP32 (LilyGO TTGO T-Display) with a 1.14-inch display mounted on my desk, which displays real-time information about the remote machine, such as CPU usage, RAM, storage, temperature, network throughput, and battery stats.\n\nPeekESP's architecture features both ends dialing out to a Cloudflare Worker on the free tier using a Durable Object. The server pushes data, and the display polls for updates, eliminating the need for inbound ports on either side. Zero-configuration pairing is another key aspect of PeekESP. Setting it up only takes one code—a 10-character string displayed upon the device's initial boot. By entering this string into the desktop app, the stream ID and authentication tokens are independently derived on each side, without exposing sensitive information to the relay. No accounts, ports, or VPNs are required. The system also supports multiple machines using a single display. My server and laptop now share the same device, and I can switch between them using a simple button swipe.\n\nTwo significant challenges I encountered during development were the deep sleep trap for GPIO 0 and hidden Python errors. First, GPIO 0 cannot be used for waking an ESP32 from deep sleep, as it serves as a strapping pin. If held low during a wake reset, the chip will boot into the serial bootloader instead of running the intended firmware, rendering the board seemingly dead. Second, a missing import in the Python code caused a subtle issue where my temperature readings were broken for several weeks. I initially blamed Windows, but the problem stemmed from a bare except statement that hid the error, making it difficult to diagnose the issue. The tech stack for PeekESP includes an ESP32 (LilyGO TTGO T-Display) for the microcontroller, the Arduino IDE/PlatformIO for firmware development with LVGL 8.3 as the UI library. The relay is implemented using a Cloudflare Worker on the free tier, while dependency-free Python scripts run on both Linux (DietPi) and Windows agents. The project is licensed under the MIT license, and the source code, flashing scripts, and setup guides are available at https://github.com/shouravx/PeekESP.",
  "summary": "I built PeekESP: A physical system-metrics dashboard for remote Linux/Windows machines behind CGNAT (No VPN, No Port Forwarding) My home server is in my hometown, but I live in Dhaka—a five-hour drive away. For months, answering the simple question \"Is it still running?\" meant SSHing in when I remembered, seeing everything was fine, and closing the terminal. The obvious fixes didn't work. The…",
  "key_points": [],
  "editors_take": null,
  "illustration": null,
  "coverage": {
    "outlets": 1,
    "also_reported_by": []
  },
  "ai_generated": true,
  "disclaimer": "Summaries, key points and the editor’s take are written by software from other outlets’ reporting and may contain errors — always check the linked original."
}