| name | polish |
| description | Transform functional apps into production-grade, professional software. Covers modern UI design systems, keyboard-first navigation, command palettes, view modes, and polished UX patterns. Use when upgrading an MVP to feel like a real product. |
Polish: Production-Grade App Transformation
Overview
Transform a working prototype into professional, polished software that feels like a real product. This skill covers the patterns and principles that separate hobby projects from production-grade tools.
Core principle: Production apps feel inevitable - every interaction, shortcut, and visual element feels like it couldn't have been designed any other way.
When to Use
Use when:
- App works but feels like a prototype
- User asks to make something "production-ready" or "professional"
- Need to add power-user features (keyboard shortcuts, command palette)
- UI needs modernization
- App should feel like VS Code, Linear, Raycast, or Finder
Design System: VS Code/Linear/GitHub Dark
Color Palette
:root {
--bg-primary: #0d1117;
--bg-secondary: #161b22;
--bg-tertiary: #21262d;
--bg-overlay: rgba(0, 0, 0, 0.8);
--border: #30363d;
--border-muted: #21262d;
--text-primary: #e6edf3;
--text-secondary: #8b949e;
--text-muted: #6e7681;
--accent: #58a6ff;
--accent-emphasis: #1f6feb;
--accent-muted: rgba(56, 139, 253, 0.15);
--success: #3fb950;
--success-muted: rgba(63, 185, 80, 0.15);
--warning: #d29922;
--danger: #f85149;
}
Typography
:root {
--font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Noto Sans', Helvetica, Arial, sans-serif;
--font-mono: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Consolas, monospace;
--text-xs: 11px;
--text-sm: 12px;
--text-base: 14px;
--text-lg: 16px;
--text-xl: 18px;
}
Visual Properties
:root {
--radius-sm: 3px;
--radius-md: 6px;
--radius-lg: 8px;
--shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3);
--shadow-md: 0 4px 12px rgba(0, 0, 0, 0.4);
--shadow-lg: 0 8px 24px rgba(0, 0, 0, 0.5);
--transition-fast: 100ms ease;
--transition-normal: 150ms ease;
}
Design Principles
- Borders over shadows - Use 1px borders for structure, shadows for elevation
- Sharp corners - Max 6-8px radius, not rounded pills
- Subtle hover states - Background change, not transform
- Focus rings - 3px accent-muted box-shadow for keyboard nav
- Backdrop blur - 8-12px blur on overlays for depth
Keyboard-First Navigation
Mac Finder-Inspired Patterns
| Key | Action | Notes |
|---|
Space | Quick Look / Preview | Toggle overlay, don't navigate |
Enter | Open / Confirm | Full detail view |
Tab | Toggle selection + advance | fzf-style multi-select |
Shift+Tab | Toggle selection + go back | |
←→↑↓ | Navigate | Context-aware (grid vs list vs preview) |
Escape | Close / Back / Clear | Layered: modal → view → selection → search |
/ | Focus search | Universal pattern |
Meta Key Shortcuts
| Key | Action |
|---|
⌘⇧P | Command palette |
⌘A | Select all |
⌘D | Deselect all |
⌘, | Settings |
⌘K | Quick actions (alternative to ⌘⇧P) |
Implementation Pattern
useEffect(() => {
const handleKeyDown = (e: KeyboardEvent) => {
if (e.target instanceof HTMLInputElement) {
if (e.key === "Escape") (e.target as HTMLInputElement).blur();
return;
}
const isMeta = e.metaKey || e.ctrlKey;
if (isMeta && e.shiftKey && e.key === "p") {
e.preventDefault();
toggleCommandPalette();
return;
}
switch (e.key) {
case " ":
e.preventDefault();
if (viewMode === "quicklook") closeQuickLook();
else openQuickLook();
break;
case "Escape":
if (modalOpen) closeModal();
else if (viewMode !== "grid") setViewMode("grid");
else if (hasSelection) clearSelection();
else clearSearch();
break;
}
};
window.addEventListener("keydown", handleKeyDown);
return () => window.removeEventListener("keydown", handleKeyDown);
}, [dependencies]);
Command Palette
Structure
interface Command {
id: string;
label: string;
shortcut?: string;
category: "view" | "selection" | "navigation" | "actions" | "settings";
action: () => void;
}
Essential Commands
View:
- Switch to [ViewMode]
- Increase/Decrease size
- Toggle panels
Selection:
- Select all / Deselect all
- Invert selection
- Select by pattern (regex)
Navigation:
- Go to first/last
- Jump to...
- Focus search
Actions:
- Open in default app
- Reveal in Finder
- Copy path/content
Settings:
- Toggle preferences
- Configure options
UI Pattern
┌─────────────────────────────────────────┐
│ ▸ Type a command... │
├─────────────────────────────────────────┤
│ VIEW │
│ Switch to Grid View G │
│ Toggle Quick Look Space │
│ SELECTION │
│ Select All ⌘A │
│ Deselect All ⌘D │
└─────────────────────────────────────────┘
View Mode Architecture
Standard Modes
| Mode | Purpose | Behavior |
|---|
grid | Browse/navigate | Default, shows all items |
detail / viewer | Full inspection | Single item, zoom/pan |
quicklook | Fast preview | Overlay, Space to toggle |
compare | Side-by-side | Multiple items |
Compare Sub-Modes
type CompareMode = "solo" | "grid" | "sidebyside";
- Solo: Full-screen single item, arrows cycle through selection
- Grid: Auto-layout all selected items
- Side-by-side: Two items with synchronized zoom/pan
State Management
interface ViewState {
viewMode: "grid" | "viewer" | "compare" | "quicklook";
compareMode: "solo" | "grid" | "sidebyside";
quicklookIndex: number;
selectedIds: Set<string>;
activeId: string | null;
}
Component Patterns
Overlay/Modal Structure
<div className="overlay" onClick={handleBackdropClick}>
<div className="container">
<div className="header">
<div className="title">{title}</div>
<button className="close">×</button>
</div>
<div className="content">{children}</div>
<div className="footer">{hints}</div>
</div>
</div>
CSS for Overlays
.overlay {
position: fixed;
inset: 0;
background: var(--bg-overlay);
backdrop-filter: blur(8px);
display: flex;
align-items: center;
justify-content: center;
z-index: 1000;
}
.container {
background: var(--bg-secondary);
border: 1px solid var(--border);
border-radius: var(--radius-lg);
box-shadow: var(--shadow-lg);
max-width: 90vw;
max-height: 90vh;
display: flex;
flex-direction: column;
overflow: hidden;
}
Item Selection States
.item {
border: 1px solid var(--border-muted);
transition: all var(--transition-normal);
}
.item:hover {
background: var(--bg-tertiary);
border-color: var(--border);
}
.item.active {
border-color: var(--accent);
box-shadow: 0 0 0 1px var(--accent);
}
.item.selected {
border-color: var(--success);
background: var(--success-muted);
}
UX Polish Details
Keyboard Help Overlay
Always provide ? to show all shortcuts, grouped by function:
- Navigation
- Preview & View
- Selection
- Zoom & Size
- General
Status Hints
Bottom bar showing:
- Current mode
- Selection count
- Available shortcuts for current context
Preloading
useEffect(() => {
const adjacentIndices = [
(currentIndex + 1) % items.length,
(currentIndex - 1 + items.length) % items.length,
];
adjacentIndices.forEach((idx) => {
const img = new Image();
img.src = items[idx].src;
});
}, [currentIndex, items]);
Escape Key Layering
Implementation Checklist
Foundation
Navigation
Power Features
Views
Polish
Quick Reference
File Structure
src/
├── components/
│ ├── Grid.tsx # Main browse view
│ ├── Viewer.tsx # Detail view
│ ├── QuickLook.tsx # Space preview
│ ├── Compare.tsx # Comparison view
│ ├── CommandPalette.tsx # ⌘⇧P
│ ├── KeyboardHelp.tsx # ? overlay
│ └── SearchBar.tsx # With dropdown
├── store.ts # Zustand state
├── types.ts # ViewMode, etc.
└── styles.css # Design system
State Shape
{
viewMode: "grid" | "viewer" | "compare" | "quicklook",
compareMode: "solo" | "grid" | "sidebyside",
activeId: string | null,
selectedIds: Set<string>,
commandPaletteOpen: boolean,
keyboardHelpOpen: boolean,
}
Key CSS Classes
.overlay - Full-screen backdrop
.container - Elevated card
.header - Top bar with title + close
.content - Main scrollable area
.footer - Bottom hints bar
.item - Selectable element
.item.active - Keyboard focus
.item.selected - Multi-select