Split /api/v1/state into dedicated resource endpoints:
- /api/v1/operator, /api/v1/central-domain
- /api/v1/ddns/config, /api/v1/dns/settings
- /api/v1/dhcp/config (moved from /dnsmasq/dhcp/)
- /api/v1/nftables/config, /api/v1/haproxy/routes
Each page now talks to its own resource instead of deep-merging
a blob. Removes useConfig hook, CentralState type, and legacy
config methods.
- Add Routes model to services UI (paths, headers, IP whitelisting per route)
- Show TLS cert info per service with inline provision/renew actions
- Remove TLS Certificates section from dashboard (now on services page)
- Make gateway router port list dynamic from config + VPN state
- Add TODO for header validation in HAProxy config generation
Dashboard:
- Cloudflare token can be changed when already configured (was only
editable when missing/invalid)
- DDNS records can be added and removed inline (was read-only)
Services:
- Wildcard services display as *.domain instead of domain with a
separate subdomains badge — clearer at a glance
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>