AddThisFeature

Icon System

Draw every icon from one set, at one set of sizes, with one rule for accessible naming.

moderate Design Systems

What it adds

A single icon interface with a fixed size ladder, stable names, predictable alignment, and defined accessible behaviour.

What your agent is told to do

5
  1. 1

    Inventory every icon currently rendered in the app — inline vector markup, sprites, image files, icon fonts, glyphs pasted into labels — and route all of them through one interface so a size or colour change is made in one place.

  2. 2

    Fix a small size ladder, three or four steps, tied to the type scale, and make every icon align to the text it sits beside rather than to the box that contains it.

  3. 3

    Decide per usage whether an icon is decorative or meaningful. Decorative icons must be hidden from assistive technology; meaningful ones need an accessible name that says what the control does, not what the picture is.

  4. 4

    Make icons inherit colour from their context so a single icon works in a button, a menu, a warning, and a disabled control without a per-instance override.

  5. 5

    Do not leave a second icon library in place while migrating. Two sets of the same concept drift apart, and the day someone reaches for the wrong chevron is the day the app has two visual languages. Icon Stroke Normalization owns the drawing weight of the icons themselves; this entry owns the interface, sizing, naming, and accessibility around them.

Edge cases it handles

7
  • More than one icon library in the same codebase produces two versions of the same concept at different weights and different optical sizes. Pick one source, migrate the rest, and remove the abandoned dependency rather than leaving it available.
  • An icon that carries meaning on its own — a status dot, an error mark, a delete control with no text — needs a name announced to assistive technology. An icon beside a visible label is decoration and must be hidden, or screen reader users hear the same word twice.
  • Icons drawn on different canvases occupy different proportions of their box, so a set nominally at one size will look mismatched. Normalize the optical size so a square and a circle read as equally weighted at the same step.
  • Fill and stroke behaviour has to survive a theme change. An icon that relies on a light background will disappear or invert badly in dark mode unless its colour comes from the theme rather than being baked in.
  • Directional icons — arrows, chevrons, undo, next and previous — must mirror in right-to-left locales, while icons for time, media playback, and brand marks must not.
  • A name that does not exist in the set must fail visibly during development rather than rendering an empty box in production.
  • Icons used as the only content of a control still need a minimum touch target, which is larger than the icon itself.

Definition of done

9
  • Every icon in the app is rendered through one interface, and no second icon library remains installed.
  • Icon sizes come from a fixed ladder and align optically with adjacent text.
  • Decorative icons are hidden from assistive technology and meaningful ones carry an accessible name describing the action.
  • Icons inherit colour from their surroundings and remain legible in every theme.
  • Directional icons mirror in right-to-left locales and non-directional ones do not.
  • An unknown icon name produces a clear failure during development.
  • Icon-only controls meet the minimum touch target regardless of the icon's size.
  • The feature matches the existing design system.
  • No existing functionality is broken.

Related features

How it works

  1. 1

    Copy the link

    Grab the Markdown instruction URL for this feature.

  2. 2

    Give it to your AI

    Paste it into Claude Code, Cursor, v0, Lovable — whatever you build with.

  3. 3

    It inspects, then implements

    Your agent reads your existing app first, then adds the feature to fit it.

Works with your stack

These instructions are written to adapt. They tell the agent to detect your framework, match your existing design system, and reuse what you already have — rather than assuming a particular stack.

Need it tighter than that? Customize the feature and tell it exactly what you're running.