--- name: wednesday-design description: Design and UX guidelines for Wednesday Solutions projects. Covers visual design tokens, animation patterns, component standards, accessibility, and user experience best practices for React/Next.js applications. ENFORCES use of approved component libraries only. license: MIT metadata: author: wednesday-solutions version: "1.0" compatibility: React 18+, Next.js 14+, Tailwind CSS, Framer Motion --- # Wednesday Design & UX Guidelines ## Trigger Load this skill when working on **UI, components, or visual design**: - Building or modifying a React component - Choosing which UI component to use - Styling with Tailwind or design tokens - Adding animations or transitions - Accessibility review of a UI element - "Which component should I use for X?" - "How should this look?" **Do NOT use this skill for:** business logic, TypeScript types, API routes, or code structure (use `wednesday-dev`). This skill only applies to visual output and UI components. --- ## ⚠️ CRITICAL: APPROVED COMPONENT LIBRARY ONLY **THIS IS A MANDATORY REQUIREMENT. NO EXCEPTIONS.** ### The Rule **DO NOT create custom UI components.** All UI elements MUST be sourced from the approved component library containing **492+ pre-vetted components** from 8 libraries. ### Why This Matters 1. **Consistency** - Pre-built components ensure visual coherence across all projects 2. **Quality** - These components are battle-tested, accessible, and performant 3. **Speed** - No time wasted reinventing existing solutions 4. **Maintenance** - Upstream updates benefit all projects ### Approved Libraries (Priority Order) | Priority | Library | URL | Use For | |----------|---------|-----|---------| | 1 | **shadcn/ui** | https://ui.shadcn.com | Foundation (forms, dialogs, data) | | 2 | **Aceternity UI** | https://ui.aceternity.com | Effects, backgrounds, 3D, scroll | | 3 | **Magic UI** | https://magicui.design | Text animations, buttons, mockups | | 4 | **Motion Primitives** | https://motion-primitives.com | Morphing, text effects | | 5 | **Animate UI** | https://animate-ui.com | Animated Radix ports | | 6 | **Eldora UI** | https://www.eldoraui.site | Device mockups, text | | 7 | **Cult UI** | https://www.cult-ui.com | Neumorphic, textures | | 8 | **ABUI** | https://www.abui.io | Timeline, availability | ### Before Writing ANY Component ``` ┌─────────────────────────────────────────────────────────────┐ │ STOP! Ask yourself: │ │ │ │ 1. Does this component exist in the approved library? │ │ └─> YES: Use it. STOP here. │ │ └─> NO: Continue to step 2 │ │ │ │ 2. Can I combine 2-3 approved components to achieve this? │ │ └─> YES: Compose them. STOP here. │ │ └─> NO: Continue to step 3 │ │ │ │ 3. Can I extend an approved component's styles only? │ │ └─> YES: Extend styles using design tokens. STOP here. │ │ └─> NO: Escalate to tech lead for approval │ │ │ │ ❌ NEVER create a component from scratch │ └─────────────────────────────────────────────────────────────┘ ``` ### Violation Examples ```typescript // ❌ WRONG - Creating custom button function CustomButton({ children }) { return } // ✅ CORRECT - Using approved library import { ShimmerButton } from '@/components/magicui/shimmer-button' // or import { Button } from '@/components/ui/button' ``` ```typescript // ❌ WRONG - Creating custom card animation function AnimatedCard({ children }) { return {children} } // ✅ CORRECT - Using approved library import { WobbleCard } from '@/components/aceternity/wobble-card' // or import { MagicCard } from '@/components/magicui/magic-card' ``` ```typescript // ❌ WRONG - Creating custom text animation function TypewriterText({ text }) { // custom implementation... } // ✅ CORRECT - Using approved library import { TypewriterEffect } from '@/components/aceternity/typewriter-effect' // or import { TypingAnimation } from '@/components/magicui/typing-animation' ``` ### Quick Lookup by Need | I need... | Use this component | From | |-----------|-------------------|------| | Basic button | Button | shadcn/ui | | Shimmer button | Shimmer Button | Magic UI | | 3D tilt card | 3D Card Effect | Aceternity | | Spotlight card | Magic Card | Magic UI | | Word-by-word text | Text Generate Effect | Aceternity | | Typing animation | Typewriter Effect | Aceternity | | Modal/dialog | Dialog | shadcn/ui | | Morphing modal | Morphing Dialog | Motion Primitives | | Form inputs | Input, Select, etc. | shadcn/ui | | Background effects | Background Beams, Aurora, etc. | Aceternity | | Device mockup | iPhone, Safari, etc. | Magic UI / Eldora UI | | Carousel | Carousel | shadcn/ui / Aceternity | | Data table | Data Table | shadcn/ui | **See [references/COMPONENT-LIBRARY.md](references/COMPONENT-LIBRARY.md) for the complete index of 492+ approved components.** --- ## 1. Visual Design Principles ### Brand Identity - **Primary palette**: Green (#4ADE80) to Teal (#0D9488) gradient - **Typography**: Instrument Serif for display, DM Sans for body - **Aesthetic**: Premium, minimal, with subtle depth and glow effects ### Design Hierarchy 1. **Primary actions** - Green gradient with glow 2. **Secondary actions** - Outlined, neutral 3. **Content** - Cards with subtle elevation 4. **Background** - Dot patterns, spotlights, gradients ### Spacing System Use a 4px base grid: - Small gaps: `8px`, `12px` - Medium gaps: `16px`, `24px` - Large gaps: `32px`, `48px` - Section spacing: `56px` See [references/TOKENS.md](references/TOKENS.md) for complete token definitions. ## 2. Typography Guidelines ### Hierarchy ``` Display XL: 60px - Hero headlines Display LG: 44px - Section headlines Display MD: 38px - Feature headlines Display SM: 28px - Card headlines Body LG: 18px - Lead paragraphs Body MD: 16px - Standard body text Body SM: 14px - Supporting text Body XS: 12px - Captions, labels ``` ### Font Pairing ```typescript // Display/Headlines - elegant, editorial feel fontFamily: "'Instrument Serif', Georgia, serif" // Body/UI - clean, readable fontFamily: "'DM Sans', -apple-system, sans-serif" ``` ### Text Styling Rules 1. **Headlines** use Instrument Serif, normal weight, negative letter-spacing 2. **Body** uses DM Sans, regular to semibold weights 3. **Labels/Overlines** are uppercase with expanded letter-spacing (0.1em+) 4. **Emphasized text** in headlines uses italic style 5. **Muted text** uses `#71717A` color ## 3. Color Usage ### Semantic Colors | Purpose | Color | Usage | |---------|-------|-------| | Primary | `#4ADE80` | CTAs, active states, success | | Secondary | `#0D9488` | Accents, links, secondary actions | | Text Primary | `#18181B` | Headlines, important text | | Text Secondary | `#71717A` | Body text, descriptions | | Text Muted | `#A3A3A3` | Captions, placeholders | | Background | `#FFFFFF` | Primary background | | Surface | `#F5F5F5` | Cards, elevated surfaces | ### Gradient Usage - **Brand gradient**: `linear-gradient(135deg, #4ADE80 0%, #0D9488 100%)` - Use for primary CTAs, badges, icons - Never use flat colors for primary actions ### Dark Cards For AI/system messages or contrast: - Background: `linear-gradient(135deg, #18181B 0%, #27272A 100%)` - Text: White (#FFFFFF) with muted gray (#A3A3A3) for descriptions ## 4. Animation Principles ### Core Rules 1. **Purpose-driven** - Every animation serves a purpose (feedback, hierarchy, delight) 2. **Performance-first** - Only animate `transform` and `opacity` 3. **Consistent timing** - Use standardized easings and durations 4. **Respect preferences** - Honor `prefers-reduced-motion` ### Timing Guidelines | Type | Duration | Easing | |------|----------|--------| | Micro-interactions | 100-150ms | ease | | Hover states | 200-300ms | spring | | Card transitions | 300ms | easeOutCubic | | Page transitions | 400-500ms | easeInOutQuart | | Scroll reveals | 500-800ms | easeOutQuart | | Ambient effects | 3-6s | easeInOut (loop) | ### Scroll-Driven Animations For landing pages and storytelling: 1. Use scroll progress (0-1) to drive animations 2. Define clear phase thresholds for content reveals 3. Stagger elements within each phase 4. Provide fallbacks for reduced motion See [references/ANIMATIONS.md](references/ANIMATIONS.md) for implementation patterns. ## 5. Component Standards ### Cards - **Border radius**: 24px for cards, 14px for buttons - **Padding**: 22px standard, 28px for prominent cards - **Shadows**: Layered shadows with optional glow - **Hover**: Lift effect (-8px) with enhanced shadow ### Buttons Primary buttons should have: - 3D gradient background (not flat) - Top highlight line - Shimmer animation - Press/hover states with transform feedback - Arrow icon that animates on hover ### Badges Premium badges include: - Subtle gradient background - Pulse dot for "live" states - Shimmer effect - Rounded pill shape (100px radius) See [references/COMPONENTS.md](references/COMPONENTS.md) for code patterns. ## 6. Interaction Design ### Hover States | Element | Hover Effect | |---------|--------------| | Cards | Lift -8px, glow shadow | | Buttons | Lift -2px, enhanced shadow | | Links | Color shift to primary | | Icons | Scale 1.1, optional rotation | ### Press States - Scale down slightly (0.98) - Reduce shadow depth - Darken background - Remove shimmer/highlight effects ### Focus States - Visible focus ring (`0 0 0 2px primary-color`) - Never remove outline without alternative - High contrast for keyboard navigation ## 7. Layout Patterns ### Hero Sections ``` ┌────────────────────────────────────────┐ │ Navigation (fixed) │ ├──────────────────┬─────────────────────┤ │ │ │ │ Copy │ Visual │ │ - Badge │ (Phone/ │ │ - Headline │ Device) │ │ - Body │ │ │ - CTA │ │ │ - Social proof │ │ │ │ │ └──────────────────┴─────────────────────┘ ``` ### Comparison Sections ``` ┌────────────────────────────────────────┐ │ │ │ Old way (strikethrough) │ │ New way (highlighted, circled) │ │ Description │ │ │ │ [Repeat for each comparison] │ │ │ │ [Floating cards] ───│ │ │ └────────────────────────────────────────┘ ``` ### Step/Process Sections ``` ┌────────────────────────────────────────┐ │ Section Header │ │ Overline · Headline │ │ │ │ ┌─────┐ ┌─────┐ ┌─────┐ │ │ │ 01 │───│ 02 │───│ 03 │ │ │ │Card │ │Card │ │Card │ │ │ └─────┘ └─────┘ └─────┘ │ │ │ └────────────────────────────────────────┘ ``` ## 8. Accessibility Requirements ### Color Contrast - Text on backgrounds: Minimum 4.5:1 ratio - Large text (24px+): Minimum 3:1 ratio - UI components: Minimum 3:1 ratio ### Motion Accessibility ```css @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; } } ``` ### Keyboard Navigation - All interactive elements must be focusable - Tab order follows visual order - Focus indicators are always visible - Escape closes modals/dropdowns ### Screen Readers - Images have descriptive alt text - Icons have aria-labels - Dynamic content uses aria-live regions - Form fields have associated labels ## 9. Responsive Design ### Breakpoints ```typescript const breakpoints = { sm: '640px', // Mobile landscape md: '768px', // Tablet lg: '1024px', // Desktop xl: '1280px', // Large desktop '2xl': '1536px', // Extra large } ``` ### Mobile Considerations - Touch targets minimum 44x44px - Increased font sizes for readability - Simplified animations - Stack layouts vertically - Hide decorative elements ## 10. Performance Guidelines ### Image Optimization - Use `next/image` for automatic optimization - Provide width/height to prevent layout shift - Use WebP format with JPEG fallback - Lazy load below-the-fold images ### Animation Performance - Only animate `transform` and `opacity` - Use `will-change` sparingly during active animations - Debounce scroll handlers - Use `requestAnimationFrame` for JS animations ### CSS Best Practices - Minimize use of `filter` and `backdrop-filter` - Avoid animating `box-shadow` (use opacity on pseudo-element) - Use CSS containment where appropriate ## Quick Reference ### Do's - Use gradients for primary actions - Add subtle glow effects to featured elements - Include hover/press state feedback - Use staggered animations for lists - Test with keyboard navigation - Provide loading/skeleton states ### Don'ts - **Create custom components** - Use approved library ONLY - **Reinvent existing solutions** - Check library first - Use flat colors for CTAs - Skip hover states on interactive elements - Animate layout properties (width, height, margin) - Ignore reduced motion preferences - Create text with insufficient contrast - Use autoplay video without controls --- ## Reference Documents | Document | Purpose | |----------|---------| | [references/COMPONENT-LIBRARY.md](references/COMPONENT-LIBRARY.md) | **492+ approved components** - CHECK THIS FIRST | | [references/TOKENS.md](references/TOKENS.md) | Design tokens (colors, typography, spacing) | | [references/ANIMATIONS.md](references/ANIMATIONS.md) | Animation patterns and easing functions | | [references/COMPONENTS.md](references/COMPONENTS.md) | Component styling patterns | --- ## Enforcement Checklist Before submitting any PR with UI changes: - [ ] All components sourced from approved library - [ ] No custom component implementations - [ ] Design tokens used for any style overrides - [ ] Accessibility requirements met - [ ] Animation performance guidelines followed - [ ] Responsive design verified