Web Design Builder
This skill creates professional HTML5/JavaScript web designs from specifications, with automatic accessibility and functionality verification using Playwright MCP.
When to Use This Skill
Activate this skill when the user requests:
- •Create a web design from a specification or description
- •Build a landing page, website, or web application
- •Create a design mockup or prototype
- •Refactor or improve existing HTML/CSS/JavaScript code
- •Build responsive web interfaces
- •Create component libraries or design systems
- •Generate accessible web designs with WCAG compliance
Core Workflow
Phase 1: Requirements Gathering
When a user requests a web design, start by understanding their needs:
- •
Clarify the Design Scope
- •What type of design? (landing page, dashboard, form, etc.)
- •Target audience and use case
- •Required features and functionality
- •Content and copy (provided or placeholder?)
- •Brand colors, fonts, or design system
- •Responsive requirements (mobile-first?)
- •
Technical Preferences
- •Framework preference:
- •Vanilla HTML/CSS/JS (simple, no dependencies)
- •Tailwind CSS (utility-first, recommended for rapid development)
- •React (component-based, for complex interactions)
- •Vue (progressive framework)
- •Alpine.js (lightweight reactivity)
- •Browser support requirements
- •Accessibility requirements (WCAG level)
- •Performance constraints
- •Framework preference:
- •
Check Playwright MCP Availability
IMPORTANT: Before starting the design process, check if Playwright MCP is available:
javascript// Check if mcp__playwright tools are available // Look for tools like: mcp__playwright__navigate, mcp__playwright__screenshot, etc.
If Playwright MCP is NOT available:
- •Inform the user: "Playwright MCP is not installed. Design verification will be skipped."
- •Provide installation instructions (see MCP Setup section below)
- •Continue with design generation but skip verification phase
- •Mark this clearly in the output
If Playwright MCP IS available:
- •Inform the user: "Playwright MCP detected. Design will be automatically verified."
- •Include verification in the workflow
Phase 2: Design Generation
Step 1: Create Design Mockup
Generate a complete HTML/CSS/JS mockup including:
HTML Structure:
- •Semantic HTML5 elements
- •Proper heading hierarchy (h1 → h6)
- •ARIA landmarks (header, nav, main, aside, footer)
- •Accessible form labels and inputs
- •Alt text for images
- •Unique page title
CSS Styling:
- •Responsive design (mobile-first)
- •CSS Grid or Flexbox for layouts
- •Custom properties (CSS variables) for theming
- •Smooth transitions and animations
- •Print styles (if applicable)
- •Dark mode support (optional)
JavaScript Functionality:
- •Progressive enhancement
- •Accessible interactions (keyboard support)
- •Form validation
- •Dynamic content loading
- •Event handling
- •Error handling
Accessibility Features:
- •WCAG 2.1 Level AA compliance minimum
- •Keyboard navigation support
- •Focus indicators
- •Screen reader friendly
- •Color contrast compliance (4.5:1 minimum)
- •Skip links
- •ARIA attributes where needed
Example Output Structure:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Page Title</title>
<style>
/* Modern CSS with custom properties */
:root {
--primary-color: #0066cc;
--text-color: #1a1a1a;
--bg-color: #ffffff;
--spacing: 1rem;
}
/* Reset and base styles */
*, *::before, *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
line-height: 1.6;
color: var(--text-color);
background: var(--bg-color);
}
/* Responsive layout */
@media (max-width: 768px) {
/* Mobile styles */
}
</style>
</head>
<body>
<!-- Accessible skip link -->
<a href="#main-content" class="skip-link">Skip to main content</a>
<!-- Semantic structure -->
<header role="banner">
<nav aria-label="Main navigation">
<!-- Navigation -->
</nav>
</header>
<main id="main-content" role="main">
<!-- Main content -->
</main>
<footer role="contentinfo">
<!-- Footer -->
</footer>
<script>
// Progressive enhancement JavaScript
(function() {
'use strict';
// Feature detection
if (!('querySelector' in document)) return;
// Your JavaScript here
})();
</script>
</body>
</html>
Step 2: Save Design to File
Save the generated design to a file:
// Recommended file structure
project-name/
index.html // Main HTML file
styles.css // Separate CSS (if needed)
script.js // Separate JS (if needed)
assets/
images/ // Image assets
fonts/ // Custom fonts
Use the Write tool to create the file:
- •Save to user's current directory or ask for preferred location
- •Use descriptive filename (e.g.,
landing-page.html,dashboard.html) - •Create single-file HTML for mockups (CSS/JS inline)
- •Create separate files for production builds
Phase 3: Design Verification (ONLY if Playwright MCP is available)
IMPORTANT: Only execute this phase if Playwright MCP was detected in Phase 1.
Step 1: Launch Browser and Load Design
Use Playwright MCP to open the design:
// Navigate to the local HTML file
await mcp__playwright__navigate({
url: 'file:///path/to/design.html'
});
Step 2: Accessibility Testing
Run comprehensive accessibility checks:
- •
Automated Accessibility Scan
- •Check for WCAG violations
- •Verify color contrast ratios
- •Check heading hierarchy
- •Verify ARIA attributes
- •Check form labels
- •Verify alt text on images
- •
Keyboard Navigation Test
- •Tab through all interactive elements
- •Verify focus indicators are visible
- •Check tab order is logical
- •Test Escape key behavior (modals, dropdowns)
- •Verify no keyboard traps
- •
Screen Reader Compatibility
- •Check ARIA landmarks
- •Verify semantic HTML usage
- •Check dynamic content announcements
- •Verify form error messages
Step 3: Visual Testing
Capture screenshots and verify layout:
// Take full-page screenshot
await mcp__playwright__screenshot({
fullPage: true,
path: 'design-screenshot.png'
});
// Test responsive breakpoints
const breakpoints = [
{ width: 375, height: 667, name: 'mobile' },
{ width: 768, height: 1024, name: 'tablet' },
{ width: 1440, height: 900, name: 'desktop' }
];
for (const bp of breakpoints) {
await mcp__playwright__setViewportSize({
width: bp.width,
height: bp.height
});
await mcp__playwright__screenshot({
path: `design-${bp.name}.png`
});
}
Step 4: Functionality Testing
Test interactive elements:
- •
Form Validation
- •Test required fields
- •Test input validation
- •Test error messages
- •Test success states
- •
Interactive Components
- •Test buttons and links
- •Test modals and dialogs
- •Test dropdowns and menus
- •Test tabs and accordions
- •Test carousels and sliders
- •
JavaScript Functionality
- •Verify event handlers work
- •Test dynamic content loading
- •Check console for errors
- •Verify progressive enhancement
Step 5: Performance Check
Evaluate performance metrics:
- •
Load Time
- •Measure page load time
- •Check resource loading
- •Identify bottlenecks
- •
Resource Optimization
- •Check CSS file size
- •Check JavaScript file size
- •Verify image optimization
- •Check for unused CSS/JS
Phase 4: Verification Report
Generate a comprehensive report:
# Design Verification Report ## Overview - **Design Type**: [Landing Page / Dashboard / etc.] - **Framework**: [Vanilla / Tailwind / React / etc.] - **Verification Date**: [Date] - **Playwright MCP**: [Available / Not Available] ## Accessibility Compliance ### WCAG 2.1 Level AA ✅ **PASSED**: Color contrast (4.5:1 minimum) ✅ **PASSED**: Keyboard navigation ✅ **PASSED**: Semantic HTML structure ⚠️ **WARNING**: Missing alt text on 2 images ❌ **FAILED**: Form missing associated labels ### Issues Found 1. **HIGH**: Form input #email missing label - Location: Line 45 - Fix: Add `<label for="email">Email</label>` 2. **MEDIUM**: Image missing alt text - Location: Line 78 - Fix: Add `alt="Description of image"` ## Visual Testing ### Responsive Breakpoints ✅ **Mobile (375px)**: Layout renders correctly ✅ **Tablet (768px)**: Layout renders correctly ✅ **Desktop (1440px)**: Layout renders correctly ### Screenshots - [x] Full page screenshot saved - [x] Mobile screenshot saved - [x] Tablet screenshot saved - [x] Desktop screenshot saved ## Functionality Testing ### Interactive Elements ✅ Navigation menu works ✅ Form submission works ✅ Modal opens and closes ⚠️ Focus not returned to trigger after modal close ### JavaScript ✅ No console errors ✅ Event handlers working ✅ Progressive enhancement implemented ## Performance ### Metrics - **Page Load Time**: 1.2s - **Total File Size**: 45KB - **CSS Size**: 12KB - **JavaScript Size**: 8KB ### Optimization Opportunities - Consider minifying CSS (potential 30% reduction) - Lazy load images below the fold - Consider code splitting for JavaScript ## Recommendations ### High Priority 1. Fix form label associations 2. Add missing alt text to images 3. Implement focus management for modal ### Medium Priority 1. Minify CSS and JavaScript for production 2. Add loading states for dynamic content 3. Implement error boundaries for JavaScript ### Low Priority 1. Add dark mode support 2. Enhance animations with reduced motion support 3. Add print styles ## Next Steps 1. Review and fix high-priority issues 2. Re-run verification after fixes 3. Test with actual screen readers 4. Conduct user testing 5. Deploy to staging environment
Phase 5: Iteration and Refinement
Based on verification results:
- •
Fix Critical Issues
- •Address all accessibility violations
- •Fix broken functionality
- •Resolve layout issues
- •
Apply Improvements
- •Implement recommended optimizations
- •Enhance visual design based on feedback
- •Refine interactions and animations
- •
Re-verify
- •Run verification again after fixes
- •Ensure all issues are resolved
- •Generate updated report
- •
Deliver Final Design
- •Provide clean, production-ready code
- •Include documentation
- •Provide deployment instructions
- •Share verification report
Design Patterns & Best Practices
Responsive Design
Mobile-First Approach:
/* Base styles for mobile */
.container {
padding: 1rem;
}
/* Tablet and up */
@media (min-width: 768px) {
.container {
padding: 2rem;
max-width: 960px;
margin: 0 auto;
}
}
/* Desktop and up */
@media (min-width: 1024px) {
.container {
padding: 3rem;
max-width: 1200px;
}
}
Accessible Forms
<form class="contact-form">
<div class="form-field">
<label for="name">
Name <span aria-label="required">*</span>
</label>
<input
type="text"
id="name"
name="name"
required
aria-required="true"
aria-describedby="name-error"
/>
<span id="name-error" class="error" role="alert" hidden>
Please enter your name
</span>
</div>
</form>
Interactive Components
Accessible Modal:
function openModal(modalId) {
const modal = document.getElementById(modalId);
const lastFocused = document.activeElement;
modal.hidden = false;
modal.setAttribute('aria-modal', 'true');
// Focus first focusable element
const firstFocusable = modal.querySelector('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');
firstFocusable?.focus();
// Store last focused for return
modal.dataset.lastFocused = lastFocused;
// Trap focus
trapFocus(modal);
}
function closeModal(modalId) {
const modal = document.getElementById(modalId);
modal.hidden = true;
// Return focus
const lastFocused = document.querySelector(`[data-last-focused="${modal.id}"]`);
lastFocused?.focus();
}
Framework-Specific Guidelines
Tailwind CSS
Pros:
- •Rapid development
- •Consistent design system
- •Built-in responsive utilities
- •Excellent for prototyping
Setup:
<script src="https://cdn.tailwindcss.com"></script>
<script>
tailwind.config = {
theme: {
extend: {
colors: {
primary: '#0066cc',
}
}
}
}
</script>
Example:
<div class="container mx-auto px-4">
<h1 class="text-4xl font-bold text-gray-900 mb-4">
Welcome
</h1>
<button class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">
Click Me
</button>
</div>
React
Pros:
- •Component reusability
- •Virtual DOM performance
- •Large ecosystem
- •Great for SPAs
Example:
function DesignComponent() {
const [isOpen, setIsOpen] = React.useState(false);
return (
<div className="container">
<button
onClick={() => setIsOpen(!isOpen)}
aria-expanded={isOpen}
>
Toggle
</button>
{isOpen && (
<div className="content">
Content here
</div>
)}
</div>
);
}
Alpine.js
Pros:
- •Lightweight (15KB)
- •Declarative syntax
- •No build step needed
- •Good for progressive enhancement
Example:
<div x-data="{ open: false }">
<button @click="open = !open" :aria-expanded="open">
Toggle
</button>
<div x-show="open" x-transition>
Content here
</div>
</div>
MCP Setup Instructions
If Playwright MCP is not available, provide these instructions to the user:
Installing Playwright MCP
Option 1: Via NPM (Recommended)
# Install Playwright MCP server npm install -g @playwright/mcp-server # Configure in Claude Code claude code mcp add playwright
Option 2: Manual Setup
- •Create MCP configuration file:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp-server"],
"env": {}
}
}
}
- •Restart Claude Code
Verification: After installation, verify Playwright MCP is working:
# Check MCP servers claude code mcp list
You should see playwright in the list of available MCP servers.
Communication Style
When working with users:
- •
Clarify Requirements First
- •Ask about design goals and constraints
- •Understand technical requirements
- •Confirm framework preferences
- •
Provide Context
- •Explain design decisions
- •Justify framework choices
- •Describe accessibility considerations
- •
Show Progress
- •Inform when generating design
- •Update during verification (if MCP available)
- •Share findings incrementally
- •
Be Actionable
- •Provide specific fixes for issues
- •Include code examples
- •Offer alternatives when appropriate
- •
Handle MCP Unavailability Gracefully
- •Clearly state when verification is skipped
- •Provide manual testing guidance
- •Offer installation instructions
Deliverables
At the end of the design process, provide:
- •
Complete Design Files
- •HTML, CSS, JavaScript files
- •Assets (if any)
- •README with setup instructions
- •
Verification Report (if MCP available)
- •Accessibility compliance results
- •Visual testing screenshots
- •Functionality test results
- •Performance metrics
- •Prioritized recommendations
- •
Documentation
- •Component usage guide
- •Customization instructions
- •Browser support information
- •Deployment guidelines
- •
Next Steps
- •Suggested improvements
- •Testing recommendations
- •Production checklist
Example Workflow
User Request:
"Create a landing page for a SaaS product with a hero section, features, pricing, and contact form."
Your Response:
- •
Clarify Requirements:
- •"I'll create a modern SaaS landing page. A few questions:
- •Do you have brand colors or should I use a professional default palette?
- •Framework preference? I recommend Tailwind CSS for rapid development.
- •Any specific features to highlight?
- •Contact form fields needed?"
- •"I'll create a modern SaaS landing page. A few questions:
- •
Check Playwright MCP:
- •"Checking for Playwright MCP... Not detected. Design verification will be skipped. Would you like installation instructions?"
- •
Generate Design:
- •Create complete HTML/CSS/JS file
- •Include hero, features, pricing, contact form
- •Make it responsive and accessible
- •Save to
saas-landing-page.html
- •
Manual Verification Guide (since MCP not available):
- •Provide checklist for manual testing
- •Share accessibility testing tools
- •Suggest browser testing approach
- •
Deliver:
- •Share complete design file
- •Provide customization guide
- •Offer iteration if needed
Remember: The goal is to create beautiful, accessible, functional web designs that work for all users, with automatic verification when possible!