An empty server list was sent as null, so the page threw on .length and
showed only the loading placeholder. The API now always returns a list,
the page tolerates null, and tests cover the empty config and the token.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Routes Java Edition connections by the hostname in the handshake, with
wildcard domains, backend failover, PROXY protocol v2, cached server-list
status from health probes, hot-reloaded config, and an admin page and
metrics endpoint. Includes CI, tagged releases and a container image.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>