Component Polish Pass

VerifiedSafe

Perform a comprehensive final polish pass on UI components to ensure they are professional, consistent, and delightful to use. Reviews improvements, adds subtle details, perfects spacing.

Sby Skills Guide Bot
DevelopmentIntermediate
7/22/2026
Claude Code
#ui-polish#design-system#component-design#accessibility#css

Recommended for

Automated summary

Performs a final polish pass on a UI component to align it with the design system and add the states and details needed for production.

Strengths

  • Provides a structured checklist for colors, spacing, typography, border radius, and transitions.
  • Includes concrete examples for layered shadows, borders, gradients, skeleton loaders, and error states.
  • Covers interactive and accessibility states such as visible focus, disabled, loading, and aria-invalid.

Limitations

  • Assumes a design system or tokens already exist.
  • Focuses on visual polish and states, not component architecture or behavior.
  • Examples are heavily React, Tailwind, and CSS oriented, with limited guidance for other stacks.
When to use it

Use when a component already works and needs a final quality pass before production.

When not to use it

Avoid using it for initial component design, major refactors, or when no design system is defined.

Security analysis

Safe
Quality score80/100

The document is purely editorial guidance for UI/CSS/React polish work. It declares no allowed-tools, contains no bash, network, filesystem, or credential-handling instructions, and no obfuscated payloads. All code samples are inert styling/component snippets, so there is no meaningful execution risk in listing it.

No concerns found

How this analysis is made

Examples

Polish a card component
Polish this React card component to match our design system: check spacing, colors, typography, and add hover, focus, and loading states.
Production-ready form field
Review this form field component for production readiness: ensure error, disabled, and focus states are covered and accessible.
Add skeleton and refine visuals
Add skeleton loading states and refine the shadows and borders for this dashboard widget so it feels consistent with the rest of the UI.

name: component-polish description: Final polish pass to elevate a component from good to excellent. Reviews all previous improvements, adds subtle details, perfects spacing, and ensures production-ready quality.

Component Polish Pass

You are a senior UI engineer specializing in final polish passes that elevate components from good to excellent, production-ready quality.

Purpose

Perform a comprehensive final polish pass to ensure components are professional, consistent, and delightful to use.

Inputs Required

  • Component code
  • Design system context

Polish Process

1. Review and Refine Previous Improvements

Consistency Check:

  • All colors from design system?
  • Spacing follows scale?
  • Typography matches system?
  • Border radius consistent?
  • Transitions uniform?

2. Check Design System Consistency

// ❌ Inconsistent
<div className="p-3 rounded-md bg-gray-100">  // p-3 not in scale
<div className="p-4 rounded-lg bg-slate-50">  // Different gray

// ✅ Consistent
<div className="p-4 rounded-lg bg-surface">
<div className="p-4 rounded-lg bg-surface">

3. Add Subtle Details

Refined Shadows:

/* Layered shadows for depth */
.card {
  box-shadow:
    0 1px 2px rgba(0, 0, 0, 0.04),
    0 4px 8px rgba(0, 0, 0, 0.04);
}

.cardElevated {
  box-shadow:
    0 2px 4px rgba(0, 0, 0, 0.04),
    0 8px 16px rgba(0, 0, 0, 0.08);
}

Subtle Borders:

/* Inner glow for glass effect */
.card {
  border: 1px solid rgba(255, 255, 255, 0.1);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.05);
}

Gradient Accents:

/* Subtle gradient background */
.hero {
  background: linear-gradient(
    135deg,
    var(--color-bg) 0%,
    var(--color-surface) 100%
  );
}

/* Gradient text (sparingly) */
.gradientText {
  background: linear-gradient(135deg, #667eea, #764ba2);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
}

4. Perfect Spacing and Alignment

Optical Alignment:

/* Icons often need optical adjustment */
.iconButton svg {
  /* Slightly offset to appear centered */
  margin-left: 1px;
}

/* Play icon needs more offset */
.playIcon {
  margin-left: 2px;
}

Consistent Rhythm:

/* Ensure spacing creates visual rhythm */
.cardHeader {
  padding: var(--space-4) var(--space-5);
  border-bottom: 1px solid var(--color-border);
}

.cardBody {
  padding: var(--space-5);
}

.cardFooter {
  padding: var(--space-4) var(--space-5);
  border-top: 1px solid var(--color-border);
}

5. Ensure All States Covered

State Checklist:

  • [ ] Default
  • [ ] Hover
  • [ ] Focus (visible)
  • [ ] Active/Pressed
  • [ ] Disabled
  • [ ] Loading
  • [ ] Error
  • [ ] Success
  • [ ] Empty
  • [ ] Overflow (text truncation)

6. Add Skeleton Loading States

// Skeleton component
function Skeleton({ className }) {
  return (
    <div
      className={cn(
        "animate-pulse bg-gray-200 rounded",
        className
      )}
    />
  );
}

// Card skeleton
function CardSkeleton() {
  return (
    <div className="p-5 border rounded-lg">
      <Skeleton className="h-6 w-3/4 mb-3" />
      <Skeleton className="h-4 w-full mb-2" />
      <Skeleton className="h-4 w-5/6 mb-4" />
      <Skeleton className="h-10 w-24" />
    </div>
  );
}

7. Implement Error States

// Form field with error
function FormField({ error, ...props }) {
  return (
    <div className="space-y-1.5">
      <label className="text-sm font-medium">
        {props.label}
      </label>
      <input
        className={cn(
          "w-full px-4 py-2 border rounded-lg",
          "focus:ring-2 focus:ring-primary/20",
          error
            ? "border-red-500 focus:border-red-500"
            : "border-gray-200 focus:border-primary"
        )}
        aria-invalid={!!error}
        aria-describedby={error ? `${props.id}-error` : undefined}
        {...props}
      />
      {error && (
        <p
          id={`${props.id}-error`}
          className="text-sm text-red-600 flex items-center gap-1"
        >
          <AlertIcon className="w-4 h-4" />
          {error}
        </p>
      )}
    </div>
  );
}

8. Final Accessibility Check

// Ensure all interactive elements are accessible
<button
  className={styles.button}
  disabled={loading}
  aria-busy={loading}
  aria-label={loading ? 'Submitting...' : undefined}
>
  {loading ? <Spinner /> : children}
</button>

Output Format

## Component Polish Report

### Polish Checklist

| Area | Status | Notes |
|------|--------|-------|
| Colors | ✅ | All from design system |
| Spacing | ✅ | Follows 4px scale |
| Typography | ✅ | Consistent with system |
| Shadows | ✅ | Refined layered shadows |
| States | ✅ | All states implemented |
| Loading | ✅ | Skeleton added |
| Errors | ✅ | Error state styled |
| A11y | ✅ | ARIA attributes added |

### Changes Made

#### 1. Shadow Refinement
```css
/* Before: Flat shadow */
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);

/* After: Layered, realistic shadow */
box-shadow:
  0 1px 2px rgba(0, 0, 0, 0.04),
  0 4px 8px rgba(0, 0, 0, 0.04),
  0 8px 16px rgba(0, 0, 0, 0.06);

2. Spacing Perfected

[Details of spacing adjustments]

3. States Completed

[Details of state additions]

Final Component

// Polished component code
/* Polished styles */

Quality Assurance

  • [x] Renders correctly in Chrome, Firefox, Safari
  • [x] Works on mobile viewports
  • [x] Keyboard accessible
  • [x] Screen reader tested
  • [x] Animations smooth (60fps)
  • [x] No console errors
  • [x] Follows design system

## Polish Patterns

### Button Polish
```css
.button {
  /* Base */
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: var(--space-2);
  padding: var(--space-2) var(--space-4);
  font-weight: 500;
  border-radius: var(--radius-md);

  /* Polish */
  transition: all 0.15s ease-out;
  box-shadow:
    0 1px 2px rgba(0, 0, 0, 0.05),
    inset 0 1px 0 rgba(255, 255, 255, 0.1);
}

.buttonPrimary {
  background: linear-gradient(
    180deg,
    var(--color-primary) 0%,
    var(--color-primary-dark) 100%
  );
}

.buttonPrimary:hover {
  background: linear-gradient(
    180deg,
    var(--color-primary-light) 0%,
    var(--color-primary) 100%
  );
  transform: translateY(-1px);
  box-shadow:
    0 2px 4px rgba(0, 0, 0, 0.1),
    0 4px 8px rgba(var(--color-primary-rgb), 0.2);
}

Input Polish

.input {
  padding: var(--space-3) var(--space-4);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  background: var(--color-bg);

  /* Polish */
  transition: all 0.15s ease;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
}

.input:hover:not(:focus) {
  border-color: var(--color-border-hover);
}

.input:focus {
  border-color: var(--color-primary);
  box-shadow:
    0 0 0 3px rgba(var(--color-primary-rgb), 0.15),
    0 1px 2px rgba(0, 0, 0, 0.04);
  outline: none;
}

Card Polish

.card {
  background: var(--color-bg);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  overflow: hidden;

  /* Polish */
  transition: all 0.2s ease-out;
  box-shadow:
    0 1px 2px rgba(0, 0, 0, 0.04),
    0 2px 4px rgba(0, 0, 0, 0.02);
}

.card:hover {
  border-color: var(--color-border-hover);
  box-shadow:
    0 4px 8px rgba(0, 0, 0, 0.04),
    0 8px 16px rgba(0, 0, 0, 0.04);
  transform: translateY(-2px);
}

Final Checklist

Before marking complete:

  • [ ] All design tokens used (no hardcoded values)
  • [ ] Responsive at all breakpoints
  • [ ] Touch targets ≥44px on mobile
  • [ ] Focus states visible and styled
  • [ ] Error messages accessible
  • [ ] Loading states smooth
  • [ ] Animations respect reduced-motion
  • [ ] No layout shift on state change
  • [ ] TypeScript types complete
  • [ ] Component exported correctly

From the file to a first result

The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.

View the source and supporting files

This download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.

1. Download the file

Download SKILL.md

From the root of a test project, save the file as .skill-downloads/component-polish-pass-mrwakev9/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.

Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.

mkdir -p '.skill-downloads/component-polish-pass-mrwakev9' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/component-polish-pass-mrwakev9/download' --output '.skill-downloads/component-polish-pass-mrwakev9/SKILL.md.part' && mv '.skill-downloads/component-polish-pass-mrwakev9/SKILL.md.part' '.skill-downloads/component-polish-pass-mrwakev9/SKILL.md'

2. Check prerequisites

Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.

No recognized prerequisites section in this file. This does not mean it is self-contained: libraries, tools and access requirements may be mentioned elsewhere in the content or source repository.

The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.

3. Load the skill

After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.

Claude Code
test -f '.skill-downloads/component-polish-pass-mrwakev9/SKILL.md' && test -s '.skill-downloads/component-polish-pass-mrwakev9/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/component-polish' && cp -R '.skill-downloads/component-polish-pass-mrwakev9' '.claude/skills/component-polish'

OpenSkills

OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.

Official OpenSkills installation
openskills install './.skill-downloads/component-polish-pass-mrwakev9'

openskills read 'component-polish-pass-mrwakev9'

Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.

For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.

openskills sync

Manual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.

4. Try a first task

Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:

Read .skill-downloads/component-polish-pass-mrwakev9/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.

Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.

Related skills