5.9 KiB
Bug Fixes and Features Plan
Bug Fixes
1. Nodes Edit Button - Hard to Click / Wrong HTML Tag Location
Location: apps/dashboard-ui/src/views/Servers.vue - Node cards edit button Issue: Edit button on node cards is difficult to click or has incorrect HTML structure Root Cause: Button z-index, positioning, or overlapping elements Files: Servers.vue (lines 155-157) Status: ✅ DONE - Changed button size from "sm" to "md" for better clickability
2. Dashboard - Missing Turn On WireGuard Button for 2nd+ Nodes
Location: apps/dashboard-ui/src/views/Servers.vue and apps/server-core/api/wg.go Issue: Only first node (Local Primary Node) has WG Up/Down buttons; additional nodes lack toggle Root Cause: wg.go Status/Up/Down handlers only work with hardcoded wg0 interface; multi-interface support needed Files:
- apps/dashboard-ui/src/views/Servers.vue - Add WG toggle button per node
- apps/server-core/api/wg.go - Fix to accept interface name parameter
- apps/server-core/internal/wgmanager/wgmanager_linux.go - Ensure multi-interface support Status: ✅ BACKEND DONE - wg.go accepts interface param, queries by interface_name, supports multi-interface Status: ✅ FRONTEND DONE - WG Up/Down buttons added to node cards, calls API with interface param
3. Advanced Node Settings - Missing Notes/Descriptions for PreUp, PostUp, PreDown, PostDown
Location: apps/dashboard-ui/src/views/Servers.vue (lines 83-98) Issue: Advanced scripts fields (PreUp, PostUp, PreDown, PostDown) lack helper text/descriptions like Firewall section has Files: Servers.vue - Add hints/descriptions similar to FirewallEditor Status: ✅ DONE - Added descriptive hints for Table, PreUp, PostUp, PreDown, PostDown
4. Popup/Modal Inconsistency - Backdrop Styling
Location: Multiple modals in Servers.vue, Devices.vue, DeviceDetail.vue, FirewallEditor.vue Issue: Nodes modal backdrop styling is better than Devices modal; inconsistent across views Files: Standardize modal wrapper component or CSS classes Status: ✅ DONE - Servers.vue modals converted to NgModal, consistent backdrop (bg-bg-overlay)
5. Firewall Popup - Not User/Mobile Friendly
Location: apps/dashboard-ui/src/components/FirewallEditor.vue Issue: Form layout not responsive; input fields too small on mobile; buttons not touch-friendly Files: FirewallEditor.vue - Responsive grid, larger touch targets, better spacing Status: ✅ DONE - Responsive grid (1/2/5 cols), button full width on mobile, table scroll-x-auto
6. Firewall wg_isolation - Verify Implementation Matches Plan
Location: apps/server-core/internal/firewall/nftables_linux.go - InitNetworkForServer() Issue: Verify wg_isolation rules are correctly implemented per-server with smart isolation (allow server IP, drop peer-to-peer) Files: nftables_linux.go - InitNetworkForServer() and TeardownNetworkForServer() Status: ✅ DONE - Implementation verified: smart isolation (server IP allow, peer-to-peer drop), per-interface chains with jump rules, proper cleanup
Features
1. Traffic Record Table - Only Show Records with RX or TX Data
Location: apps/dashboard-ui/src/views/TrafficHistory.vue, apps/server-core/api/traffic.go, apps/server-core/internal/traffic/recorder.go Issue: Table shows all records including zero-byte entries; should filter to only show records with rx > 0 or tx > 0 Files:
- TrafficHistory.vue - Filter trafficData before display
- traffic.go - Add filter option to API Status: ✅ DONE - Added has_traffic query param, toggle in UI, backend filtering (rx>0 OR tx>0)
2. Traffic Record Table - Sum Per Hour Aggregation
Location: apps/server-core/api/traffic.go, apps/server-core/internal/traffic/recorder.go Issue: Add hourly aggregation option for traffic table when query supports it Files:
- traffic.go - Add aggregation parameter to GetSummary/GetDeviceTraffic
- recorder.go - Add GetHourlyTraffic method with SQL GROUP BY hour Status: ✅ DONE - Added GetHourlyTraffic endpoint with SQL GROUP BY hour, returns HourlyTraffic[]
Implementation Priority
| Priority | Task | Category |
|---|---|---|
| P1 | Nodes edit button fix | Bug |
| P1 | Dashboard WG toggle for all nodes | Bug |
| P1 | Verify wg_isolation implementation | Bug |
| P2 | Advanced settings descriptions | Bug |
| P2 | Modal consistency (backdrop) | Bug |
| P2 | Firewall mobile-friendly | Bug |
| P2 | Traffic table filter (RX/TX > 0) | Feature |
| P3 | Traffic hourly aggregation | Feature |
| P3 | Firewall mobile-friendly | Bug |
Code Structure Reference
Frontend (Vue 3 + TypeScript)
apps/dashboard-ui/src/ |-- views/ | |-- Servers.vue # Node management (edit, WG toggle, advanced) | |-- Devices.vue # Device list, firewall | |-- DeviceDetail.vue # Device detail, firewall editor | |-- TrafficHistory.vue # Traffic table, filters | |-- ... |-- components/ | |-- FirewallEditor.vue # Firewall rules UI | |-- ui/ # Ng* design system components | |-- ... |-- ...
Backend (Go)
apps/server-core/ |-- api/ | |-- servers.go # Node CRUD, WG Up/Down | |-- wg.go # WG interface control | |-- traffic.go # Traffic API | |-- ... |-- internal/ | |-- firewall/ | | |-- nftables_linux.go # InitNetworkForServer, Teardown | | |-- ... | |-- wgmanager/ | | |-- wgmanager_linux.go # Multi-interface WgManager | |-- traffic/ | |-- recorder.go # Traffic queries
Next Steps
- Create detailed task breakdown for each bug/feature
- Start with P1 bugs (edit button, WG toggle, wg_isolation)
- Implement fixes following existing code patterns
- Archive completed plan when done
Notes
- All plans from .sisyphus have been migrated to .omo/plans/archive/
- New plan saved at .omo/plans/bugfixes-and-features.md
- Evidence, notepads, references migrated to .omo/
- Boulder state copied to .omo/boulder.json