- External IP: switch from DDNS domain lookup to curl ifconfig.me with 5-min
cache; DDNS approach broke because host detection uses HOST1_NAME but conf
has HOST1, so domain was never resolved
- Tailscale IP: switch from hardcoded tailscale0 iface to `tailscale ip -4`;
interface name varies (tailscale0, tailscale1) across kernels/installs
vv_network_stats() calls vv_conf_vars() and vv_detect_host() which are defined in
config.php. monitor.php had no require for it, causing a PHP fatal error on every
poll → empty JSON → all monitor cards stuck on "Loading...".