Commit Graph

7 Commits

Author SHA1 Message Date
Alejandro Gutiérrez
16d81c4ec3 Add WhyOps service and show health status for all services
- 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>
2026-02-08 18:54:54 +00:00
Alejandro Gutiérrez
f7c57ca4f0 Use domain-based URLs for services instead of IP:port
- 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>
2026-02-06 17:01:11 +01:00
Alejandro Gutiérrez
e4e5cc97d3 Deep-link Dozzle logs button to specific container
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>
2026-02-04 01:17:46 +01:00
Alejandro Gutiérrez
68649b0073 Add Dozzle logs button to service card footer
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>
2026-02-04 01:01:19 +01:00
Alejandro Gutiérrez
9e683eba22 Replace polling with real-time SSE stream and eliminate Python API dependency
- 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>
2026-02-04 00:43:41 +01:00
Alejandro Gutiérrez
d70f7a902f Add auto-discovery services tab using Coolify API
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>
2026-02-03 21:28:02 +01:00
Alejandro Gutiérrez
1a7a0ed4d3 Initial NUC Portal dashboard
- 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>
2026-02-01 22:52:38 +00:00