Generated banner for Penpot Uiux Design
Generated logo for Penpot Uiux Design

Penpot Uiux Design

GitHubOfficialFirst committed by JcardifDistributed by GitHub

  • Skill
  • Tool integration
  • Design and creative
  • MIT
  • Low risk

From the author

Comprehensive guide for creating professional UI/UX designs in Penpot using MCP tools. Use this skill when: (1) Creating new UI/UX designs for web, mobile, or desktop applications, (2) Building design systems with components and tokens, (3) Designing dashboards, forms, navigation, or landing pages, (4) Applying accessibility standards and best practices, (5) Following platform guidelines (iOS, Android, Material Design), (6) Reviewing or improving existing Penpot designs for usability. Triggers: "design a UI", "create interface", "build layout", "design dashboard", "create form", "design landing page", "make it accessible", "design system", "component library".
— the description by Jcardif

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

This skill provides a structured approach to UI/UX design within Penpot, leveraging the penpot-mcp server to automate design tasks, manage components, and ensure accessibility. It covers the entire design lifecycle, from initial setup and design system discovery to layout creation, validation, and export. The guide emphasizes user-centered principles, consistent design patterns, and technical best practices for Penpot's API.

What it does

  • Automates design tasks and modifications via Penpot MCP tools.
  • Provides workflows for building and maintaining design systems.
  • Offers guidance on applying accessibility standards (WCAG) to designs.
  • Includes patterns for common UI components like buttons, forms, and navigation.
  • Facilitates design validation through visual inspection and code analysis.
  • Provides technical guidance for Penpot API interactions and layout management.

When to use it

  • When creating new UI/UX designs for web, mobile, or desktop applications.
  • When building or maintaining a design system with components and tokens.
  • When designing specific interface elements like dashboards, forms, or landing pages.
  • When auditing existing Penpot designs for usability and accessibility compliance.
  • When needing to follow platform-specific guidelines like Material Design or iOS.

Advantages

  • Enforces consistency through reusable design tokens and component patterns.
  • Reduces manual effort by automating repetitive design and layout tasks.
  • Ensures accessibility is integrated into the design process from the start.
  • Provides clear technical guardrails for using the Penpot API effectively.
  • Supports a professional, user-centered design workflow.

Usage examples

“Design a mobile login form for my app.”
The agent will guide you through creating a mobile-friendly form, ensuring it meets touch target requirements, uses proper input labels, and follows the defined spacing scale.
“Check if my current Penpot design is accessible.”
The agent will walk you through a checklist covering color contrast, touch target sizes, and heading hierarchy, while suggesting code-based validation for specific elements.
“Create a new dashboard layout using my existing design system.”
The agent will first discover your existing components and tokens, then help you structure the dashboard layout using your established brand colors and typography.
“How do I add a button component to my design?”
The agent will provide the recommended button specifications, including size, padding, and state handling, and help you implement it using the Penpot MCP tools.

Install

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/github/penpot-uiux-design/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip penpot-uiux-design.zip -d .agents/skills

Documentation by Jcardif

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 Plugins → Load 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

Files

references/component-patterns.md

UI Component Patterns Reference

Buttons

Button Types
TypePurposeVisual Treatment
PrimaryMain action on pageSolid fill, brand color
SecondarySupporting actionsOutline or muted fill
TertiaryLow-emphasis actionsText-only, underline optional
DestructiveDelete/remove actionsRed color, confirmation required
GhostMinimal UI, icon buttonsTransparent, subtle hover
Button States
Default    → Resting state, clearly interactive
Hover      → Cursor over (desktop): darken 10%, subtle shadow
Active     → Being pressed: darken 20%, slight scale down
Focus      → Keyboard selected: visible outline ring
Disabled   → Not available: 50% opacity, cursor: not-allowed
Loading    → Processing: spinner replaces or accompanies label
Button Specifications
  • Minimum size: 44×44px (touch target)

  • Padding: 12-16px horizontal, 8-12px vertical

  • Border radius: 4-8px (consistent across app)

  • Font weight: Medium or Semibold (600-700)

  • Text: Sentence case, 2-4 words max

Button Label Patterns
✓ Save Changes        ✗ Submit
✓ Add to Cart         ✗ Click Here
✓ Create Account      ✗ OK
✓ Download PDF        ✗ Go
✓ Start Free Trial    ✗ Continue

Forms

Form Layout Guidelines
  • Single column preferred: Reduces cognitive load

  • Top-aligned labels: Fastest completion times

  • Logical grouping: Related fields together

  • Smart defaults: Pre-fill when possible

Input Field Anatomy
┌─ Label (required) ─────────────────────────┐
│                                            │
│  ┌────────────────────────────────────┐   │
│  │ Placeholder text...                 │   │
│  └────────────────────────────────────┘   │
│  Helper text or error message              │
└────────────────────────────────────────────┘
Input States
StateBorderBackgroundAdditional
DefaultGray (#D1D5DB)White-
FocusPrimary colorWhiteShadow/glow
FilledGrayWhiteCheckmark optional
ErrorRed (#EF4444)Light red tintError icon + message
DisabledLight grayGray (#F3F4F6)50% opacity text
Validation Timing
  • On blur: Validate when user leaves field

  • On change (after error): Clear error as user types correct input

  • On submit: Final validation before processing

  • Never on focus: Don't show errors before user types

Error Message Guidelines
✓ "Email address is required"
✓ "Password must be at least 8 characters"
✓ "Please enter a valid phone number (e.g., 555-123-4567)"

✗ "Invalid input"
✗ "Error"
✗ "This field is required" (generic)
Form Best Practices
  • Mark optional fields, not required (fewer asterisks)

  • Show password requirements before errors occur

  • Use input masks for formatted data (phone, date)

  • Preserve data on errors (don't clear the form)

  • Provide clear success confirmation


Navigation

Navigation Patterns
Top Navigation Bar
┌─────────────────────────────────────────────────────┐
│ Logo    Nav Item  Nav Item  Nav Item    [Search] [User] │
└─────────────────────────────────────────────────────┘
  • Best for: Marketing sites, simple apps

  • Max items: 5-7 top-level links

  • Mobile: Collapse to hamburger menu

Sidebar Navigation
┌────────┬────────────────────────────────┐
│ Logo   │ Content Area                   │
├────────┤                                │
│ Nav 1  │                                │
│ Nav 2  │                                │
│ Nav 3  │                                │
│        │                                │
│ ────── │                                │
│ Nav 4  │                                │
│ Nav 5  │                                │
└────────┴────────────────────────────────┘
  • Best for: Dashboards, complex apps

  • Width: 200-280px expanded, 64px collapsed

  • Mobile: Overlay drawer

Bottom Navigation (Mobile)
┌─────────────────────────────────────┐
│           Content Area              │
│                                     │
├─────────────────────────────────────┤
│  🏠    🔍    ➕    💬    👤        │
│ Home  Search Add  Chat  Profile     │
└─────────────────────────────────────┘
  • Max items: 3-5 destinations

  • Best for: Primary app sections

  • Always visible: Persistent navigation

Breadcrumbs
Home > Products > Electronics > Headphones
  • Use for: Deep hierarchies (3+ levels)

  • Current page: Not clickable, different style

  • Separator: > or / or chevron icon

Tab Navigation
┌─────────┬─────────┬─────────┬─────────┐
│ Tab 1   │ Tab 2   │ Tab 3   │ Tab 4   │
└─────────┴─────────┴─────────┴─────────┘
│                                       │
│        Tab Content Area               │
│                                       │
└───────────────────────────────────────┘
  • Max tabs: 3-5 for clarity

  • Active indicator: Underline or background

  • Use for: Related content within same page


Cards

Card Anatomy
┌─────────────────────────────────┐
│ ░░░░░░░ Image/Media ░░░░░░░░░░ │
├─────────────────────────────────┤
│ Category Label                  │
│ Card Title                      │
│ Description text that may       │
│ span multiple lines...          │
│                                 │
│ [Action Button]  [Secondary]    │
└─────────────────────────────────┘
Card Guidelines
  • Consistent sizing: Use grid, equal heights

  • Content hierarchy: Image → Title → Description → Actions

  • Padding: 16-24px internal spacing

  • Border radius: 8-12px (matching buttons)

  • Shadow: Subtle elevation (0 2px 4px rgba(0,0,0,0.1))


Modals and Dialogs

Modal Structure
┌─────────────────────────────────────┐
│ Modal Title                    [×]  │
├─────────────────────────────────────┤
│                                     │
│ Modal content goes here.            │
│ Keep it focused on one task.        │
│                                     │
├─────────────────────────────────────┤
│           [Cancel]  [Confirm]       │
└─────────────────────────────────────┘
Modal Guidelines
  • Size: 400-600px width (desktop), full-width minus margins (mobile)

  • Overlay: Semi-transparent dark background (rgba(0,0,0,0.5))

  • Close options: X button, overlay click, Escape key

  • Focus trap: Keep keyboard focus within modal

  • Primary action: Right-aligned, visually prominent


Dashboards

Dashboard Layout Principles
  1. Most important metrics at top: KPIs, summary cards

  2. Progressive detail: Overview → Drill-down capability

  3. Consistent card sizes: Use grid system

  4. Minimal chartjunk: Only data-serving visuals

  5. Actionable insights: Highlight anomalies

Data Visualization Selection
Data TypeChart Type
Comparison across categoriesBar chart
Trend over timeLine chart
Part of wholePie (≤5 slices) or Donut
DistributionHistogram
CorrelationScatter plot
GeographicMap
Single metricBig number + sparkline
Dashboard Best Practices
  • Limit to 5-9 widgets per view

  • Align to grid: Consistent gutters and sizing

  • Filter controls: Top or sidebar, always visible

  • Date range selector: Common need, make prominent

  • Export options: PDF, CSV for data tables

  • Responsive: Stack cards on smaller screens


Empty States

Empty State Components
┌─────────────────────────────────────┐
│                                     │
│         [Illustration/Icon]         │
│                                     │
│      No projects yet                │
│                                     │
│   Create your first project to      │
│   start organizing your work.       │
│                                     │
│       [Create Project]              │
│                                     │
└─────────────────────────────────────┘
Empty State Guidelines
  • Friendly illustration: Not just "No data"

  • Explain value: Why create something?

  • Clear CTA: Primary action to fix empty state

  • Keep it brief: 1-2 sentences max


Loading States

Loading Patterns
DurationPattern
<1 secondNo indicator (feels instant)
1-3 secondsSpinner or progress indicator
3-10 secondsSkeleton screens + progress
>10 secondsProgress bar + explanation
Skeleton Screen
┌─────────────────────────────────────┐
│ ░░░░░░░░░░░░ ░░░░░░░░░░           │
├─────────────────────────────────────┤
│ ░░░░░░░░░░░░░░░░░░░░░░░░░         │
│ ░░░░░░░░░░░░░░░░░░░               │
│ ░░░░░░░░░░░░░░░░░░░░░░░           │
└─────────────────────────────────────┘
  • Match layout of loaded content

  • Use subtle animation (shimmer/pulse)

  • Show actual content structure

Requirements and compatibility

Written for: GitHub Copilot

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Needs an MCP server, Needs a command-line tool, Needs Node.js

Security

What our scanner noticed· Low risk

  • Instructions that use the network

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

First committed by
GitHub avatar of JcardifJcardif
Publisher
GitHub (Official)
Distributed by
GitHub
Source
github/awesome-copilot · skills/penpot-uiux-design · commit 797337f
Licence
MIT License (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced
Contributors
Jcardif

AutoGineer is not affiliated with or endorsed by Jcardif or GitHub.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download penpot-uiux-design.zip