a3aa5912d9
Design system with CSS custom properties (light/dark themes). 38 Lucide SVG icon components. Dark mode with system preference. EN/RU localization with i18n store. Skeleton loaders, empty states, toggle switches, micro-interactions. Responsive sidebar with mobile hamburger menu. All pages polished with consistent styling.
6.7 KiB
6.7 KiB
Phase 13: Frontend Polish & Modern UI
Status: COMPLETED Parent plan: PLAN.md Domain: frontend
Objective
Enhance the web UI with a modern, polished look and feel — custom SVG icons, refined typography, consistent color palette, smooth transitions, and overall professional frontend quality.
Tasks
- Task 1: Design system foundations — CSS custom properties for color palette (light/dark), spacing scale, typography scale, border radius tokens, shadows, transitions in
web/src/lib/styles/tokens.css - Task 2: SVG icon set — 38 Lucide-based inline SVG icon components in
web/src/lib/components/icons/covering all UI actions (deploy, stop, start, restart, remove, settings, registry, etc.) - Task 3: Refine layout — polished sidebar with active state indicators (dot + background), smooth transitions, responsive breakpoints, collapsible sidebar on mobile with hamburger menu
- Task 4: Dashboard cards — redesigned project cards with box icon, status indicators, instance count badges, hover effects (-translate-y-0.5, shadow-md), port/healthcheck chips
- Task 5: Project detail view — clean card layout for instances with icon action buttons, inline status badges with pulse animation for "running", deploy history as timeline cards
- Task 6: Form styling — consistent input fields with design tokens, select dropdowns, ToggleSwitch component replacing checkboxes, button hierarchy (primary brand/secondary/danger)
- Task 7: Toast/notification system — slide-in toasts with Lucide icons, rounded-xl, auto-dismiss, stacking
- Task 8: Loading states — Skeleton, SkeletonCard, SkeletonTable loader components with shimmer animation for data fetching, IconLoader spinner for actions
- Task 9: Empty states — EmptyState component with SVG illustrations and call-to-action buttons for all empty list scenarios
- Task 10: Responsive design — mobile-friendly layout with collapsible sidebar, hamburger menu, mobile top bar, touch-friendly controls, horizontal settings nav on mobile
- Task 11: Micro-interactions — button press feedback (active:animate-press), status pulse animation (ping), scale-in for dialogs/forms, fade-in for overlays, slide-in for toasts
- Task 12: Dark mode support — ThemeToggle component with light/dark/system modes, CSS custom properties for dark theme via [data-theme="dark"], localStorage persistence, system preference detection
- Task 13: Localization (EN/RU) — i18n store with derived t() function, en.json and ru.json locale files, LocaleSwitcher component, localStorage persistence, all UI strings translated
Files Created
web/src/lib/styles/tokens.css— design tokens (colors, spacing, typography, radius, shadows, transitions, animations)web/src/lib/components/icons/— 38 Lucide icon components + index.ts barrel exportweb/src/lib/i18n/en.json— English locale stringsweb/src/lib/i18n/ru.json— Russian locale stringsweb/src/lib/i18n/index.ts— i18n store with t() function and locale managementweb/src/lib/stores/theme.ts— dark mode store with system preference detectionweb/src/lib/components/Skeleton.svelte— base skeleton loaderweb/src/lib/components/SkeletonCard.svelte— card skeleton placeholderweb/src/lib/components/SkeletonTable.svelte— table skeleton placeholderweb/src/lib/components/EmptyState.svelte— empty state with SVG illustrationsweb/src/lib/components/ToggleSwitch.svelte— toggle switch replacing checkboxesweb/src/lib/components/ThemeToggle.svelte— light/dark/system theme toggleweb/src/lib/components/LocaleSwitcher.svelte— EN/RU locale switcher
Files Modified
web/src/app.css— imports tokens.css, adds base styles, custom scrollbar, focus ring utilityweb/src/routes/+layout.svelte— polished sidebar with icons, collapsible mobile sidebar, theme/locale controlsweb/src/routes/+page.svelte— dashboard with stats cards, skeleton loaders, empty states, i18nweb/src/routes/login/+page.svelte— polished login with design tokens and i18nweb/src/routes/deploy/+page.svelte— quick deploy with icons, animations, i18nweb/src/routes/projects/+page.svelte— projects list with skeleton loaders, empty states, i18nweb/src/routes/projects/[id]/+page.svelte— project detail with deploy timeline, icons, i18nweb/src/routes/projects/[id]/env/+page.svelte— env editor with toggle switches, icons, i18nweb/src/routes/projects/[id]/volumes/+page.svelte— volume editor with icons, i18nweb/src/routes/settings/+layout.svelte— settings nav with icons, responsive horizontal navweb/src/routes/settings/+page.svelte— general settings with design tokens, i18nweb/src/routes/settings/registries/+page.svelte— registries with icons, empty states, i18nweb/src/routes/settings/credentials/+page.svelte— credentials with design tokens, i18nweb/src/routes/settings/auth/+page.svelte— auth settings with icons, empty states, i18nweb/src/lib/components/Toast.svelte— slide-in toasts with Lucide iconsweb/src/lib/components/StatusBadge.svelte— pulse animation for running statusweb/src/lib/components/ConfirmDialog.svelte— fade/scale-in animation, iconweb/src/lib/components/FormField.svelte— consistent styling with design tokensweb/src/lib/components/ProjectCard.svelte— redesigned with hover effects, badgesweb/src/lib/components/InstanceCard.svelte— icon action buttons, improved layout
Acceptance Criteria
- UI looks modern and professional — not "default framework" appearance
- Consistent icon language throughout the app
- Smooth transitions and meaningful animations (not gratuitous)
- Responsive down to mobile viewport
- Loading and empty states provide good UX
- Color palette works well in both light and dark contexts
- All UI strings available in English and Russian, switchable via locale picker
Review Checklist
- All tasks completed
- Visual consistency across all pages
- No functionality regressions
- Responsive on mobile/tablet/desktop
- Accessible (proper contrast ratios, focus states, aria labels on icons)
Handoff Notes
This is the FINAL phase. All 13 phases of Docker Watcher are now complete. The application has:
- Full Go backend with SQLite, Docker management, Nginx Proxy Manager integration
- SvelteKit frontend with dark mode, i18n (EN/RU), responsive design, skeleton loaders, empty states
- Real-time SSE events for deploy/instance status
- Authentication (local + OIDC), RBAC, registry management
- Environment variable overrides, volume management, config export
- Webhook-based and polling-based image detection