- Add WhyOps (whyops.nuc.lan:3002) to service catalog and registry
- Show status pill for static (non-Coolify) services too
- Merge static services into discovered list so they always appear
- Health-check static services via /api/health endpoint
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- config.ts: Server uses localhost, client uses domain names (coolify.nuc.lan, etc.)
- Added serviceDomains mapping and getServiceUrl() helper
- services.ts: Updated getCoolifyUrl/getDozzleUrl to use domains
- fallbackServices now uses domain-based URLs where available
Works from anywhere via Tailscale (no subnet conflicts)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The discover API now fetches container names from Docker via the Python
API on port 9876 and matches them to services by UUID. The Dozzle logs
button builds a proper deep link using the Dozzle host ID and container
name, opening directly to that container's log stream.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Adds a scroll-text icon button between the web link and Coolify link
that opens Dozzle for viewing container logs.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add single /api/events SSE endpoint replacing 5 separate polling intervals
- Query Prometheus directly for system stats (replaces Python API on port 9876)
- Query Coolify PostgreSQL directly for deployments (replaces SSH/tinker approach)
- Add EventManager singleton for server-side polling + client broadcast
- Add useEventStream hook with exponential backoff reconnection
- Add live deployment log streaming via SSE for in-progress builds
- Add redeploy button and live duration counter in deployments table
- Add SSE connection indicator in header (green=live, red=offline)
- Externalize all hardcoded 192.168.1.3 references to env vars via config.ts
- Reduce API route code by ~400 lines through shared library modules
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Replace static services list with dynamic discovery from Coolify's
server resources API. Services are auto-categorized using a registry
of known service names mapped to icons and categories. Falls back to
static list with health checks when Coolify is unreachable.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- 17 internal services with live health status
- 28 external bookmarks organized by category
- Dark/light mode toggle with persistence
- Cmd+K search filtering
- Health API polling every 30 seconds
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>