spotkit
Generate minimal, abstract, UI-inspired illustrations for software product features — as deterministic SVG. Use when asked for a feature illustration, product illustration, spot illustration, empty-state graphic, feature-card artwork, docs or developer-portal illustration, or a consistent illustration set/family for a product. Also use to turn a feature description or a product screenshot into an abstract UI illustration, to add a new illustration to an existing family, or to retheme an existing set.
含まれるファイル(82)
- SKILL.md9.9 KB
- .gitignore73 B
- AGENTS.md1.8 KB
- assets/illustration.css2.0 KB
- build.py23.8 KB
- check.py13.3 KB
- CITATION.cff855 B
- examples/approval.svg3.2 KB
- examples/audit.svg3.2 KB
- examples/billing.svg4.1 KB
- examples/categories.svg4.5 KB
- examples/connectors.svg4.5 KB
- examples/contact-dark.svg45.1 KB
- examples/contact-light.svg45.1 KB
- examples/contributors.svg3.8 KB
- examples/docs.svg5.5 KB
- examples/flat/dark/approval.svg2.8 KB
- examples/flat/dark/audit.svg2.7 KB
- examples/flat/dark/billing.svg3.6 KB
- examples/flat/dark/categories.svg4.0 KB
- examples/flat/dark/connectors.svg3.7 KB
- examples/flat/dark/contributors.svg3.4 KB
- examples/flat/dark/docs.svg4.9 KB
- examples/flat/dark/gateway.svg3.1 KB
- examples/flat/dark/notifications.svg1.9 KB
- examples/flat/dark/roles.svg6.2 KB
- examples/flat/dark/teams.svg4.6 KB
- examples/flat/dark/workspace.svg4.2 KB
- examples/flat/light/approval.svg2.8 KB
- examples/flat/light/audit.svg2.7 KB
- examples/flat/light/billing.svg3.6 KB
- examples/flat/light/categories.svg4.0 KB
- examples/flat/light/connectors.svg3.7 KB
- examples/flat/light/contributors.svg3.4 KB
- examples/flat/light/docs.svg4.9 KB
- examples/flat/light/gateway.svg3.1 KB
- examples/flat/light/notifications.svg1.9 KB
- examples/flat/light/roles.svg6.2 KB
- examples/flat/light/teams.svg4.6 KB
- examples/flat/light/workspace.svg4.2 KB
- examples/gallery.html106.6 KB
- examples/gateway.svg3.6 KB
- examples/notifications.svg2.2 KB
- examples/roles.svg6.9 KB
- examples/teams.svg5.1 KB
- examples/workspace.svg4.6 KB
- flatten.py2.5 KB
- icons.py36.5 KB
- LICENSE1.0 KB
- README.md10.8 KB
- references/archetypes.md7.3 KB
- references/checklist.md4.9 KB
- references/examples.md52.3 KB
- references/icons.md24.1 KB
- references/image-prompt.md3.5 KB
- references/metaphor.md6.7 KB
- references/primitives.md25.1 KB
- references/scaling.md4.8 KB
- references/screenshots.md4.1 KB
- references/sets.md4.7 KB
- references/theme.md6.4 KB
- site/.logo_inline.html10.4 KB
- site/build_site.py35.9 KB
- site/devesh.png13.0 KB
- site/favicon.svg10.4 KB
- site/fonts/geist-pixel.woff26.9 KB
- site/fonts/OFL-GeistPixel.txt4.4 KB
- site/iconkit-anatomy.svg23.2 KB
- site/iconkit-set.svg19.8 KB
- site/iconkit.html81.1 KB
- site/illos.py5.3 KB
- site/index.html242.6 KB
- site/llms.txt2.9 KB
- site/logo.svg10.5 KB
- site/og.png81.0 KB
- site/og.py1.6 KB
- site/robots.txt75 B
- site/sheet-dark.svg45.1 KB
- site/sheet-light.svg45.1 KB
- site/sitemap.xml239 B
- SPEC.md19.3 KB
- vercel.json528 B
SKILL.md(原文)
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Spotkit
Turn a feature description into a quiet, abstract illustration that looks like a product interface reduced to its most recognizable primitives.
The governing principle:
Abstract the interface, not the idea.
Someone should look at the result and think "I understand what this feature does" — not "that's a screenshot of the product."
Output format
Default to SVG. This style is pure geometry — hairline borders, exact radii, repeated placeholder bars, one stroke weight. Writing it directly gives exact, repeatable output and makes every illustration in a set provably identical in treatment. Image models fail at precisely these things, and fail hardest at consistency across a set.
Use references/image-prompt.md only when the user explicitly wants a prompt for
an external image model.
Workflow
Read SPEC.md first. It holds every number, the SVG template, the building
blocks and a complete example — enough to draw from. The references below are
for the decisions; open one only when a step needs it.
- Interpret the feature. One sentence: what does it actually do?
→
references/metaphor.md - Choose the metaphor. What relationship is this feature about — grouping, connecting, gating, packaging, reviewing, sequencing?
- Pick 2–5 primitives that carry that relationship. Not more.
- Pick one of the twelve layouts — then adapt it, don't invent.
→
SPEC.md§7. Choose by the relationship, then by how many elements the idea needs, then by what its neighbour already uses. - Start from that layout's example file (
SPEC.md§7 names it) and keep its geometry: panel, backdrop, float, card sizes and positions. Change only the content — the icon, what sits inside the cards, how many rows within the layout's limit. Icon paths come fromreferences/icons.md. If you can run Python here, copy the layout's function inbuild.pyand edit its content. - Check it. Run
python3 check.py your.svgif you can, then the list inSPEC.md§9. Simplify what they flag.
If the concept is genuinely ambiguous, offer 2–3 conceptual directions before drawing — different metaphors, never different styling.
The standing rule: adapt, don't invent
Composition is where models drift. Given the same brief, one run that adapted the Split layout produced something that sat in the family at a glance; another that invented a new arrangement produced a busier, off-centre piece that didn't — and the same brief in a different tool drifted further still. The twelve layouts have been balanced against each other; a fresh composition has not.
So, every time, in every tool:
- Adapt the nearest layout. Its geometry is fixed; its content is yours. Invent a new composition only when none of the twelve can carry the relationship — and say so in the delivery note, naming the rule that forced it.
- Centred and square. Weight on x=80, filling the 160 square. A landscape strip with empty space above and below is not a spot illustration.
- Few, large elements. Nothing that carries meaning is smaller than 9 units — that is 9 pixels at display size. If an idea needs more detail than that, it needs fewer elements, not smaller ones.
- Show change as states. A flow reads fastest as before → after: two cards and an arrow (L12), or one rail (L11). Not a rail and cards and a badge.
- Never improvise a value. Every number, colour and snippet comes from
SPEC.md. If a value you need is not there, reuse the nearest one that is.
What is fixed and what is yours
The skill separates the method from the look.
Fixed — these hold for any illustration in this genre:
- Abstract the interface, not the idea
- Text-independence — it must read with every label removed
- One dominant visual idea per illustration
- ~20–40% of real UI fidelity
- Legible depth hierarchy, however it is achieved
- Whitespace as structure, not leftover space
- Restraint: few icons, few colors, one interaction cue
- Internal consistency across a set
Yours — set once per project, then inherited by the whole family:
elevation model · edge treatment · overhang · corner language · stroke weight · icon style · palette · accent · density
A coherent combination of those is a style spec. One ships today — soft
shadow, fade-out edge, overhanging float, generous radii, hairline strokes,
monoline icons, warm grayscale, optional single accent, sparse density — and it
is what assets/ and examples/ implement. Additional directions are additive;
nothing in the method changes when one is added.
Invariants of the shipped spec
- One base panel, sized to its content. Not a fixed box — a timeline gets a narrow frame, a table of rows a wide one. Its edge either fades (open bottom: there is more) or is contained (closed: this is all of it). Choose by meaning.
- One thing carries the shadow. Usually a floating element breaking past the panel's edges; sometimes a raised row or the middle card of a fan. (The corner-chip layout's diagonal pair counts as one.)
- The elevation goes on the record being acted on, not on a decorative circle above it. When a medallion sits over a prominent first row, the row floats and the medallion stays flat.
- Placeholder bars, never words, always short-over-long, never equal widths.
- A backdrop is optional and varied — none, a plate, an offset sheet, or a twin stack. The same plate behind every illustration is what makes a set look mechanical.
- One stroke width and one stroke colour, everywhere. Width 0.5,
--il-line. Hierarchy comes from fills, opacity and elevation — never line weight. Separators are filled hairlines, not strokes. - Equal top and bottom padding inside every card, bottom never zero. This fails silently more than anything else here — verify it by arithmetic.
- The panel sits above its backdrop, and no two sheets share a top edge.
- Nothing overlaps what it sits between. A glyph in a gap fits inside it
with clearance; a rail is capped by its first node.
build.pyhas guards (fits,rail,padded) that raise rather than ship these — use them. - One icon family, one radius language, one shadow across the entire set.
- Every card carries a hairline, not just a shadow — at 160px there is no text to hold the hierarchy, so the surfaces have to, and a shadow alone does not separate white on near-white.
- The last content block sits inside the fade and half-dissolves. That
half-visible row says "and more" without adding anything. Equally: nothing
important may land below
y=112, or it dissolves mid-content. - Vary the layout, never the language. Monotony is the failure mode of this
style — a set where every piece is "header card, then rows" reads as one image
twelve times. See
archetypes.md.
Two things that will bite you
- Icons are Phosphor
regular, filled, on a 256 grid. Setfill, neverstroke. Bold reads heavy against 0.5-unit structural strokes. Paste the paths fromreferences/icons.md; never draw a glyph yourself. - CSS custom properties do not cross into
<img>or<object>. An SVG loaded that way shows fallback colors forever and will not follow dark mode. Inline the markup to theme it — and suffix everyidwhen you do, or masks and filters cross-apply between illustrations.
Reference files
Read the one you need; don't load them all.
| File | Read it when |
|---|---|
SPEC.md | Always, first. Every number, the template, one full example. |
references/examples.md | You picked a layout — its finished SVG, to adapt. |
references/icons.md | You need an icon — paste-ready Phosphor paths. |
references/metaphor.md | Translating a feature into a concept. Catalog of ~24 common SaaS features. |
references/archetypes.md | Choosing a layout. Twelve compositions and the four choices that generate them. |
references/primitives.md | You need the reasoning behind a building block. |
references/theme.md | Colors, tokens, light/dark, accent rules, deriving your own palette. |
references/scaling.md | Any canvas that is not a ~160px square. |
references/screenshots.md | The user supplied a screenshot of the real UI. |
references/sets.md | Producing or extending a family. |
references/checklist.md | Before delivering. Always. |
references/image-prompt.md | The user explicitly wants an image-model prompt. |
Delivering
The minimum useful answer is a short concept note plus the SVG:
Feature interpretation — one line. Metaphor — one line. Primitives — the 2–5 used. The SVG.
Don't pad it with explanation the user didn't ask for.
Assets
assets/illustration.css— token definitions, light and dark. Drop into a site.examples/— twelve exemplars, one per layout. Openexamples/gallery.htmlfor the contact sheet in both themes.icons.py— embedded Phosphor geometry (regular is what the system uses; bold is kept for anyone who wants a heavier variant).check.py— lints an SVG against the rules that fail silently (python3 check.py file.svg), and the docs againstbuild.py(--docs).build.py— the generator that produced them. Every constant in one place; change one and the whole family moves together. Worth copying for any set larger than about eight.
レビュー
まだレビューはありません。使ってみた感想をお寄せください。