HTTP Topology
Caddy on :8888 is the local origin and the route switchboard.
/api/logbook/* -> 127.0.0.1:8890
/api/knowledge/* -> 127.0.0.1:8892
/api/chat/* -> 127.0.0.1:8895
/api/dashboard/* -> 127.0.0.1:8896
/api/dashboard-access/* -> 127.0.0.1:8897
/gui -> 127.0.0.1:8893
/chat -> /chat/index.html
/dashboard -> /dashboard/index.html
*.md routes -> 127.0.0.1:8894 markdown bridge
/chat, /dashboard, and their access-state routes are explicitly marked
no-store. That is a real production safeguard against stale interactive clients, not a cosmetic
header.
Publishing Path
The public host is exposed through Cloudflare tunnel infrastructure, but the site should still be reasoned
about as a local-first system. The shell, APIs, and generated state all originate on this machine and are
merely published outward.
Audio and image cache headers are intentionally different from chat headers. Media should cache. Chat clients
should not.
The dashboard is also intentionally split between public publication and local control. A dedicated access
daemon keeps local and LAN use always on, while public internet access can be enabled or disabled without
taking the page off the desktop shell.
Runtime-wise, the dashboard now behaves more like a small operations surface than a static viewer: the camera
feed tracks live viewers with stale-stream expiry, supports a dismissible caption overlay plus fit/fill/fullscreen
controls, routes its shared comments through a private IRC-backed lane, and can emit public push milestone
announcements from live server metrics without re-firing low-end milestones on every small viewer dip. The page
no longer renders its own visible orb; voice stays on a hidden audio lane so the main desktop shell remains the
only visible assistant surface. Captioning also depends on the fast vision backend, so the camera stream can be
healthy while captions are briefly unavailable during backend warmup.