The Problem
Proxmox is great, but managing multiple nodes means logging into each web UI separately. No unified view, no historical metrics, no single pane of glass. I wanted vCenter functionality for Proxmox.
Built in 5 Days
January 12-16, 2026: 27 commits, 27,726 lines added. All commits co-authored with Claude Opus 4.5.
Day 1: Foundation (31,109 lines)
- Multi-cluster support with auto node discovery via Proxmox API
- DRS (Distributed Resource Scheduler) – manual and automatic modes
- Live migration (vMotion) with progress tracking
- WebSocket real-time updates for instant UI sync
- noVNC console integration for in-browser VM/CT access
Day 2: Agent Architecture + Folders
pve-agent – standalone Go agent deployed on each Proxmox node:
- WebSocket connection to central backend (outbound-only, no firewall changes)
- Command execution: VM/CT start/stop/shutdown/reboot/migrate
- Ceph CLI commands: status, pg_repair, osd_tree
- Automatic reconnection with exponential backoff
vCenter-style folder hierarchy:
- SQLite persistence with WAL mode
- Nested folder support with drag-and-drop
- Context menus with Move to submenu
Day 3: Metrics + Ceph Health
Comprehensive metrics collection:
| Resolution | Retention | Use Case |
|---|---|---|
| Raw (30s) | 24 hours | Recent debugging |
| Hourly | 7 days | Daily patterns |
| Daily | 30 days | Weekly trends |
| Weekly | 1 year | Capacity planning |
Ceph health monitoring:
- Health panel with status indicators
- Automated fix suggestions for common issues
- OSD tree visualization
Day 4: Activity Log + Network Topology + Console
Activity logging:
- SQLite-backed audit trail
- Migration progress parsing (15% -> 33% -> 66% -> 100%)
- Error extraction from Proxmox task logs
vCenter-style network topology:
- Visual diagrams showing bridges as virtual switches
- VM-to-bridge mapping extracted from VM configs
- Interface grouping by type (Bridges, Bonds, VLANs, Physical)
Console tab:
- Inline VNC via noVNC library
- Auto-scaling with ResizeObserver
- Pop-out button for separate window
Day 5: Create VM/CT + Auth
Create VM and Container dialogs:
- Auto-select best node based on available memory
- Storage filtering by content type and active status
- Delete VM/container support
Storage content browser:
- Browse volumes with sortable columns
- Upload ISO/template with progress dialog
Authentication system (4,781 lines):
- bcrypt password hashing
- Session cookies with CSRF protection
- TOTP 2FA with QR code enrollment and recovery codes
- Account lockout and rate limiting
- Trusted IP feature: skip 2FA for 24 hours from known IPs
Architecture
+---------------------------------------------+
| Frontend |
| React + TypeScript + TailwindCSS |
+-----------------+---------------------------+
| WebSocket + REST
+-----------------v---------------------------+
| Backend |
| Go (Chi router) |
| +---------+ +---------+ +-------------+ |
| | Poller | | State | | SQLite | |
| | | | Cache | | Metrics | |
| +----+----+ +---------+ +-------------+ |
+-------+-------------------------------------+
| Proxmox API
+-------v-------------------------------------+
| Proxmox Nodes (pve04, pve05) |
+-----------------+---------------------------+
|
+-----------------v---------------------------+
| pve-agent |
| (WebSocket client on each node) |
+---------------------------------------------+
Key Features
| Feature | Description |
|---|---|
| Multi-cluster | Unified view across multiple Proxmox clusters |
| DRS | Automatic workload balancing across nodes |
| Live Migration | vMotion-style with progress tracking |
| Metrics | Historical charts with rollups and retention |
| Ceph Health | Monitoring with fix suggestions |
| Network Topology | Visual vSwitch diagrams |
| Folders | vCenter-style organization |
| Activity Log | Audit trail with migration tracking |
| Console | Inline noVNC access |
| Auth | 2FA with TOTP and trusted IPs |
V2: Agent-Based Architecture
V2 flips from polling to push. Lightweight agents on each node push data to pCenter:
- Instant updates – Agent sees VM start, pCenter knows immediately
- Simpler firewall rules – Agents connect outbound
- Local access – Agents can read /proc directly
- Better scaling – Distributed collection
The agent is ~500 lines of Go.
Development Stats
This represents a rapid prototyping effort that produced a functional vCenter alternative in under a week, demonstrating the power of AI-assisted development for complex infrastructure tooling.