addresses #382 - installer now prompts for gateway IP when user enters a static IP.
validates IP is in CIDR format (e.g., 192.168.1.100/24) and gateway is valid.
if no gateway is provided, attempts to use .1 of the subnet as default.
this fixes the 'waiting for network' timeout when using static IPs.
addresses #381 - installer now searches all storages that can contain templates
instead of assuming templates are in the same storage as the container rootfs.
when downloading templates, it uses the storage with the most free space.
- Storage tab: clicking nodes filters data without adding 'node:xxx' to search
- Backups tab: clicking nodes filters data without adding 'node:xxx' to search
- Both tabs now use separate selectedNode state for filtering
- Search field stays clean for actual text searches
- Visual improvements: added hover lift effect to NodeSummaryTable rows
- Remove table-fixed and use responsive width classes
- Remove inline styles, use pure Tailwind classes
- Fix left border alignment issue when selecting rows
- Improve visual feedback for selected rows with stronger blue background
- Clean up redundant whitespace-nowrap and inline flex styles
- All selected nodes now show blue left border (border-l-blue-500)
- Unselected nodes have transparent border to prevent layout shift
- Consistent color across all nodes when selected
- Removed border-left indicators that were causing issues
- Back to simple background color change when selected
- This matches the original working implementation
- Changed from template string to classList binding for selection state
- Removed function call in isSelected to prevent reactivity issues
- Should eliminate gray border artifacts on unselected nodes
- Made border color consistent across light/dark modes (always blue-500)
- Added transparent border to unselected rows to prevent layout shift
- This ensures all selected rows show the same blue indicator
- NodeSummaryTable now always uses unfiltered state data for counts
- This ensures all nodes show correct counts even when one is selected
- The parent component handles filtering for the main display separately
- Changed from fixed pixel width to 100% width table
- Converted column widths from pixels to percentages
- Removed inline styles in favor of Tailwind classes
- Table now properly stretches to fill available space
- Added blue left border indicator when a node is selected
- Fixed PBS nodes showing wrong number of columns on dashboard tab
- PBS nodes now show dashes for VMs/Containers columns they don't have
- Deleted old table components that were causing confusion
- Added CRITICAL section to CLAUDE.md about removing redundant code
- Prevents future issues where updated code gets ignored because old version still exists
- Fixed escape key not clearing tag filters from search box
- Replaced PVENodeTable/PBSNodeTable with unified NodeSummaryTable
- Column order now correctly shows: Node, Status, Uptime, CPU, Memory, Disk, VMs/Containers
- Fixed alert acknowledgment persistence bug in monitor.go
- Reordered columns in NodeSummaryTable for better logical grouping
- Consolidated development environment with improved hot-dev script
- Updated vite.config.dev.ts for consistent port usage (7656)
- Enhanced Go main.go with better development mode detection
- Removed obsolete development scripts for cleaner repository
- Added comprehensive development documentation in CLAUDE.md
Development improvements ensure consistent port 7655 usage and
eliminate conflicts between different development approaches.
The AcknowledgeAlert function was modifying the alert pointer but not writing
it back to the activeAlerts map. Since Go maps store values (not references),
the acknowledged state wasn't being persisted. Fixed by adding the map update
after modifying the alert properties.
Addresses #379 - Added clearer error messages for common authentication issues:
- 403 errors now explain that permissions must be set on the USER (not just the token) in Proxmox GUI
- 595 errors indicate authentication failure
- 401 errors indicate invalid credentials
While the setup script handles this correctly, these messages help users who manually configure permissions.
- Shows PVE/PBS version in node summary tables
- Helps quickly identify nodes needing updates
- Extracts just version number from PVE (e.g. 9.0.5)
- Also improved mock mode system for local development
- Remove redundant status column from node tables (green/red dot is sufficient)
- Make stopped guests more visually distinct (red indicator + dimmed row)
- Improve node selection behavior (visual only, no search field modification)
- Fix hover vs selected visual states for clarity
- Standardize hover highlighting across all tables (hover:bg-gray-50 dark:hover:bg-gray-700/30)
- Add better visual separation for tooltips (tags and backups)
- Remove unnecessary rebuild.sh script (only needed at release time)
- Fix backend-watch.sh to use correct PORT environment variable
- Update vite.config.ts to proxy to correct backend port (7656)
- Clean up console.log debugging statements
- Created setup_update_command() function to handle PATH and update script setup
- Adds /usr/local/bin to PATH in /etc/profile and /etc/bash.bashrc
- Creates /usr/local/bin/update script if it doesn't exist
- Called during all installation/update flows (fresh, update, reinstall)
- Fixes issue where existing users couldn't run 'update' command without full path
- Addresses #377
- Remove outer bright ring from tag indicators for cleaner flat design
- Increase indicator size from 1.5 to 2 for better visibility
- Keep active state ring for selected tags
After discussion, the Node column in list view adds unnecessary clutter. The purpose of list view is to see all guests as a unified, sortable list regardless of node. Users who need to know which node a guest is on should use grouped view - that's what it's for.
This simplifies the table, saves horizontal space, and makes the UI cleaner.
addresses #370 - added Node column that only appears in flat/list view mode, positioned between VMID and Uptime columns. This allows users to see which node each guest belongs to when viewing the flat list, while keeping the cleaner view when in grouped mode.
addresses #370 - completely removed the Node column feature from list view as it was causing persistent table alignment issues. Users can still see which node a guest is on by using the grouped view.
addresses #370 - switched from JSX conditional expressions to SolidJS Show component for table column conditional rendering to ensure proper DOM updates
addresses #370 - the hidden class doesn't work properly with table-fixed layout, causing columns to still take up space. Changed to conditional rendering with JSX expressions to properly add/remove the column from the DOM based on grouping mode
addresses #370 - changed from Show component to class-based hiding for the Node column to ensure proper table structure is maintained in both grouped and flat views. The Node column now always exists in the DOM but is hidden with CSS when not needed, preventing column shift issues.
addresses #370 - the table headers were missing the Node column when in flat/list view mode, causing all columns after VMID to be misaligned by one position
- Added retry logic for failed node loading with automatic 3-second retry
- Added loading indicator while configuration is being fetched
- Prevents showing empty configuration during initial load
- Better handles transient network or rate limit errors
This further addresses #372 by ensuring configuration data loads properly
even when there are temporary issues like rate limiting or network hiccups.