penpot-uiux-design

작성자: github

Penpot에서 MCP 도구, 디자인 시스템 및 접근성 표준을 활용한 전문 UI/UX 디자인 제작. 네 가지 MCP 도구를 통해 Penpot 플러그인 컨텍스트 내에서 디자인 생성, 수정, 내보내기 및 API 접근이 가능합니다. 새 디자인을 구축하기 전에 기존 디자인 시스템, 컴포넌트 및 토큰을 식별하는 검색 워크플로우를 포함합니다. 모바일(375×812), 데스크톱(1440×900) 및 플랫폼별 가이드라인(iOS, Android, Material Design)에 대한 반응형 레이아웃을 다룹니다. 기본 디자인 토큰을 제공합니다...

npx skills add https://github.com/github/awesome-copilot --skill penpot-uiux-design

Penpot UI/UX Design Guide

Create professional, user-centered designs in Penpot using the penpot/penpot-mcp MCP server and proven UI/UX principles.

Available MCP Tools

ToolPurpose
mcp__penpot__execute_codeRun JavaScript in Penpot plugin context to create/modify designs
mcp__penpot__export_shapeExport shapes as PNG/SVG for visual inspection
mcp__penpot__import_imageImport images (icons, photos, logos) into designs
mcp__penpot__penpot_api_infoRetrieve Penpot API documentation

MCP Server Setup

The Penpot MCP tools require the penpot/penpot-mcp server running locally. For detailed installation and troubleshooting, see setup-troubleshooting.md.

Before Setup: Check If Already Running

Always check if the MCP server is already available before attempting setup:

  1. Try calling a tool first: Attempt mcp__penpot__penpot_api_info - if it succeeds, the server is running and connected. No setup needed.

  2. If the tool fails, ask the user:

    "The Penpot MCP server doesn't appear to be connected. Is the server already installed and running? If so, I can help troubleshoot. If not, I can guide you through the setup."

  3. Only proceed with setup instructions if the user confirms the server is not installed.

Quick Start (Only If Not Installed)

# Clone and install
git clone https://github.com/penpot/penpot-mcp.git
cd penpot-mcp
npm install

# Build and start servers
npm run bootstrap

Then in Penpot:

  1. Open a design file
  2. Go to PluginsLoad plugin from URL
  3. Enter: http://localhost:4400/manifest.json
  4. Click "Connect to MCP server" in the plugin UI

VS Code Configuration

Add to settings.json:

{
  "mcp": {
    "servers": {
      "penpot": {
        "url": "http://localhost:4401/sse"
      }
    }
  }
}

Troubleshooting (If Server Is Installed But Not Working)

IssueSolution
Plugin won't connectCheck servers are running (npm run start:all in penpot-mcp dir)
Browser blocks localhostAllow local network access prompt, or disable Brave Shield, or try Firefox
Tools not appearing in clientRestart VS Code/Claude completely after config changes
Tool execution fails/times outEnsure Penpot plugin UI is open and shows "Connected"
"WebSocket connection failed"Check firewall allows ports 4400, 4401, 4402

Quick Reference

TaskReference File
MCP server installation & troubleshootingsetup-troubleshooting.md
Component specs (buttons, forms, nav)component-patterns.md
Accessibility (contrast, touch targets)accessibility.md
Screen sizes & platform specsplatform-guidelines.md

Core Design Principles

The Golden Rules

  1. Clarity over cleverness: Every element must have a purpose
  2. Consistency builds trust: Reuse patterns, colors, and components
  3. User goals first: Design for tasks, not features
  4. Accessibility is not optional: Design for everyone
  5. Test with real users: Validate assumptions early

Visual Hierarchy (Priority Order)

  1. Size: Larger = more important
  2. Color/Contrast: High contrast draws attention
  3. Position: Top-left (LTR) gets seen first
  4. Whitespace: Isolation emphasizes importance
  5. Typography weight: Bold stands out

Design Workflow

  1. Check for design system first: Ask user if they have existing tokens/specs, or discover from current Penpot file
  2. Understand the page: Call mcp__penpot__execute_code with penpotUtils.shapeStructure() to see hierarchy
  3. Find elements: Use penpotUtils.findShapes() to locate elements by type or name
  4. Create/modify: Use penpot.createBoard(), penpot.createRectangle(), penpot.createText() etc.
  5. Apply layout: Use addFlexLayout() for responsive containers
  6. Validate: Call mcp__penpot__export_shape to visually check your work

Design System Handling

Before creating designs, determine if the user has an existing design system:

  1. Ask the user: "Do you have a design system or brand guidelines to follow?"
  2. Discover from Penpot: Check for existing components, colors, and patterns
// Discover existing design patterns in current file
const allShapes = penpotUtils.findShapes(() => true, penpot.root);

// Find existing colors in use
const colors = new Set();
allShapes.forEach(s => {
  if (s.fills) s.fills.forEach(f => colors.add(f.fillColor));
});

// Find existing text styles (font sizes, weights)
const textStyles = allShapes
  .filter(s => s.type === 'text')
  .map(s => ({ fontSize: s.fontSize, fontWeight: s.fontWeight }));

// Find existing components
const components = penpot.library.local.components;

return { colors: [...colors], textStyles, componentCount: components.length };

If user HAS a design system:

  • Use their specified colors, spacing, typography
  • Match their existing component patterns
  • Follow their naming conventions

If user has NO design system:

  • Use the default tokens below as a starting point
  • Offer to help establish consistent patterns
  • Reference specs in component-patterns.md

Key Penpot API Gotchas

  • width/height are READ-ONLY → use shape.resize(w, h)
  • parentX/parentY are READ-ONLY → use penpotUtils.setParentXY(shape, x, y)
  • Use insertChild(index, shape) for z-ordering (not appendChild)
  • Flex children array order is REVERSED for dir="column" or dir="row"
  • After text.resize(), reset growType to "auto-width" or "auto-height"

Positioning New Boards

Always check existing boards before creating new ones to avoid overlap:

// Find all existing boards and calculate next position
const boards = penpotUtils.findShapes(s => s.type === 'board', penpot.root);
let nextX = 0;
const gap = 100; // Space between boards

if (boards.length > 0) {
  // Find rightmost board edge
  boards.forEach(b => {
    const rightEdge = b.x + b.width;
    if (rightEdge + gap > nextX) {
      nextX = rightEdge + gap;
    }
  });
}

// Create new board at calculated position
const newBoard = penpot.createBoard();
newBoard.x = nextX;
newBoard.y = 0;
newBoard.resize(375, 812);

Board spacing guidelines:

  • Use 100px gap between related screens (same flow)
  • Use 200px+ gap between different sections/flows
  • Align boards vertically (same y) for visual organization
  • Group related screens horizontally in user flow order

Default Design Tokens

Use these defaults only when user has no design system. Always prefer user's tokens if available.

Spacing Scale (8px base)

TokenValueUsage
spacing-xs4pxTight inline elements
spacing-sm8pxRelated elements
spacing-md16pxDefault padding
spacing-lg24pxSection spacing
spacing-xl32pxMajor sections
spacing-2xl48pxPage-level spacing

Typography Scale

LevelSizeWeightUsage
Display48-64pxBoldHero headlines
H132-40pxBoldPage titles
H224-28pxSemiboldSection headers
H320-22pxSemiboldSubsections
Body16pxRegularMain content
Small14pxRegularSecondary text
Caption12pxRegularLabels, hints

Color Usage

PurposeRecommendation
PrimaryMain brand color, CTAs
SecondarySupporting actions
Success#22C55E range (confirmations)
Warning#F59E0B range (caution)
Error#EF4444 range (errors)
NeutralGray scale for text/borders

Common Layouts

Mobile Screen (375×812)

┌─────────────────────────────┐
│ Status Bar (44px)           │
├─────────────────────────────┤
│ Header/Nav (56px)           │
├─────────────────────────────┤
│                             │
│ Content Area                │
│ (Scrollable)                │
│ Padding: 16px horizontal    │
│                             │
├─────────────────────────────┤
│ Bottom Nav/CTA (84px)       │
└─────────────────────────────┘

Desktop Dashboard (1440×900)

┌──────┬──────────────────────────────────┐
│      │ Header (64px)                    │
│ Side │──────────────────────────────────│
│ bar  │ Page Title + Actions             │
│      │──────────────────────────────────│
│ 240  │ Content Grid                     │
│ px   │ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │
│      │ │Card │ │Card │ │Card │ │Card │ │
│      │ └─────┘ └─────┘ └─────┘ └─────┘ │
│      │                                  │
└──────┴──────────────────────────────────┘

Component Checklist

Buttons

  • Clear, action-oriented label (2-3 words)
  • Minimum touch target: 44×44px
  • Visual states: default, hover, active, disabled, loading
  • Sufficient contrast (3:1 against background)
  • Consistent border radius across app

Forms

  • Labels above inputs (not just placeholders)
  • Required field indicators
  • Error messages adjacent to fields
  • Logical tab order
  • Input types match content (email, tel, etc.)

Navigation

  • Current location clearly indicated
  • Consistent position across screens
  • Maximum 7±2 top-level items
  • Touch-friendly on mobile (48px targets)

Accessibility Quick Checks

  1. Color contrast: Text 4.5:1, Large text 3:1
  2. Touch targets: Minimum 44×44px
  3. Focus states: Visible keyboard focus indicators
  4. Alt text: Meaningful descriptions for images
  5. Hierarchy: Proper heading levels (H1→H2→H3)
  6. Color independence: Never rely solely on color

Design Review Checklist

Before finalizing any design:

  • Visual hierarchy is clear
  • Consistent spacing and alignment
  • Typography is readable (16px+ body text)
  • Color contrast meets WCAG AA
  • Interactive elements are obvious
  • Mobile-friendly touch targets
  • Loading/empty/error states considered
  • Consistent with design system

Validating Designs

Use these validation approaches with mcp__penpot__execute_code:

CheckMethod
Elements outside boundspenpotUtils.analyzeDescendants() with isContainedIn()
Text too small (<12px)penpotUtils.findShapes() filtering by fontSize
Missing contrastCall mcp__penpot__export_shape and visually inspect
Hierarchy structurepenpotUtils.shapeStructure() to review nesting

Export CSS

Use penpot.generateStyle(selection, { type: 'css', includeChildren: true }) via mcp__penpot__execute_code to extract CSS from designs.

Tips for Great Designs

  1. Start with content: Real content reveals layout needs
  2. Design mobile-first: Constraints breed creativity
  3. Use a grid: 8px base grid keeps things aligned
  4. Limit colors: 1 primary + 1 secondary + neutrals
  5. Limit fonts: 1-2 typefaces maximum
  6. Embrace whitespace: Breathing room improves comprehension
  7. Be consistent: Same action = same appearance everywhere
  8. Provide feedback: Every action needs a response

github의 다른 스킬

console-rendering
github
Go에서 struct 태그 기반 콘솔 렌더링 시스템 사용 지침
official
acquire-codebase-knowledge
github
사용자가 기존 코드베이스에 대한 매핑, 문서화, 또는 온보딩을 명시적으로 요청할 때 이 스킬을 사용하세요. "이 코드베이스를 매핑해줘", "문서화해줘"와 같은 프롬프트에서 트리거됩니다.
official
acreadiness-assess
github
현재 리포
official
acreadiness-generate-instructions
github
AgentRC 명령어를 통해 맞춤형 AI 에이전트 지침 파일을 생성합니다. .github/copilot-instructions.md 파일을 생성합니다(기본값, VS Code의 Copilot에 권장됨).
official
acreadiness-policy
github
사용자가 AgentRC 정책을 선택, 작성 또는 적용할 수 있도록 지원합니다. 정책은 관련 없는 검사를 비활성화하고, 영향/수준을 재정의하며, 설정을 통해 준비 상태 점수를 사용자 지정합니다.
official
add-educational-comments
github
코드 파일에 교육용 주석을 추가하여 효과적인 학습 자료로 변환합니다. 설명의 깊이와 어조를 세 가지 설정 가능한 지식 수준(초급, 중급, 고급)에 맞게 조정합니다. 파일이 제공되지 않으면 자동으로 요청하며, 빠른 선택을 위해 번호 목록 매칭을 제공합니다. 교육용 주석만을 사용하여 파일을 최대 125%까지 확장합니다(엄격한 제한: 새 줄 400개, 1,000줄 초과 파일의 경우 300개). 파일 인코딩, 들여쓰기 스타일, 구문 정확성 등을 유지합니다.
official
adobe-illustrator-scripting
github
Adobe Illustrator 자동화 스크립트를 ExtendScript(JavaScript/JSX)로 작성, 디버깅 및 최적화합니다. 스크립트를 생성하거나 수정하여 조작할 때 사용합니다.
official
agent-governance
github
선언적 정책, 의도 분류, AI 에이전트 도구 접근 및 행동 제어를 위한 감사 추적. 구성 가능한 거버넌스 정책은 허용/차단된 도구, 콘텐츠 필터, 속도 제한, 승인 요구 사항을 정의하며, 코드가 아닌 구성으로 저장됨. 의미론적 의도 분류는 패턴 기반 신호를 사용하여 도구 실행 전에 위험한 프롬프트(데이터 유출, 권한 상승, 프롬프트 인젝션)를 탐지함. 도구 수준 거버넌스 데코레이터는 함수에서 정책을 적용함...
official