# Dashboard UI Redesign — Implementation Plan **Created:** 2026-06-02 **Spec:** `apps/dashboard-ui/docs/superpowers/specs/2026-06-02-dashboard-redesign-design.md` **Approach:** Bottom-Up Design System (Approach A) --- ## TODOs ### Phase 1: Design Foundation - [x] 1. Delete dead scaffold files (`src/style.css`, `src/counter.ts`, `public/icons.svg`) - [x] 2. Add Google Fonts (Inter + JetBrains Mono) to `index.html` - [x] 3. Create design tokens in `src/assets/main.css` using `@theme` directive - [x] 4. Add base animation CSS (page transitions, modal transitions, sidebar transitions) ### Phase 2: Component Library - [x] 5. Create `NgButton.vue` — primary, secondary, ghost, danger variants with loading state - [x] 6. Create `NgCard.vue` — glass card wrapper with default, elevated, stat variants - [x] 7. Create `NgModal.vue` — HeadlessUI Dialog wrapper with transitions, header/body/footer slots - [x] 8. Create `NgTable.vue` — sortable headers, row hover, responsive layout - [x] 9. Create `NgInput.vue` — text, password, search with label, error, hint - [x] 10. Create `NgSelect.vue` — HeadlessUI Listbox wrapper - [x] 11. Create `NgToggle.vue` — HeadlessUI Switch wrapper - [x] 12. Create `NgBadge.vue` — status badges: online, offline, warning - [x] 13. Create `NgToast.vue` + `useToast.ts` — notification system replacing `alert()` - [x] 14. Create `NgSidebar.vue` — collapsible sidebar with icons + labels - [x] 15. Create `NgDropdown.vue` — HeadlessUI Menu wrapper - [x] 16. Create `NgAccordion.vue` — HeadlessUI Disclosure wrapper - [x] 17. Create `NgTooltip.vue` — HeadlessUI Popover wrapper - [x] 18. Create `NgSkeleton.vue` — loading skeleton placeholders ### Phase 3: Layout System - [x] 19. Refactor `App.vue` — new sidebar layout with NgSidebar - [x] 20. Add page transitions to router (fade + slide-up) - [x] 21. Implement responsive breakpoints (mobile hamburger, tablet collapsed, desktop full) - [x] 22. Add sidebar collapse/expand with `Cmd+B` shortcut ### Phase 4: Page Restyle - [x] 23. Restyle `Login.vue` — centered card, no sidebar, animated gradient background - [x] 24. Restyle `Dashboard.vue` — stat cards, traffic overview, recent activity, quick actions - [x] 25. Restyle `Devices.vue` — search + filter bar, data table, pagination - [x] 26. Restyle `DeviceDetail.vue` — back nav, sections (keys, settings, firewall, linked) - [x] 27. Restyle `Servers.vue` — card-based layout with status indicators - [x] 28. Restyle `TrafficHistory.vue` — filters, chart, data table, export - [x] 29. Restyle `Users.vue` — table with role badges, inline create form - [x] 30. Restyle `ShareConfig.vue` — public centered card, monospace config, copy/download - [x] 31. Replace all `alert()`/`confirm()` with NgToast/NgModal - [x] 32. Add loading skeletons to all pages - [x] 33. Integrate Iconify icons throughout (nav, buttons, status) ### Phase 5: Polish - [x] 34. Add micro-interactions (hover, focus states) to all components - [x] 35. Add staggered list animations to tables and cards - [x] 36. Add empty states for all data lists - [x] 37. Add error states for failed loads ### Phase 6: Documentation & Cleanup - [x] 38. Update `apps/dashboard-ui/AGENTS.md` with new architecture - [x] 39. Update root `README.md` with dashboard architecture section - [x] 40. Delete unused public assets (`public/icons.svg`) --- ## Final Verification Wave - [x] F1. **Build Verification** — `npm run build` passes with zero errors - [x] F2. **Lint Verification** — No TypeScript errors, no console warnings - [x] F3. **Visual QA** — All pages render correctly with new design system - [x] F4. **Responsive QA** — Mobile, tablet, desktop layouts work correctly --- ## Acceptance Criteria ### Must Have - [x] Design tokens defined in `@theme` directive - [x] 14 shared components in `src/components/ui/` - [x] All 8 pages restyled with new components - [x] Page transitions working - [x] Responsive sidebar (mobile/tablet/desktop) - [x] Toast notifications replacing `alert()` - [x] Iconify icons integrated ### Must NOT Have - [x] No `alert()` or `confirm()` calls - [x] No hardcoded colors in Vue SFCs (use design tokens) - [x] No `style.css` or `counter.ts` (deleted) - [x] No breaking changes to API modules or stores --- ## Evidence - [x] Build output shows zero errors - [x] All pages use Ng* components - [x] No raw Tailwind classes for colors (use tokens) - [x] Responsive layout tested at 375px, 768px, 1024px+