Assist_Design/docs/DESIGN-SYSTEM-REFACTOR-SUMMARY.md
barsa 749f89a83d Refactor rate limiting configuration and enhance UI components for improved performance
- Updated rate limiting TTL values in env.validation.ts and throttler.config.ts to reduce response times and improve request handling.
- Adjusted throttle settings in AuthController, CatalogController, and OrdersController to align with new rate limits, enhancing overall API responsiveness.
- Refactored OrderCard and OrderCardSkeleton components for better loading states and visual consistency.
- Improved AddressForm and ServiceConfigurationStep components for better state management and user experience.
- Streamlined CSS styles in globals.css and responsive.css for better maintainability and clarity.
2025-10-29 15:54:45 +09:00

10 KiB

Design System Refactor Summary

Overview

We've successfully refactored the design system to be Tailwind-first and dramatically reduced custom CSS overhead.

Results

CSS Size Reduction

File Before After Reduction
utilities.css 555 lines 135 lines 76% smaller
responsive.css 565 lines 15 lines 97% smaller
Total 1,120 lines 150 lines 87% smaller

What Was Removed

All utilities that duplicate Tailwind's core functionality:

Layout & Containers

  • .cp-container, .cp-page, .cp-page-header, .cp-page-content, .cp-page-footer
  • Use Tailwind: max-w-7xl mx-auto, min-h-dvh flex flex-col, etc.

Spacing

  • .cp-stack-*, .cp-inline-*, .cp-grid-*
  • Use Tailwind: space-y-4, flex items-center gap-2, grid gap-4

Responsive Grid

  • .cp-grid-cols-*, .cp-sm:grid-cols-*, .cp-md:grid-cols-*
  • Use Tailwind: grid-cols-1 sm:grid-cols-2 lg:grid-cols-3

Typography

  • .cp-text-*, .cp-font-*, .cp-leading-*
  • Use Tailwind: text-lg, font-semibold, leading-normal

Display & Visibility

  • .cp-hidden, .cp-block, .cp-flex, .cp-inline, etc.
  • Use Tailwind: hidden, block, flex, inline

Animations

  • .cp-transition-*, .cp-hover-lift, .cp-hover-scale
  • Use Tailwind: transition-all duration-200, hover:-translate-y-0.5, hover:scale-105

Responsive Padding/Margin

  • .cp-sm:p-*, .cp-md:m-*, .cp-lg:p-*
  • Use Tailwind: p-4 sm:p-6 lg:p-8

Accessibility

  • .cp-sr-only
  • Use Tailwind: sr-only

Responsive Patterns

  • .cp-dashboard-grid, .cp-card-grid, .cp-form-grid, .cp-nav-mobile, .cp-nav-desktop
  • Use Tailwind: Build these patterns inline with responsive variants

Container Queries

  • All .cp-container-*:* utilities
  • Use Tailwind's @container queries

What Was Kept

Only semantic component primitives that combine multiple properties:

Cards (lines 10-27)

.cp-card          /* Base card with padding, border, shadow */
.cp-card-sm       /* Smaller padding variant */
.cp-card-lg       /* Larger border radius and shadow */

Badges (lines 29-97)

.cp-badge                  /* Base badge */
.cp-badge-primary          /* Primary color */
.cp-badge-secondary        /* Secondary color */
.cp-badge-success          /* Success color */
.cp-badge-warning          /* Warning color */
.cp-badge-error            /* Error/destructive color */
.cp-badge-info             /* Info color */
.cp-badge-soft-success     /* Soft success background */
.cp-badge-soft-warning     /* Soft warning background */
.cp-badge-soft-error       /* Soft error background */
.cp-badge-soft-info        /* Soft info background */
.cp-badge-outline          /* Transparent with border */

Skeleton Loader (lines 99-122)

.cp-skeleton               /* Loading skeleton with shimmer animation */
@keyframes cp-skeleton-shimmer

Focus Ring (lines 124-133)

.cp-focus-ring             /* Focus outline */
.cp-focus-ring-visible     /* Focus on :focus-visible only */

Design Tokens (Unchanged)

All design tokens remain in place and can be used directly in Tailwind classes:

In tokens.css:

--cp-space-*           /* Spacing scale */
--cp-card-*            /* Card dimensions, shadows, radii */
--cp-badge-*           /* Badge dimensions */
--cp-text-*            /* Typography scale */
--cp-font-*            /* Font weights */
--cp-leading-*         /* Line heights */
--cp-transition-*      /* Animation timings */
--cp-duration-*        /* Duration values */
--cp-ease-in-out       /* Easing function */

In globals.css:

--primary              /* Brand azure */
--primary-hover        /* Hover state */
--primary-active       /* Active state */
--success              /* Success green */
--success-soft         /* Soft success background */
--warning              /* Warning yellow */
--warning-soft         /* Soft warning background */
--destructive          /* Error red */
--destructive-soft     /* Soft error background */
--info                 /* Info blue */
--info-soft            /* Soft info background */
--border               /* UI chrome */
--border-muted         /* Subtle border */
/* And many more... */

In responsive.css:

--cp-breakpoint-sm     /* 640px */
--cp-breakpoint-md     /* 768px */
--cp-breakpoint-lg     /* 1024px */
--cp-breakpoint-xl     /* 1280px */
--cp-breakpoint-2xl    /* 1536px */

Migration Status

Components Already Using New Approach

These components were already using Tailwind + design tokens correctly:

  1. DashboardView.tsx - Using design tokens directly
  2. PageLayout.tsx - Using design tokens directly
  3. SubCard.tsx - Using design tokens directly
  4. PublicLandingLoadingView.tsx - Pure Tailwind
  5. DataTable.tsx - Pure Tailwind with tokens

No migration needed! All existing components follow the new pattern.

How to Use Going Forward

Pattern: Tailwind + Design Tokens

// Layout & Spacing
<div className="max-w-7xl mx-auto px-[var(--cp-page-padding)]">
  <div className="space-y-[var(--cp-space-6)]">
    <div className="flex items-center gap-[var(--cp-space-2)]">
      {/* Content */}
    </div>
  </div>
</div>

// Cards - Use semantic primitives
<div className="cp-card hover:shadow-[var(--cp-card-shadow-lg)] transition-shadow">
  {/* Content */}
</div>

// Badges - Use semantic primitives
<span className="cp-badge cp-badge-soft-success">
  Active
</span>

// Typography
<h1 className="text-2xl font-bold leading-tight">
  Title
</h1>

// Or with exact token values
<h1 className="text-[var(--cp-text-2xl)] font-[var(--cp-font-bold)]">
  Title
</h1>

// Colors
<div className="bg-[var(--primary)] text-[var(--primary-foreground)]">
  Primary Button
</div>

// Responsive
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-4">
  {/* Content */}
</div>

// Animations
<div className="transition-all duration-200 hover:-translate-y-0.5 hover:shadow-lg">
  {/* Content */}
</div>

Benefits

1. Dramatically Smaller CSS (87% reduction)

  • Faster initial load
  • Less code to maintain
  • Better caching

2. No Duplication

  • Tailwind handles layout, spacing, typography
  • We only define what's unique to our design system

3. More Flexible

  • Full access to Tailwind's utility classes
  • Easy to compose and customize
  • Better responsive variants

4. Better Developer Experience

  • Tailwind IntelliSense works better
  • Less context switching
  • Fewer custom classes to remember

5. Design Tokens First

  • Colors and spacing remain centralized
  • Easy to update theme globally
  • Consistent values across the app

6. Easier Maintenance

  • Less custom CSS to debug
  • Standard Tailwind patterns
  • Community best practices

Architecture

┌──────────────────────────────────────┐
│  globals.css (Theme Colors)          │
│  • Semantic color variables          │
│  • Light/Dark mode                   │
│  • Maps to Tailwind via @theme       │
└──────────────────────────────────────┘
              ↓
┌──────────────────────────────────────┐
│  tokens.css (Design Tokens)          │
│  • Card dimensions                   │
│  • Animation timings                 │
│  • Spacing scale                     │
│  • Typography scale                  │
└──────────────────────────────────────┘
              ↓
┌──────────────────────────────────────┐
│  utilities.css (135 lines)           │
│  • .cp-card variants                 │
│  • .cp-badge variants                │
│  • .cp-skeleton                      │
│  • .cp-focus-ring                    │
└──────────────────────────────────────┘
              ↓
┌──────────────────────────────────────┐
│  Components (Tailwind + Tokens)      │
│  • Use Tailwind utilities            │
│  • Reference design tokens           │
│  • Use semantic primitives           │
└──────────────────────────────────────┘

File Changes

Modified Files

  • apps/portal/src/styles/utilities.css (555 → 135 lines)
  • apps/portal/src/styles/responsive.css (565 → 15 lines)

New Documentation

  • docs/DESIGN-SYSTEM-MIGRATION.md - Migration guide with examples
  • docs/DESIGN-SYSTEM-REFACTOR-SUMMARY.md - This file

No Component Changes Needed

  • All existing components already follow the new pattern

Next Steps

For New Components

  1. Use Tailwind utilities for layout, spacing, typography, responsive
  2. Use .cp-card, .cp-badge, .cp-skeleton for semantic components
  3. Reference design tokens directly: var(--cp-*)
  4. No need to create new utility classes

For Existing Components

  • No immediate changes needed
  • Already using the correct pattern
  • Can gradually simplify any verbose custom classes

If You Need a New Pattern

  1. First, try to compose it with Tailwind utilities
  2. If it's tedious to repeat (3+ properties), add it to utilities.css
  3. Make it semantic and token-based
  4. Document it in this file

Success Metrics

  • 87% reduction in custom CSS
  • Zero breaking changes - all components work as-is
  • Tailwind-first approach established
  • Design tokens remain centralized
  • Documentation complete with examples

Result: A lean, maintainable, Tailwind-first design system! 🎉