- Now formats as "Xd Yh Zm", "Yh Zm", or "Zm" depending on value size
- Backlog: mark Uptime Duration as done
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Each node shows a collapsible card with running/stopped counts
- Items grouped by node (using Object.groupBy), sorted alphabetically
- Both VMList and LXCList use the same pattern
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Replace SWR polling with a manual setInterval that responds to interval changes
- Add number input in header (milliseconds) that updates polling in real-time
- Move error state to a single error variable shared by the poll effect
- Remove SWR dependency from Dashboard (still used by API routes for internal fetching)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Move power control and console link to Completed section
- Add notes about disk.total not being populated (Storage/Resource items)
- Clarify which items exist in code vs still pending
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- backlog: mark Console Link as done (merged to main)
- CLAUDE.md: remove ConsolePanel and /api/vnc from architecture
- CLAUDE.md: note console URL format and new-tab behavior
- CLAUDE.md: remove PROXMOX_CONSOLE_TOKEN env var
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Remove ConsolePanel and /api/vnc route (iframe session auth won't work cross-origin)
- VMList/LXCList console buttons now open Proxmox web UI console in new tab
- Use web UI console URL format so browser session cookies handle auth automatically
- Add resize=scale and xtermjs=1 for better terminal UX
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Fix 502 errors on power operations (switch to /api2/extjs endpoint)
- Instant UI refresh after power actions via direct state sync
- Status feedback messages (Stopping..., successful) with rAF flush
- Add fallbackData to SWR hooks to prevent empty lists
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- requestAnimationFrame flush lets React paint the "Stopping..."
message before the async API call begins
- Lists never go empty thanks to fallbackData on all SWR hooks
- State synced on success to keep summary counts in sync
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Status message always shows immediately on click (pending -> success/error)
- Auto-dismiss after 3 seconds on success
- Use fallbackData to prevent lists going empty during fetch
- Direct state sync on success to keep summary counts in sync
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Update VM/LXC cards immediately on click instead of waiting for
API response or polling interval. On failure, revert the optimistic
update. Background polling reconciles after 5 seconds.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Power operations use /api2/extjs endpoint (not /api2/json)
- Remove unprivileged parameter that causes 400 validation error
- Refetch VM/LXC/node/status after successful power action via SWR mutate
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Clicking the name opens the Proxmox web console in a new tab.
URLs are constructed in the API routes using the configured PROXMOX_API_URL.
Co-Authored-By: Claude <noreply@anthropic.com>
- New POST /api/power route for Proxmox power operations
- powerControl() method in proxmox.js library
- Start/Stop/Restart action buttons in VMList and LXCList tables
- Status feedback banner in Dashboard on power action
Co-Authored-By: Claude <noreply@anthropic.com>