Skip to content

UI refinement#44

Merged
dantheuber merged 21 commits into
mainfrom
ui-refinement
Mar 6, 2026
Merged

UI refinement#44
dantheuber merged 21 commits into
mainfrom
ui-refinement

Conversation

@dantheuber
Copy link
Copy Markdown
Member

Summary

Comprehensive UI refinement pass across the entire client application. Establishes a design token system, modernizes all pages with consistent styling, introduces reusable components (Tabs, Modal sizes, theme toggle), and adds a team overview stats dashboard. This branch touches 108 files with ~6,700 additions and ~4,800 deletions, replacing ad-hoc styles with a cohesive design system.

Changes

Design System Foundation

  • New CSS custom properties (design tokens) for colors, spacing, typography, radii, shadows, and transition durations in index.css
  • Shared utility styles in styles/shared.module.css
  • Extracted reusable SummaryCards.module.css for stat cards and health bars used by Dashboard and Team Overview

Reusable Components

  • Tabs component with URL-persisted state (useParams + localStorage fallback)
  • Modal and ConfirmDialog polish — design tokens, Lucide icons, size variants (sm/md/lg)
  • Header and Footer extracted into standalone components with pill-style theme toggle
  • SearchableSelect and StatusBadge polished with design tokens and Lucide icons

Page Refactors

  • TeamDetail — refactored into tabbed layout (Overview, Members, Manifests, Services, Alerts Config)
  • ServiceDetail — refactored into tabbed layout with dependency detail modal (latency chart + contact info)
  • Dashboard — stable CSS Grid layout, named grid areas, skeleton loading states
  • All pages (Services, Teams, Catalog, Wallboard, Admin, Associations, Manifest, Login, NotFound) polished with design tokens and Lucide icons

Team Overview Stats (new)

  • TeamOverviewStats component with 4 summary cards: Members (role breakdown), Services (active/inactive/manifest-managed), Service Health (healthy/warning/critical), Dependencies (total count)
  • Segmented health bar with legend, matching Dashboard pattern
  • useTeamServiceHealth hook fetching GET /api/services?team_id={id} for health + dependency data
  • Lazy-loaded via TabPanel — only fetches when overview tab is active

Documentation

  • Updated client architecture spec (10-client-architecture.md) with design tokens, Tabs component, and tabbed views
  • Updated README.md with current functionality

Testing

  • New/updated tests included
  • All tests pass (npm test)
  • Linting passes (npm run lint)

New tests:

  • useTeamServiceHealth hook — stats computation, dependency counting, loading/error states, reload behavior (6 tests)
  • TeamOverviewStats component — member/service/health/dependency card rendering, health bar, error states (7 tests)
  • Tabs component URL param selection and persistence
  • Dependency detail modal rendering
  • ServiceDetail and TeamDetail tabbed layout tests

Results: 2987 server tests passed, 1493 client tests passed

Checklist

Restructure CSS custom properties into a comprehensive token system
(spacing, typography, radius, z-index, transitions, surfaces, text,
accent, status, shadows) with full light/dark theme coverage. Add Inter
font from Google Fonts. Create shared.module.css with composable
utility classes. Add global interactive element defaults and
prefers-reduced-motion support. Legacy variable aliases preserve
backward compatibility with existing components.
…s, pill theme toggle

- Extract Header and Footer into standalone components from Layout.tsx
- Footer: minimal 28px bar showing version injected via Vite define
- Header: 48px slim bar with design token styling, user info pill badge
- Theme toggle: pill-shaped sun/moon toggle using Lucide React icons
- Add lucide-react dependency, declare __APP_VERSION__ global type
- Update Layout.module.css to use design token transition durations
- Update tests for new component structure
…cons, size variants

Restyle Modal with frosted backdrop blur, open animation, Lucide X close
button, and standardized size variants (sm/md/lg). Update ConfirmDialog
CSS to use design tokens. Migrate all Modal consumers to new size prop values.
… tokens, skeleton loading

- Stable CSS Grid with named areas prevents layout shift when sections appear/disappear
- Polling issues section always renders with empty state instead of conditionally removed
- Summary cards use border-left status color accent with design tokens
- Unstable deps bars colored by health status (not meaningless yellow)
- Background refreshes use opacity fade instead of replacing content
- Initial load shows skeleton placeholders matching grid layout
- Health overview always renders, shows empty state when no services
- Recent activity uses minimal dot timeline instead of large icon circles
- All spacing, typography, colors use design system tokens
- Updated tests for new loading skeleton and always-rendered sections
Split TeamDetail into 5 tabs: Overview, Members, Manifests, Services,
and Alerts Config. Uses reusable Tabs component with URL-persisted state
and localStorage fallback. Replaced inline SVGs with Lucide icons, applied
design tokens throughout. Updated tests to handle tabbed navigation.
Split ServiceDetail into four tabs (Overview, Dependencies, Dependent
Reports, Poll Issues) using the reusable Tabs component. Replace inline
SVGs with Lucide icons. Add empty state for external/inactive services
on Poll Issues tab. Update tests to navigate tabs before asserting
tab-specific content.
Clicking a dependency name now opens a focused detail modal showing
health status, metadata, latency chart, and contact information.
Lead/admin users get an Edit Overrides button that transitions to
the existing edit modal.
Replace inline SVGs with Lucide React icons throughout the graph page.
Apply design system tokens (spacing, typography, colors, transitions)
to toolbar, settings dropdown, NodeDetailsPanel, and EdgeDetailsPanel.
Add slide-in animation and slim scrollbar to side panels. Add grouped
section headers to settings dropdown.
Replace hardcoded CSS values with design system tokens across
Wallboard, DependencyDetailPanel, and ServiceDetailPanel. Replace
inline SVGs with Lucide React icons (Settings, Loader2, X,
ChevronRight, AlertCircle). Add consistent dot+label status badges,
slim scrollbars, and proper transition tokens throughout.
@dantheuber dantheuber merged commit fc299ef into main Mar 6, 2026
2 of 3 checks passed
@dantheuber dantheuber deleted the ui-refinement branch March 6, 2026 05:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant