The UI is Svelte inside lattice-api. It talks only to /api/v1. Production serves it from the same origin as the API.
| Path | Screen | admin | operator | readonly |
|---|---|---|---|---|
/ | Overview | yes | yes | yes |
| header | Search (IP, MAC, hostname, DNS) | yes | yes | yes |
/search?q= | Search results | yes | yes | yes |
/plan | Addressing plan | yes | read | read |
/subnets/{id} | Subnet | edit | reservations + release | read |
/leases | Helpdesk | yes | search + force-release | search |
/dns | Embedded DNS | yes | read | read |
/dns-servers | DDNS adapters | yes | read | read |
/classes | Client classes | yes | read | read |
/nodes | dhcpd heartbeats | yes | read | read |
/audit | Mutation log | yes | read | read |
/webhooks | Signed hooks | yes | read | read |
/netbox | Prefix import/export | yes | read | read |
/tenants | Tenants | yes | read | read |
/tokens | API tokens | yes | — | — |
Hiding a button is not security. The API is.
Overview refreshes every 8 seconds from Postgres, not from a single dhcpd process. Alerts are derived (pool free, stale nodes, outbox lag). See Overview.
Header search: Header search. Next: First subnet · Helpdesk · Tokens.