An agent skill that walks you from a blank page to a production-ready Shopify app icon — discovery questions → concept ideas → clean SVG → iterative feedback → PNG export at every size the Shopify App Store, admin, and marketing surfaces need.
npx skills add ratul0/shopify-icon-forgeThat's it. Works with Claude Code, Cursor, Codex, OpenCode, and 40+ other agents via the skills CLI.
When you ask your agent something like "design an icon for my Shopify app StockPing", the skill takes over and runs a 5-phase conversational workflow:
- Discovery — 3-4 short questions (app name, purpose, brand color, style). No interrogation.
- Concept ideas — 3-4 distinct concepts with names, descriptions, and rationale. Words only — no SVG yet. Honors a built-in cliché list (no gears, no shopping carts, no circular arrows for reorder apps).
- SVG generation — once you pick a concept, it emits a clean inline SVG (
viewBox="0 0 200 200", no embedded fonts, clean paths). - Feedback loop — iterate on the SVG. Every version is numbered (v1, v2, v3…) and re-rendered in full.
- Export — when you approve, it runs a bundled Node.js script (using
sharp) to generate the full icon size set:shopify-listing-1200.png(1200×1200, transparent) — App Store listingfavicon-32.png/favicon-64.png— Shopify admin faviconsocial-1200x630.png— OG / Twitter card with icon centered on your brand colorapp-store-512.png/app-store-1024.png— iOS/Android-style previews
All output files land in ./icon-exports/ in your working directory.
You: I'm building a Shopify app called StockPing. It sends back-in-stock
alerts to merchants. Brand color #E66B2E. Minimal geometric style.
Agent: Got it — StockPing, back-in-stock alerts, #E66B2E, minimal geometric.
Here are four directions:
1. Pulse Dot — A single filled dot with a thin concentric ring,
slightly offset. Nods at the "ping" signal without being literal.
2. Notch Mark — A solid rounded square with a clean triangular notch
cut from one edge. Reads as "something missing → filled".
3. Arrow Flag — A minimal pennant shape angled upward.
Restock/return-to-shelf metaphor, not a literal arrow.
4. Step Tower — Three stacked bars of increasing height.
Inventory climbing back up.
Which direction?
You: 1 looks great.
Agent: [emits SVG inline]
**v1** — Pulse Dot with a 12% offset ring. What would you change?
You: Perfect, ship it.
Agent: [saves icon-final.svg, runs export script, returns 6 PNGs]
Done — 6 files in ./icon-exports/.
skills/shopify-icon-forge/
├── SKILL.md # The workflow — this is what the agent reads
├── scripts/
│ └── export-icon.mjs # Node.js + sharp, called during Phase 5
├── references/
│ └── icon-design-principles.md # Deeper checklist, loaded on demand
└── evals/
├── evals.json # 4 test cases for phases 1-3
└── phase5_test.sh # Standalone bash test for the export script
- Node ≥ 18 — the export script uses modern ESM + top-level await
sharp— will be auto-installed on first Phase 5 export if missing. If your project already hassharp, the skill uses that.
After installing, run the standalone export test:
bash ~/.claude/skills/shopify-icon-forge/evals/phase5_test.shYou should see 7 PASS: lines and phase5_test: OK. This generates a sample icon and verifies all 6 PNG outputs exist at the correct dimensions with an opaque brand-color background on the social card.
This skill was developed using the skill-creator workflow: draft → evals → run in subagents → review → iterate. Three iterations, 26 assertions across 4 test cases, final score 95.8% with-skill vs 65.4% baseline (+30pp lift). Full iteration history is in the repo's git log.
The evals include a deliberate "reject-then-abstract" multi-turn case to verify the skill handles rejection feedback gracefully without locking into early concepts.
MIT — see LICENSE.
PRs welcome, especially for:
- New cliché additions to the references list (post an example of the cliché in the wild)
- Export format additions (e.g., Shopify Plus custom sizes, Chrome extension icons)
- Additional eval test cases
If you build a similar skill for other app ecosystems (iOS, Android, Chrome Web Store), open an issue — I'd love to link to it.