- 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>