npx claudepluginhub burtrw/website-creator --plugin website-creatorThis skill uses the workspace's default tool permissions.
Create HTML/CSS design mockups and present them to users for review.
Builds self-contained interactive HTML mockups matching the project's CSS theme for UX exploration, design reviews, comparing options, and prototyping features before coding.
Interactive wizard guiding frontend design process: discovery questions, trend research, moodboard creation, aesthetic selection, and code generation for production-ready UI.
Creates HTML/CSS/JS UI mockups and interactive prototypes from trend research, simulating data with JSON files. Validates designs before Next.js implementation.
Share bugs, ideas, or general feedback.
Create HTML/CSS design mockups and present them to users for review.
Activate this skill when:
Hero and prominent images MUST incorporate the site's color palette.
Random stock photos look disconnected and amateurish. For a polished, professional feel:
.hero::after {
content: '';
position: absolute;
inset: 0;
background: linear-gradient(135deg, rgba(PRIMARY, 0.3), rgba(SECONDARY, 0.2));
}
The goal: Images should feel designed for this site, not grabbed from a stock library.
Run this check on every color palette BEFORE creating mockups:
def check_contrast(hex1, hex2):
"""Returns contrast ratio between two hex colors."""
def hex_to_rgb(h):
h = h.lstrip('#')
return tuple(int(h[i:i+2], 16) for i in (0, 2, 4))
def luminance(rgb):
r, g, b = [x/255 for x in rgb]
r = r/12.92 if r <= 0.03928 else ((r+0.055)/1.055)**2.4
g = g/12.92 if g <= 0.03928 else ((g+0.055)/1.055)**2.4
b = b/12.92 if b <= 0.03928 else ((b+0.055)/1.055)**2.4
return 0.2126*r + 0.7152*g + 0.0722*b
l1, l2 = luminance(hex_to_rgb(hex1)), luminance(hex_to_rgb(hex2))
return (max(l1,l2) + 0.05) / (min(l1,l2) + 0.05)
# UPDATE THESE WITH YOUR PALETTE
palette = {
'bg': '#FFFFFF',
'text': '#1a1a1a',
'muted': '#666666',
'primary': '#BF5700',
}
# Check all text/background combinations
for name, color in palette.items():
if name != 'bg':
ratio = check_contrast(color, palette['bg'])
status = "PASS" if ratio >= 4.5 else "FAIL"
print(f"{name} on bg: {ratio:.1f}:1 [{status}]")
Requirements:
{project-name}/
├── mockups/
│ ├── concept-a.html # Style exploration A
│ ├── concept-b.html # Style exploration B
│ ├── concept-c.html # Style exploration C
│ └── {chosen-direction}/ # After selection: full templates
│ ├── styles.css
│ ├── home.html
│ ├── post.html
│ └── about.html
├── project-brief.json # Requirements
└── README.md
// DON'T DO THIS - servers don't work in Cowork VM
app.listen(3000, () => console.log('http://localhost:3000'));
Why it fails: The Cowork VM runs in an isolated environment. Local servers are not accessible from the user's browser.
Always present mockups using computer:// protocol links:
| Concept | Link |
|---------|------|
| **Terminal Style** | [View Mockup](computer:///path/to/mockups/terminal.html) |
| **Editorial Style** | [View Mockup](computer:///path/to/mockups/editorial.html) |
| **Minimal Style** | [View Mockup](computer:///path/to/mockups/minimal.html) |
After creating mockups, present them like this:
Done! **[N] design concepts** are ready:
| Concept | Description | Link |
|---------|-------------|------|
| **[Name 1]** | [Brief description of style/vibe] | [View Mockup](computer:///full/path/to/mockup1.html) |
| **[Name 2]** | [Brief description of style/vibe] | [View Mockup](computer:///full/path/to/mockup2.html) |
| **[Name 3]** | [Brief description of style/vibe] | [View Mockup](computer:///full/path/to/mockup3.html) |
**Pick your favorite** (or tell me what to mix/change), and I'll build the full WordPress theme!
/sessions/computer:///sessions/happy-zen-knuth/mnt/Desktop/project-name/mockups/file.htmlcomputer:///sessions/happy-zen-knuth/mnt/[mounted-folder]/...Each mockup should be a single HTML file with embedded CSS:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>[Project Name] — [Concept Name]</title>
<link href="https://fonts.googleapis.com/css2?family=..." rel="stylesheet">
<style>
/* All styles embedded */
:root {
--primary: #BF5700;
--bg: #ffffff;
--text: #1a1a1a;
}
/* ... rest of styles */
</style>
</head>
<body>
<!-- Full page mockup content -->
</body>
</html>
Always include these text-wrap rules to prevent ugly orphan words:
h1, h2, h3, h4, h5, h6 {
text-wrap: balance; /* Balances line lengths in headings */
}
p {
text-wrap: pretty; /* Prevents orphan words in paragraphs */
}
Run the contrast check script (see CRITICAL section above) before using any palette.
:root {
--bg: #ffffff; /* Background */
--text: #1a1a1a; /* Primary text */
--muted: #666666; /* Secondary text */
--primary: #BF5700; /* Brand/accent color */
--primary-light: #FFE8D6; /* Light variant */
}
Create 3-4 distinct visual directions. Each mockup shows a complete aesthetic.
Location: mockups/*.html (root level)
Present mockups using computer:// links. User picks a direction.
After selection, build out all page types in chosen style.
Location: mockups/{chosen-direction}/
mockups/
└── terminal-v2/
├── styles.css # Shared design system
├── home.html
├── post.html
├── page.html
├── archive.html
└── 404.html
| Type | Pattern | Example |
|---|---|---|
| Style exploration | {style-name}.html | open-terminal.html |
| Style iteration | {style-name}-v2.html | terminal-v2.html |
| Page template | {page-type}.html | post.html |
When user selects a design:
Great choice! I'll now convert the **[Selected Style]** mockup into a full WordPress block theme.
This will include:
- theme.json with your colors, fonts, and spacing
- Templates for all page types
- Block patterns for key sections
- WordPress Playground preview
Building your theme...
Then invoke the wp-block-themes skill.