- 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.
10 KiB
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
@containerqueries
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:
DashboardView.tsx- Using design tokens directlyPageLayout.tsx- Using design tokens directlySubCard.tsx- Using design tokens directlyPublicLandingLoadingView.tsx- Pure TailwindDataTable.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
- Use Tailwind utilities for layout, spacing, typography, responsive
- Use
.cp-card,.cp-badge,.cp-skeletonfor semantic components - Reference design tokens directly:
var(--cp-*) - 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
- First, try to compose it with Tailwind utilities
- If it's tedious to repeat (3+ properties), add it to
utilities.css - Make it semantic and token-based
- 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! 🎉