Dashboard: infrastructure health (router, cloudflare, DDNS, daemons). Services: every registered service with full status (DNS, proxy, TLS, DDNS) in expandable rows + custom TCP routes section. 9 sidebar items → 6. Seven old pages eliminated — their content lives in the two new pages where it belongs. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
8.5 KiB
Wild Central UI Refactor
Core Insight
Everything flows from the service. When a service is registered, Central lights up the components it needs: DNS records, proxy routes, TLS certs, DDNS records. The other pages aren't independent configuration surfaces — they're views into the effects of service registrations.
This creates two clear sections:
- Services section — the service-driven system. Infrastructure health + registered services with their full status.
- Central section — the device itself. Firewall, VPN, security, DHCP. These exist whether or not any services are registered.
Navigation
Services
├── Dashboard (infrastructure health: router, cloudflare, DDNS, daemons)
├── Services (registered services + custom TCP routes)
Central
├── Firewall
├── VPN
├── CrowdSec
└── DHCP
6 sidebar items (down from 9). Two labeled groups with clear separation.
Dashboard
The "is everything working" page. Shows the health of the infrastructure that Central depends on. If anything here is red, services won't work properly.
Gateway Router
- Is the router forwarding DNS to Central (192.168.8.151)?
- Are the required ports forwarded? (443, 80, 51820/UDP)
- Instructions for common routers if not configured
Cloudflare
- Is the API token configured and valid?
- What zones are accessible?
- Token setup inline if missing (don't send user to another page)
Dynamic DNS
- Is the public IP current? When was it last checked?
- Are all A records synced?
- Record list with status (cloud.payne.io ✓, dev.payne.io ✓, etc.)
- These are infrastructure records, not per-service — they exist to make the public IP reachable
Daemon Status
- dnsmasq: running ✓ (listening on 192.168.8.151)
- haproxy: running ✓ (pid 12345)
- wireguard: running ✓ (2 peers connected)
- crowdsec: running ✓
- nats: running ✓
Warnings
- "wild-cloud.payne.io needs a TLS cert → [Provision]"
- "Cloudflare token not set → [Configure]"
- "Port 443 not forwarded on router → [How to fix]"
Services
THE page. Everything about every service in one place.
Service List
Each service is a collapsed row showing summary status. Expand for full details.
Collapsed row:
cloud.payne.io L4 passthrough public *.subdomains ✓✓✓✓
wild-cloud.payne.io L7 proxy internal ✓✓⚠—
payne.io L4 exact public ✓✓✓✓
The four indicators are: DNS, Proxy, TLS, DDNS. Green/warning/missing/not-applicable.
Expanded row for cloud.payne.io:
┌─────────────────────────────────────────────────────────────────────┐
│ cloud.payne.io wild-cloud public│
│ L4 passthrough → 192.168.8.240:443 *.subdomains │
├─────────────────────────────────────────────────────────────────────┤
│ DNS (LAN) address=/cloud.payne.io/192.168.8.240 ✓ │
│ DNS (Public) A record cloud.payne.io → 216.243.55.15 ✓ │
│ Proxy HAProxy L4 SNI + wildcard *.cloud.payne.io ✓ │
│ TLS passthrough (k8s traefik handles) ✓ │
│ │
│ Source: wild-cloud Registered: 2h ago │
│ [Change Reach] [Deregister] │
└─────────────────────────────────────────────────────────────────────┘
Expanded row for wild-cloud.payne.io:
┌─────────────────────────────────────────────────────────────────────┐
│ wild-cloud.payne.io wild-cloud internal│
│ L7 reverse proxy → 127.0.0.1:5055 │
├─────────────────────────────────────────────────────────────────────┤
│ DNS (LAN) local=/ + address=.../192.168.8.151 ✓ │
│ DNS (Public) (internal only — no public DNS record) — │
│ Proxy HAProxy L7 Host header routing ✓ │
│ TLS Central terminates — cert MISSING ⚠ │
│ └─ [Provision Certificate] │
│ │
│ Source: wild-cloud Registered: 2h ago │
│ [Change Reach] [Deregister] │
└─────────────────────────────────────────────────────────────────────┘
Central's own domain (from config) appears here too — it's just another row. Source shows "config" instead of a consumer name.
Custom TCP Routes
Below the service list, a separate section for manual TCP proxy rules that aren't domain-based service registrations:
Custom TCP Routes
┌────────────────────────────────────────────────┐
│ civil_ssh port 2222 → 192.168.8.10:22 │
│ [Remove] │
├────────────────────────────────────────────────┤
│ [+ Add Custom Route] │
└────────────────────────────────────────────────┘
These are from cloud.haproxy.customRoutes in the global config.
Actions
- Register new service (manual registration form)
- Provision certificate (per-service, inline)
- Change reach (internal ↔ public, per-service)
- Deregister (per-service)
- Add wildcard cert (covers multiple services under same domain)
- Generate & Apply HAProxy (advanced, collapsed)
- View raw HAProxy config (advanced, collapsed)
Central Section
These pages are unchanged in content. They're Central's own infrastructure config — not driven by service registrations.
Firewall
nftables rules. Ports opened for HAProxy (443, 80), VPN (51820), SSH (22), plus any custom.
VPN
WireGuard server config + peer management. Add/remove peers, view configs, QR codes.
CrowdSec
Intrusion detection. Alerts, decisions, machines, bouncers.
DHCP
dnsmasq DHCP config. IP ranges, lease times, static leases, active leases.
What Disappeared
The following pages are eliminated — their content lives elsewhere:
| Old Page | Where It Went |
|---|---|
| Overview | → Dashboard (completely rewritten as infrastructure health) |
| Cloudflare | → Dashboard (Cloudflare section) |
| DNS | → Services (per-service DNS status in expanded rows) |
| LAN DNS | → Services (per-service LAN DNS entries) |
| DDNS | → Dashboard (Dynamic DNS section — infrastructure health) |
| Ingress Proxy | → Services (proxy status in expanded rows, custom routes section) |
| Certificates | → Services (TLS status in expanded rows, provision inline) |
Design Principles
-
Services are the entrypoint. The Services page is where you see, configure, and troubleshoot everything about what Central serves.
-
Dashboard is about infrastructure. Is the foundation healthy? Router, Cloudflare, DDNS, daemons. If something here is red, fix it before worrying about individual services.
-
Everything about a service is in one place. DNS, proxy, TLS, DDNS — all visible in the expanded service row. No hopping between pages to understand one service's status.
-
Two sections, two concerns. Services = what Central does for consumers. Central = what the device does for itself.
-
6 items, not 9. Less navigation, less confusion. The information isn't lost — it's better organized.