
Icon Design
- 100 installs
- 14 repo stars
- Updated March 2, 2026
- oakoss/agent-skills
Helps with ai & agent building tasks during AI-assisted development.
About
icon-design is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.
- icon-design
- AI & Agent Building
- AI-coding skill
Icon Design by the numbers
- 100 all-time installs (skills.sh)
- +4 installs in the week ending Aug 4, 2026 (Skillselion tracking)
- Ranked #4,381 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/oakoss/agent-skills --skill icon-designAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 100 |
|---|---|
| repo stars | ★ 14 |
| Last updated | March 2, 2026 |
| Repository | oakoss/agent-skills ↗ |
What it does
Helps with ai & agent building tasks during AI-assisted development.
Files
Icon Design
Select the right icon for the job. Maps concepts to icons across three modern libraries, provides ready-to-use templates, and prevents common mistakes like broken tree-shaking and inconsistent styles.
Quick Reference
| Concept | Lucide | Heroicons | Phosphor |
|---|---|---|---|
| Award/Quality | Trophy | trophy | Trophy |
| Price/Value | Tag | tag | Tag |
| Location | MapPin | map-pin | MapPin |
| Expertise | GraduationCap | academic-cap | GraduationCap |
| Support | MessageCircle | chat-bubble-left-right | ChatCircle |
| Security | Shield | shield-check | Shield |
| Speed | Zap | bolt | Lightning |
| Phone | Phone | phone | Phone |
Mail | envelope | Envelope | |
| User/Profile | User | user | User |
| Team | Users | user-group | Users |
| Settings | Settings | cog-6-tooth | Gear |
| Home | Home | home | House |
| Search | Search | magnifying-glass | MagnifyingGlass |
| Check/Success | Check | check | Check |
| Close/Cancel | X | x-mark | X |
| Menu | Menu | bars-3 | List |
| Calendar | Calendar | calendar | Calendar |
| Clock/Time | Clock | clock | Clock |
| Heart/Favorite | Heart | heart | Heart |
Library Selection
| Library | Best For | Package |
|---|---|---|
| Lucide | General use, React projects | lucide-react |
| Heroicons | Tailwind projects, minimal style | @heroicons/react |
| Phosphor | Weight variations needed | @phosphor-icons/react |
Default recommendation: Lucide (1,600+ icons, excellent React integration, dynamic loading via lucide-react/dynamic).
Selection Process
1. Identify the concept -- what does the label/title communicate? 2. Check semantic mapping -- see references/semantic-mapping.md 3. Choose library -- Lucide (default), Heroicons (Tailwind), Phosphor (weights) 4. Apply template -- see references/icon-templates.md 5. Verify consistency -- same style, same size within each section
Icon Style Rules
| Rule | Detail |
|---|---|
| No mixed styles | Use all outline OR all solid in a section |
| No emoji | Use proper icon components (tree-shakeable) |
| Use currentColor | Icons inherit text color via stroke="currentColor" |
| Semantic colors | Use text-primary, not text-blue-500 |
| Consistent sizing | Inline w-4 h-4, cards w-8 h-8, hero w-10 h-10 |
| Tree-shaking safe | Use explicit named imports and icon maps, never import * |
| Accessibility | Add aria-hidden="true" to decorative icons, aria-label to buttons |
Common Mistakes
| Mistake | Correct Pattern |
|---|---|
Importing all icons with import * as Icons breaking tree-shaking | Use explicit named imports and a static icon map |
| Mixing outline and solid icon styles within the same section | Pick one style per section and apply consistently |
| Using emoji instead of proper icon components | Always use tree-shakeable icon components from Lucide, Heroicons, or Phosphor |
Hardcoding color values like text-blue-500 on icons | Use semantic colors like text-primary so icons inherit theme changes |
| Choosing icons by visual appeal rather than semantic meaning | Map the concept first using the semantic mapping reference, then select the icon |
Missing aria-label on icon-only buttons | Add aria-label="Description" to buttons containing only icons |
| Using old Heroicons import paths without size prefix | Use @heroicons/react/24/outline with the size prefix |
Delegation
- Audit existing icon usage for consistency and tree-shaking issues: Use
Exploreagent to scan imports and identify mixed styles or wildcard imports - Migrate icons from Font Awesome or Material to modern libraries: Use
Taskagent with the migration guide reference - Plan icon system architecture for a design system: Use
Planagent to select library, define sizing conventions, and establish semantic mappings
References
- semantic-mapping.md -- Full concept-to-icon tables by category (quality, price, location, trade-specific, navigation, status)
- icon-templates.md -- React/HTML patterns with Tailwind (feature cards, buttons, inputs, navigation, status badges)
- library-comparison.md -- Lucide vs Heroicons vs Phosphor (features, bundle size, import patterns)
- migration-guide.md -- Font Awesome, Material Icons, Feather, and emoji to modern equivalents
- accessibility.md -- Decorative vs meaningful icons, aria attributes, screen reader patterns
Icon Accessibility
Proper handling of icons for screen readers and assistive technologies.
Decorative vs Meaningful Icons
Icons fall into two categories with different accessibility requirements.
Decorative Icons (Next to Text)
Icons alongside visible text are decorative -- the text already provides meaning. Hide them from screen readers:
<span className="flex items-center gap-2">
<Phone aria-hidden="true" className="w-4 h-4" />
<span>Call us</span>
</span>Meaningful Icons (Standalone)
Icons conveying information without accompanying text need an accessible label:
<CheckCircle aria-label="Completed" className="w-5 h-5 text-green-600" />Icon-Only Buttons
Buttons containing only an icon need aria-label on the button element:
<button aria-label="Open menu" className="p-2 rounded-lg hover:bg-muted">
<Menu className="w-6 h-6" />
</button>
<button aria-label="Close dialog" className="p-2 rounded-lg hover:bg-muted">
<X className="w-5 h-5" />
</button>
<button aria-label="Search" className="p-2 rounded-lg hover:bg-muted">
<Search className="w-5 h-5" />
</button>Icon-Only Links
Links containing only an icon follow the same pattern:
<a href="/settings" aria-label="Settings">
<Settings className="w-5 h-5" />
</a>Tooltip Wrapping for Lucide
Lucide icons do not accept HTML attributes like title directly. Wrap in a container:
<span title="Award Winner">
<Trophy aria-hidden="true" className="w-5 h-5" />
</span>Status Icons with Screen Reader Text
For status indicators, provide screen-reader-only text:
<span className="flex items-center gap-1.5">
<CheckCircle aria-hidden="true" className="w-4 h-4 text-green-600" />
<span>Active</span>
</span>When there is no visible text, use visually hidden text:
<span className="flex items-center">
<AlertTriangle aria-hidden="true" className="w-4 h-4 text-yellow-600" />
<span className="sr-only">Warning status</span>
</span>Color and Contrast
Icons must meet WCAG contrast requirements:
- Icons conveying information need 3:1 contrast ratio against background
- Decorative icons have no contrast requirement
- Do not rely on color alone to convey meaning -- pair with text or shape differences
<span className="flex items-center gap-1.5">
<XCircle aria-hidden="true" className="w-4 h-4 text-destructive" />
<span className="text-destructive">Error: Upload failed</span>
</span>Focus Indicators
Icon-only interactive elements must have visible focus indicators:
<button
aria-label="Delete item"
className="p-2 rounded-lg hover:bg-muted focus-visible:outline-2 focus-visible:outline-primary"
>
<Trash2 className="w-5 h-5" />
</button>Common Mistakes
| Mistake | Fix |
|---|---|
Icon-only button without aria-label | Add aria-label="Description" to the button |
Decorative icon without aria-hidden | Add aria-hidden="true" to icons alongside text |
Using title directly on Lucide component | Wrap in a <span title="..."> element |
| Relying on color alone for icon meaning | Pair icons with text or use distinct shapes |
| Missing focus indicator on icon buttons | Use focus-visible:outline-* Tailwind utilities |
Icon Templates
Ready-to-use patterns for common icon layouts using Tailwind v4 semantic colors.
Feature Card Icon (Rounded Square)
import { Trophy } from 'lucide-react';
<div className="w-14 h-14 rounded-xl bg-primary/10 flex items-center justify-center">
<Trophy className="w-8 h-8 text-primary" />
</div>;Heroicons variant:
import { TrophyIcon } from '@heroicons/react/24/outline';
<div className="w-14 h-14 rounded-xl bg-primary/10 flex items-center justify-center">
<TrophyIcon className="w-8 h-8 text-primary" />
</div>;Feature Card Icon (Circle)
import { Shield } from 'lucide-react';
<div className="w-12 h-12 rounded-full bg-primary/10 flex items-center justify-center">
<Shield className="w-6 h-6 text-primary" />
</div>;Inline Icon (Contact Info)
import { Phone, Mail, MapPin } from 'lucide-react'
<span className="inline-flex items-center gap-2 text-muted-foreground">
<Phone aria-hidden="true" className="w-4 h-4" />
<span>1300 123 456</span>
</span>
<span className="inline-flex items-center gap-2 text-muted-foreground">
<Mail aria-hidden="true" className="w-4 h-4" />
<span>hello@example.com</span>
</span>
<span className="inline-flex items-center gap-2 text-muted-foreground">
<MapPin aria-hidden="true" className="w-4 h-4" />
<span>Sydney, Australia</span>
</span>List Item with Icon
import { Check } from 'lucide-react';
<ul className="space-y-3">
<li className="flex items-start gap-3">
<Check
aria-hidden="true"
className="w-5 h-5 text-primary flex-shrink-0 mt-0.5"
/>
<span>First benefit or feature</span>
</li>
<li className="flex items-start gap-3">
<Check
aria-hidden="true"
className="w-5 h-5 text-primary flex-shrink-0 mt-0.5"
/>
<span>Second benefit or feature</span>
</li>
</ul>;Button with Icon
import { ArrowRight } from 'lucide-react'
<button className="inline-flex items-center gap-2 px-4 py-2 bg-primary text-primary-foreground rounded-lg hover:bg-primary/90">
<span>Get Started</span>
<ArrowRight aria-hidden="true" className="w-4 h-4" />
</button>
<button className="inline-flex items-center gap-2 px-4 py-2 border border-border rounded-lg hover:bg-muted">
<span>Learn More</span>
<ArrowRight aria-hidden="true" className="w-4 h-4" />
</button>Icon-Only Button
import { Menu, X, Search } from 'lucide-react'
<button
className="p-2 rounded-lg hover:bg-muted transition-colors"
aria-label="Open menu"
>
<Menu className="w-6 h-6" />
</button>
<button
className="p-2 rounded-lg hover:bg-muted transition-colors"
aria-label="Close"
>
<X className="w-5 h-5" />
</button>
<button
className="p-2 rounded-lg hover:bg-muted transition-colors"
aria-label="Search"
>
<Search className="w-5 h-5" />
</button>Feature Grid Card
import { Shield, Zap, Users, Trophy } from 'lucide-react'
const features = [
{ icon: Shield, title: 'Secure', description: 'Enterprise-grade security' },
{ icon: Zap, title: 'Fast', description: 'Lightning quick response' },
{ icon: Users, title: 'Support', description: '24/7 expert help' },
{ icon: Trophy, title: 'Award-Winning', description: 'Industry recognized' },
]
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-6">
{features.map(({ icon: Icon, title, description }) => (
<div key={title} className="p-6 rounded-xl bg-card border border-border">
<div className="w-12 h-12 rounded-lg bg-primary/10 flex items-center justify-center mb-4">
<Icon aria-hidden="true" className="w-6 h-6 text-primary" />
</div>
<h3 className="font-semibold text-card-foreground mb-2">{title}</h3>
<p className="text-sm text-muted-foreground">{description}</p>
</div>
))}
</div>Status Badge with Icon
import { CheckCircle, XCircle, AlertTriangle, Clock } from 'lucide-react'
<span className="inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full bg-green-500/10 text-green-600 text-sm">
<CheckCircle aria-hidden="true" className="w-4 h-4" />
<span>Active</span>
</span>
<span className="inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full bg-destructive/10 text-destructive text-sm">
<XCircle aria-hidden="true" className="w-4 h-4" />
<span>Failed</span>
</span>
<span className="inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full bg-yellow-500/10 text-yellow-600 text-sm">
<AlertTriangle aria-hidden="true" className="w-4 h-4" />
<span>Warning</span>
</span>
<span className="inline-flex items-center gap-1.5 px-2.5 py-1 rounded-full bg-muted text-muted-foreground text-sm">
<Clock aria-hidden="true" className="w-4 h-4" />
<span>Pending</span>
</span>Navigation Item
import { Home, Users, Settings, type LucideIcon } from 'lucide-react';
interface NavItemProps {
icon: LucideIcon;
label: string;
href: string;
active?: boolean;
}
function NavItem({ icon: Icon, label, href, active }: NavItemProps) {
return (
<a
href={href}
className={cn(
'flex items-center gap-3 px-3 py-2 rounded-lg transition-colors',
active
? 'bg-primary/10 text-primary'
: 'text-muted-foreground hover:bg-muted hover:text-foreground',
)}
>
<Icon aria-hidden="true" className="w-5 h-5" />
<span>{label}</span>
</a>
);
}Input with Icon
import { Search, Mail } from 'lucide-react'
<div className="relative">
<Search aria-hidden="true" className="absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground" />
<input
type="text"
placeholder="Search..."
className="w-full pl-10 pr-4 py-2 rounded-lg border border-border bg-background focus:outline-none focus:ring-2 focus:ring-primary"
/>
</div>
<div className="relative">
<Mail aria-hidden="true" className="absolute left-3 top-1/2 -translate-y-1/2 w-4 h-4 text-muted-foreground" />
<input
type="email"
placeholder="Enter your email"
className="w-full pl-10 pr-4 py-2 rounded-lg border border-border bg-background focus:outline-none focus:ring-2 focus:ring-primary"
/>
</div>Dynamic Icon Map (Tree-Shaking Safe)
import { Home, Users, Settings, type LucideIcon } from 'lucide-react';
const ICON_MAP: Record<string, LucideIcon> = {
home: Home,
users: Users,
settings: Settings,
};
function DynamicIcon({
name,
...props
}: { name: string } & React.SVGProps<SVGSVGElement>) {
const Icon = ICON_MAP[name];
if (!Icon) return null;
return <Icon {...props} />;
}Color Reference
All templates use Tailwind v4 semantic tokens:
| Token | Use |
|---|---|
text-primary | Icon accent color |
bg-primary/10 | Icon background (10% opacity) |
text-muted-foreground | Secondary/subtle icons |
text-foreground | Default icon color |
text-card-foreground | Icons on card backgrounds |
text-destructive | Error/delete icons |
Never use raw colors like text-blue-500 -- always use semantic tokens.
Library Comparison
Detailed comparison of Lucide, Heroicons, and Phosphor icon libraries.
Overview
| Feature | Lucide | Heroicons | Phosphor |
|---|---|---|---|
| Icons | 1,600+ | 316 | 7,000+ |
| Weights | 1 | 4 (outline, solid, mini, micro) | 6 (thin to fill) |
| Package | lucide-react | @heroicons/react | @phosphor-icons/react |
| Size (gzip) | ~5KB per icon set | ~3KB | ~7KB |
| Tree-shakeable | Yes | Yes | Yes |
| License | ISC | MIT | MIT |
| Origin | Fork of Feather | Tailwind Labs | Independent |
Lucide (Default Recommendation)
Best for React/Vue/Svelte projects, general-purpose applications, and teams familiar with Feather Icons.
npm install lucide-reactimport { Home, Settings, User } from 'lucide-react'
<Home className="w-6 h-6" />
<Settings className="w-6 h-6" strokeWidth={1.5} />Strengths: Large library with frequent updates, excellent React integration, PascalCase component names, customizable stroke width, dynamic loading via lucide-react/dynamic.
Dynamic Icon Loading
For icons loaded by name (from database, CMS, etc.), use the DynamicIcon component. Not recommended for static usage due to build performance impacts:
import { DynamicIcon } from 'lucide-react/dynamic';
<DynamicIcon name="camera" color="red" size={48} />;Custom Icons from @lucide/lab
Use the generic Icon component to render experimental icons from @lucide/lab:
import { Icon } from 'lucide-react';
import { coconut } from '@lucide/lab';
<Icon iconNode={coconut} size={24} />;Limitations: No weight variations (outline only), some inconsistency from community contributions.
Heroicons
Best for Tailwind CSS projects, minimal aesthetic, and projects using Tailwind UI components.
npm install @heroicons/reactimport { HomeIcon } from '@heroicons/react/24/outline';
import { HomeIcon } from '@heroicons/react/24/solid';
import { HomeIcon } from '@heroicons/react/20/solid';
import { HomeIcon } from '@heroicons/react/16/solid';
<HomeIcon className="w-6 h-6" />;Strengths: Official Tailwind integration, consistent design, four styles per icon (outline, solid, mini, micro), three sizes (16, 20, 24px).
Limitations: Smaller library (316 icons), verbose import paths.
Phosphor
Best for weight variations (thin, light, regular, bold, fill, duotone), large icon needs, and design-heavy projects.
npm install @phosphor-icons/reactimport { House, Gear, User } from '@phosphor-icons/react'
<House size={24} />
<House size={24} weight="thin" />
<House size={24} weight="bold" />
<House size={24} weight="fill" />
<House size={24} weight="duotone" />Strengths: Largest library (7,000+ icons), 6 weight variations per icon, consistent design language, unique duotone variant.
Limitations: Larger bundle if using multiple weights, less React-ecosystem adoption.
Tree-Shaking Patterns
All three libraries support tree-shaking with specific imports:
import { Home, User, Settings } from 'lucide-react';
import { HomeIcon, UserIcon } from '@heroicons/react/24/outline';
import { House, User, Gear } from '@phosphor-icons/react';Never use wildcard imports -- they bundle all icons:
import * as Icons from 'lucide-react';
const Icon = Icons[iconName];Use an explicit map instead:
import { Home, User, Settings, type LucideIcon } from 'lucide-react';
const ICON_MAP: Record<string, LucideIcon> = {
home: Home,
user: User,
settings: Settings,
};
const Icon = ICON_MAP[iconName];Bundle Size (20 Icons)
| Library | Bundle Impact |
|---|---|
| Lucide | ~15KB |
| Heroicons | ~12KB |
| Phosphor (single weight) | ~18KB |
| Phosphor (6 weights) | ~100KB |
Recommendation Matrix
| Project Type | Recommended Library |
|---|---|
| React + Tailwind | Heroicons or Lucide |
| React general | Lucide |
| Vue/Svelte | Lucide |
| Design-heavy, brand-consistent | Phosphor |
| Minimal bundle size | Heroicons |
| Maximum icon variety | Phosphor |
| Legacy Feather migration | Lucide |
Migration Guide
Migrate from legacy icon libraries to modern alternatives.
Font Awesome to Lucide/Phosphor
| Font Awesome | Lucide | Phosphor |
|---|---|---|
fa-home | Home | House |
fa-user | User | User |
fa-users | Users | Users |
fa-cog / fa-gear | Settings | Gear |
fa-search | Search | MagnifyingGlass |
fa-envelope | Mail | Envelope |
fa-phone | Phone | Phone |
fa-map-marker | MapPin | MapPin |
fa-check | Check | Check |
fa-times / fa-close | X | X |
fa-plus | Plus | Plus |
fa-trash | Trash2 | Trash |
fa-edit / fa-pencil | Pencil | Pencil |
fa-star | Star | Star |
fa-heart | Heart | Heart |
fa-bell | Bell | Bell |
fa-calendar | Calendar | Calendar |
fa-clock | Clock | Clock |
fa-download | Download | Download |
fa-upload | Upload | Upload |
fa-share | Share2 | Share |
fa-link | Link | Link |
fa-lock | Lock | Lock |
fa-eye | Eye | Eye |
fa-eye-slash | EyeOff | EyeSlash |
fa-bars | Menu | List |
fa-chevron-down | ChevronDown | CaretDown |
fa-external-link | ExternalLink | ArrowSquareOut |
fa-shopping-cart | ShoppingCart | ShoppingCart |
fa-credit-card | CreditCard | CreditCard |
fa-tag | Tag | Tag |
fa-trophy | Trophy | Trophy |
fa-shield | Shield | Shield |
fa-bolt / fa-lightning | Zap | Lightning |
fa-spinner | Loader2 | CircleNotch |
Font Awesome Style Mapping
| FA Style | Lucide | Heroicons | Phosphor |
|---|---|---|---|
fa-regular (outline) | Default | /24/outline | weight="regular" |
fa-solid | N/A | /24/solid | weight="fill" |
fa-light | N/A | N/A | weight="light" |
fa-thin | N/A | N/A | weight="thin" |
fa-duotone | N/A | N/A | weight="duotone" |
Material Icons to Lucide/Phosphor
| Material Icon | Lucide | Phosphor |
|---|---|---|
home | Home | House |
person | User | User |
people / group | Users | Users |
settings | Settings | Gear |
search | Search | MagnifyingGlass |
mail / email | Mail | Envelope |
phone | Phone | Phone |
place / location_on | MapPin | MapPin |
check | Check | Check |
close | X | X |
delete | Trash2 | Trash |
edit | Pencil | Pencil |
star | Star | Star |
favorite | Heart | Heart |
notifications | Bell | Bell |
event / calendar_today | Calendar | Calendar |
schedule / access_time | Clock | Clock |
description | FileText | FileText |
visibility | Eye | Eye |
visibility_off | EyeOff | EyeSlash |
menu | Menu | List |
open_in_new | ExternalLink | ArrowSquareOut |
shopping_cart | ShoppingCart | ShoppingCart |
security | Shield | Shield |
flash_on / bolt | Zap | Lightning |
autorenew / sync | RefreshCw | ArrowsClockwise |
Feather Icons to Lucide
Lucide is a direct fork of Feather Icons with the same naming:
import { Home, User, Settings } from 'feather-icons-react';
import { Home, User, Settings } from 'lucide-react';Migration is a package swap -- icon names are identical in PascalCase.
Emoji to Icon Components
Never use emoji for UI icons. Replace with proper icon components:
| Emoji | Lucide | Heroicons | Phosphor |
|---|---|---|---|
| check | Check | check | Check |
| cross | X | x-mark | X |
| warn | AlertTriangle | exclamation-triangle | Warning |
| info | Info | information-circle | Info |
| phone | Phone | phone | Phone |
Mail | envelope | Envelope | |
| pin | MapPin | map-pin | MapPin |
| lock | Lock | lock-closed | Lock |
| bolt | Zap | bolt | Lightning |
| star | Star | star | Star |
| heart | Heart | heart | Heart |
| award | Trophy | trophy | Trophy |
| bell | Bell | bell | Bell |
| clock | Clock | clock | Clock |
| lens | Search | magnifying-glass | MagnifyingGlass |
| user | User | user | User |
| house | Home | home | House |
| gear | Settings | cog-6-tooth | Gear |
Why icons over emoji: consistent styling across platforms, accessible to screen readers, themeable with CSS, tree-shakeable for performance.
Semantic Icon Mapping
Maps concepts to icons across Lucide, Heroicons, and Phosphor libraries. Find the category matching your content, look up the concept, and choose from recommended icons.
Quality and Recognition
| Concept | Lucide | Heroicons | Phosphor |
|---|---|---|---|
| Award-Winning | Trophy | trophy | Trophy |
| Quality Assured | BadgeCheck | check-badge | SealCheck |
| Certified | Award | document-check | Certificate |
| Excellence | Star | star | Star |
| Trusted | ShieldCheck | shield-check | ShieldCheck |
| Verified | CheckCircle | check-badge | CheckCircle |
| Best/Top Rated | Crown | star | Crown |
| Premium | Gem | sparkles | Diamond |
Price and Value
| Concept | Lucide | Heroicons | Phosphor |
|---|---|---|---|
| Best Price | Tag | tag | Tag |
| Value | Gift | gift | Gift |
| Savings | Percent | receipt-percent | Percent |
| Free Quote | FileText | document-text | FileText |
| Affordable | DollarSign | currency-dollar | CurrencyDollar |
| No Hidden Fees | Eye | eye | Eye |
| Budget Friendly | Wallet | wallet | Wallet |
| Money Back | RefreshCcw | arrow-path | ArrowCounterClockwise |
Location and Local
| Concept | Lucide | Heroicons | Phosphor |
|---|---|---|---|
| Local Business | MapPin | map-pin | MapPin |
| Service Area | Map | map | Map |
| Global | Globe | globe-alt | Globe |
| Community | Users | users | Users |
| Nearby | Navigation | map-pin | NavigationArrow |
| Directions | Route | map | Path |
Expertise and Professional
| Concept | Lucide | Heroicons | Phosphor |
|---|---|---|---|
| Expert | GraduationCap | academic-cap | GraduationCap |
| Professional | Briefcase | briefcase | Briefcase |
| Experienced | Clock | clock | Clock |
| Team | Users | user-group | Users |
| Qualified | FileCheck | document-check | FileCheck |
| Specialists | Beaker | beaker | Flask |
| Industry Leader | TrendingUp | arrow-trending-up | TrendUp |
| Knowledge | BookOpen | book-open | BookOpen |
Support and Service
| Concept | Lucide | Heroicons | Phosphor |
|---|---|---|---|
| Support | MessageCircle | chat-bubble-left-right | ChatCircle |
| Contact | Phone | phone | Phone |
| Help | LifeBuoy | lifebuoy | Lifebuoy |
| Available | Clock | clock | Clock |
| Responsive | Zap | bolt | Lightning |
| Friendly | Smile | face-smile | Smiley |
| Live Chat | MessageSquare | chat-bubble-left | Chat |
| FAQ | HelpCircle | question-mark-circle | Question |
Security and Trust
| Concept | Lucide | Heroicons | Phosphor |
|---|---|---|---|
| Secure | Shield | shield-check | Shield |
| Safe | ShieldCheck | shield-check | ShieldCheck |
| Protected | Lock | lock-closed | Lock |
| Private | EyeOff | eye-slash | EyeSlash |
| Insured | FileCheck | document-check | FileCheck |
| Licensed | BadgeCheck | check-badge | Certificate |
| Encrypted | KeyRound | key | Key |
Speed and Efficiency
| Concept | Lucide | Heroicons | Phosphor |
|---|---|---|---|
| Fast | Zap | bolt | Lightning |
| Efficient | TrendingUp | arrow-trending-up | TrendUp |
| Same Day | Calendar | calendar | Calendar |
| Emergency | AlertTriangle | exclamation-triangle | Warning |
| 24/7 | Clock | clock | Clock |
| Instant | Zap | bolt | Lightning |
| On Time | Timer | clock | Timer |
Trade-Specific
| Concept | Lucide | Heroicons | Phosphor |
|---|---|---|---|
| Tools/Repairs | Wrench | wrench-screwdriver | Wrench |
| Electrical | Zap | bolt | Lightning |
| Plumbing | Droplet | beaker | Drop |
| Building | Building2 | building-office-2 | Buildings |
| Cleaning | Sparkles | sparkles | Sparkle |
| Transport | Truck | truck | Truck |
| Food/Restaurant | UtensilsCrossed | cake | ForkKnife |
| Health/Medical | Heart | heart | Heart |
| Legal | Scale | scale | Scales |
| Finance | Banknote | banknotes | Money |
| Education | GraduationCap | academic-cap | GraduationCap |
| Technology | Cpu | cpu-chip | Cpu |
| Creative | Palette | paint-brush | Palette |
| Photography | Camera | camera | Camera |
| Fitness | Dumbbell | heart | Barbell |
| Real Estate | Home | home | House |
| Automotive | Car | truck | Car |
Contact Information
| Element | Lucide | Heroicons | Phosphor |
|---|---|---|---|
| Phone | Phone | phone | Phone |
| Mobile | Smartphone | device-phone-mobile | DeviceMobile |
Mail | envelope | Envelope | |
| Address | MapPin | map-pin | MapPin |
| Website | Globe | globe-alt | Globe |
| Hours | Clock | clock | Clock |
Social media icons (Facebook, Instagram, LinkedIn, Twitter/X, YouTube) should use official brand SVGs or react-icons/fa, not generic icon libraries.
Navigation and Actions
| Element | Lucide | Heroicons | Phosphor |
|---|---|---|---|
| Menu | Menu | bars-3 | List |
| Close | X | x-mark | X |
| Back | ArrowLeft | arrow-left | ArrowLeft |
| Forward | ArrowRight | arrow-right | ArrowRight |
| Home | Home | home | House |
| Search | Search | magnifying-glass | MagnifyingGlass |
| Filter | Filter | funnel | Funnel |
| Sort | ArrowUpDown | arrows-up-down | ArrowsDownUp |
| Settings | Settings | cog-6-tooth | Gear |
| Logout | LogOut | arrow-right-on-rectangle | SignOut |
| Login | LogIn | arrow-left-on-rectangle | SignIn |
Status and Feedback
| Element | Lucide | Heroicons | Phosphor |
|---|---|---|---|
| Success | CheckCircle | check-circle | CheckCircle |
| Error | XCircle | x-circle | XCircle |
| Warning | AlertTriangle | exclamation-triangle | Warning |
| Info | Info | information-circle | Info |
| Loading | Loader2 | arrow-path | CircleNotch |
| Pending | Clock | clock | Clock |
Decision Tree
When the concept does not match the tables above:
1. Achievement/quality? -- Trophy, Star, Award, BadgeCheck 2. Money/cost? -- Tag, DollarSign, Wallet, Percent 3. Place/location? -- MapPin, Globe, Map, Navigation 4. People/users? -- User, Users, UserGroup 5. Communication? -- MessageCircle, Phone, Mail, Chat 6. Safety/security? -- Shield, Lock, ShieldCheck, Key 7. Time/speed? -- Zap, Clock, Timer, Calendar 8. Industry-specific? -- Check the Trade-Specific table 9. Generic positive? -- CheckCircle, ThumbsUp, Sparkles 10. Generic feature? -- Sparkles, Star, Zap