From logo-designer-skill
Designs and iterates on SVG logos via structured interviews for format, style, colors, and sizes. Generates side-by-side previews and PNG exports at standard sizes.
npx claudepluginhub neonwatty/logo-designer-skillThis skill uses the workspace's default tool permissions.
Design and iterate on logos using SVG. Generates side-by-side previews and exports to PNG at standard sizes.
Generates custom SVG logos and brand kits by scanning project context (README, package.json, CSS, assets). Exports favicons (16-512px + ICO), social images (OG/Twitter), dark/light/mono variants, and HTML preview.
Generates 6+ SVG logo variants using geometric designs, interactive HTML showcases, PNG exports, and Gemini AI showcase images with 12 background styles.
Generates logos via 4-phase process: brief extraction, competitive audit, concept development, and asset production. Activates on requests to create logos or brand marks.
Share bugs, ideas, or general feedback.
Design and iterate on logos using SVG. Generates side-by-side previews and exports to PNG at standard sizes.
Before generating anything, gather context and ask the user what they need.
If the user points to a repo, URL, or existing project:
If the user just says "design a logo" with no project context, skip to Step 2.
Use the AskUserQuestion tool to ask these questions. Batch related questions together (up to 4 per call) and skip any question already answered by the context gathered in Step 1 or by the user's initial message.
Question 1 — Format:
question: "What format do you need?"
header: "Format"
options:
- label: "Icon only (512x512)"
description: "Square icon, works for favicons, app icons, social avatars"
- label: "Wordmark only"
description: "Text logo, 1024x512"
- label: "Combination mark"
description: "Icon + text together, 1024x512"
Question 2 — Style direction:
question: "What style direction?"
header: "Style"
options:
- label: "Minimal / geometric"
description: "Clean lines, simple shapes, modern feel"
- label: "Playful / hand-drawn"
description: "Friendly, casual, organic shapes"
- label: "Bold / corporate"
description: "Strong, professional, high contrast"
- label: "Match existing app style"
description: "I'll extract the design language from your project"
Question 3 — Color preferences:
question: "Any color preferences?"
header: "Colors"
options:
- label: "Use project colors"
description: "I'll pull colors from your existing design system"
- label: "Surprise me"
description: "I'll pick a palette that fits the vibe"
- label: "I have specific colors"
description: "I'll ask you for them"
Question 4 — Output size (only if the user mentioned a specific platform):
question: "Any specific size requirements?"
header: "Size"
options:
- label: "Standard sizes"
description: "16, 32, 48, 192, 512, 1024, 2048px — covers most uses"
- label: "Custom size needed"
description: "I'll ask for the exact dimensions"
Move to Phase 2 once you have enough to generate distinct concepts.
When generating SVG logos, follow these rules:
viewBox="0 0 W H" without fixed width/height attributes. Use 512x512 for icons, 1024x512 for wordmarks/combination marks.<use> references to other files. Everything inline.<path> elements. When using system fonts, always include a generic fallback (e.g., font-family="Helvetica, Arial, sans-serif").<g> elements with descriptive IDs: id="icon", id="wordmark", id="tagline". This makes iteration easier when the user says "make the icon bigger" or "change the wordmark color".fill colors. Only use gradients (<linearGradient>, <radialGradient>) when the user requests them or the style clearly calls for it.stroke-width of 6+ for any outlines that need to remain visible. Test this mentally: if a detail won't survive being 32px wide, simplify it.Generate 3-5 distinct SVG logo concepts. Each concept should take a meaningfully different creative direction — vary the icon metaphor, typography style, layout, or overall aesthetic. Do not generate minor variations of the same idea.
Use the Task tool to generate all concepts in parallel. This is significantly faster than writing them sequentially.
logos/concepts/ directory firstTask agent per concept, all in the same message so they run concurrently. Each agent should:
logos/concepts/concept-1.svg)subagent_type: "general-purpose" and mode: "bypassPermissions"logos/preview.html and present the resultsExample dispatch pattern (all in one message):
Task 1: "Write logos/concepts/concept-1.svg — geometric letterform using [colors]. viewBox 512x512. Self-contained SVG, no external fonts. [full SVG conventions]."
Task 2: "Write logos/concepts/concept-2.svg — abstract symbol using [colors]. viewBox 512x512. Self-contained SVG, no external fonts. [full SVG conventions]."
Task 3: "Write logos/concepts/concept-3.svg — mascot-based icon using [colors]. viewBox 512x512. Self-contained SVG, no external fonts. [full SVG conventions]."
Each agent prompt must include: the full SVG conventions from this skill, the target file path, the specific creative direction, and all relevant context (project name, colors, style preferences). Agents do not share context — give each one everything it needs.
logos/
├── concepts/
│ ├── concept-1.svg
│ ├── concept-2.svg
│ ├── concept-3.svg
│ └── ... (up to concept-5.svg)
└── preview.html
After all parallel agents complete:
logos/preview.html using the preview template belowlogos/preview.html in their browserWhen generating logos/preview.html, use this template. Replace {{CARDS}} with one card per SVG file. Set {{PHASE}} to "Concepts" during explore or "Iterations" during refine.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Logo Preview — {{PHASE}}</title>
<style>
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
padding: 2rem;
transition: background-color 0.3s, color 0.3s;
}
body.light { background: #f5f5f5; color: #333; }
body.dark { background: #1a1a1a; color: #eee; }
.header {
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 2rem;
}
h1 { font-size: 1.5rem; font-weight: 600; }
.toggle {
padding: 0.5rem 1rem;
border: 1px solid currentColor;
border-radius: 6px;
background: transparent;
color: inherit;
cursor: pointer;
font-size: 0.875rem;
}
.grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
gap: 1.5rem;
}
.card {
border: 1px solid rgba(128, 128, 128, 0.3);
border-radius: 12px;
overflow: hidden;
}
.card-img {
display: flex;
align-items: center;
justify-content: center;
padding: 2rem;
min-height: 240px;
}
body.light .card-img { background: #fff; }
body.dark .card-img { background: #2a2a2a; }
.card-img img {
max-width: 100%;
max-height: 200px;
}
.card-label {
padding: 0.75rem 1rem;
font-size: 0.875rem;
font-weight: 500;
border-top: 1px solid rgba(128, 128, 128, 0.3);
}
body.light .card-label { background: #fafafa; }
body.dark .card-label { background: #222; }
</style>
</head>
<body class="light">
<div class="header">
<h1>Logo Preview — {{PHASE}}</h1>
<button class="toggle" onclick="document.body.classList.toggle('dark'); document.body.classList.toggle('light'); this.textContent = document.body.classList.contains('dark') ? '☀️ Light' : '🌙 Dark';">🌙 Dark</button>
</div>
<div class="grid">
{{CARDS}}
</div>
</body>
</html>
During Phase 3 (Refine), add a "Favicon Size Check" section below the iteration grid. This renders each iteration at 64px, 32px, and 16px so the user can spot legibility issues early. Use this HTML pattern:
<h2>Favicon Size Check</h2>
<div style="display:flex;gap:2rem;flex-wrap:wrap;align-items:end;">
<!-- Repeat for each iteration -->
<div style="display:flex;flex-direction:column;align-items:center;gap:0.5rem;">
<div style="font-size:0.8rem;font-weight:500;">{{LABEL}}</div>
<div style="display:flex;gap:1rem;align-items:end;">
<div><img src="{{PATH}}" width="64" height="64"><div style="font-size:0.75rem;opacity:0.6;">64px</div></div>
<div><img src="{{PATH}}" width="32" height="32"><div style="font-size:0.75rem;opacity:0.6;">32px</div></div>
<div><img src="{{PATH}}" width="16" height="16"><div style="font-size:0.75rem;opacity:0.6;">16px</div></div>
</div>
</div>
</div>
This is especially important for icon-only logos. If details disappear at 32px, suggest simplifying (remove fine details, thicken strokes, drop decorative elements).
Each {{CARDS}} entry is:
<div class="card">
<div class="card-img">
<img src="{{PATH}}" alt="{{LABEL}}">
</div>
<div class="card-label">{{LABEL}}</div>
</div>
Where {{PATH}} is the relative path from logos/ (e.g., concepts/concept-1.svg or iterations/iteration-3.svg) and {{LABEL}} is the filename without extension (e.g., "concept-1" or "iteration-3").
During explore, show all concepts. During refine, show all iterations (most recent first).
Once the user picks a concept direction, iterate on it.
Single iteration — When the user gives specific feedback ("make the icon bigger", "change the blue to green"), apply the change directly and write the next iteration SVG yourself.
Batch variations — When exploring multiple directions at once ("try different color palettes", "show me 5 variations of the eye shape", "experiment with bar count"), use the Task tool to generate variations in parallel, just like Phase 2:
Task agent per variation, all in the same messagelogos/preview.html and present the resultsExample batch dispatch:
Task 1: "Take this base SVG [full SVG content] and create a variation with a warm color palette (reds, oranges, yellows). Write to logos/iterations/iteration-5.svg."
Task 2: "Take this base SVG [full SVG content] and create a variation with a cool color palette (blues, teals, purples). Write to logos/iterations/iteration-6.svg."
Task 3: "Take this base SVG [full SVG content] and create a variation with a monochrome palette (grays + one accent). Write to logos/iterations/iteration-7.svg."
Use subagent_type: "general-purpose" and mode: "bypassPermissions" for each agent. Always include the full base SVG content in each agent's prompt — agents do not share context.
logos/
├── iterations/
│ ├── iteration-1.svg # First refinement (based on chosen concept)
│ ├── iteration-2.svg
│ └── ...
└── preview.html # Regenerated to show iterations
logos/iterations/iteration-1.svglogos/preview.html after each iteration, showing all iterations (most recent first) so the user can compareWhen the user says "export", "I'm happy with this", "this is the one", or similar:
logos/export/ directorylogos/export/logo.svgbash <path-to-skill>/scripts/export.sh logos/export/logo.svg logos/export/
The script produces:
logo-16.pnglogo-32.pnglogo-48.pnglogo-192.pnglogo-512.pnglogo-1024.pnglogo-2048.png"No SVG-to-PNG converter found. Install one of:
npm install -g @aspect-build/resvg, or install Inkscape, or install librsvg. Then run export again."
The export script is bundled with this skill at scripts/export.sh relative to the SKILL.md file. Use the skill's directory path to locate it.
If the user asks to commit the logo to a project repo or create a PR:
public/favicon.svg, public/favicon.ico, public/pwa-*.png, public/apple-touch-icon.png, assets/logo.svg, ios/.../AppIcon.appiconset/, public/manifest.json, etc.chore/new-logofavicon.ico — 48px (use ImageMagick convert or magick)apple-touch-icon.png — 180pxpwa-192x192.png — 192pxpwa-512x512.png — 512pxAppIcon-512@2x.png — 1024pxchore: replace logo with new [description], push, and create a PR with a summary of what was updated