Hogwarts Logo
Hogwarts
FeaturesBlogPricingDocumentation

Command Palette

Search for a command to run...

10
Login

Build by Databayt, source code available on GitHub

  • Introduction
  • Pitch
  • MVP
  • PRD
  • Get Started
  • Architecture
  • Structure
  • Pattern
  • Stack
  • Icons
  • Dashboard
  • Rebound
  • Database
  • Attendance
  • Localhost
  • Contributing
  • Shared Economy
  • Competitors
  • Inspiration
  • Demo
  • Listings
  • Business

Icons

PreviousNext

Unified icon system with 180+ icons, 12 categories, and full automation

Icons

A unified, theme-aware icon system built on the shadcn pattern. All icons use currentColor and inherit from parent text color.

Migration Progress

Last Updated: January 2026

MetricCurrentTargetStatus
Total Icons180+-✅
Direct lucide imports7030🔄 15% complete
Unified imports125 files100%🔄 In progress
Error boundaries45/45100%✅ Complete
Form components47/48100%✅ Complete

Recent Additions (Phase 1)

62 new icons added for form and UI components:

  • Loaders: loader2, loaderCircle
  • Status: check, checkCircle, circleCheck, circleX, circleAlert, checkCircle2
  • Navigation: chevronLeft, chevronRight, arrowUp
  • Files: file, fileText, fileSpreadsheet, fileAudio, image, video
  • Actions: upload, download, save, send, edit, pencil, copy, trash2
  • Communication: bell, bellOff, mail, phone, smartphone, messageSquare
  • Education: graduationCap, award, medal, trophy, school, landmark, library, bookOpen
  • UI Elements: plus, minus, x, close, search, filter, settings, eye, eyeOff, moon, sun
  • Misc: user, clock, calendar, mapPin, palette, lightbulb, info, heart, wrench, sparkles, atSign, paperclip, triangleAlert, clipboardList

Quick Start

import { Icons } from "@/components/icons"
 
export function Example() {
  return (
    <div className="flex items-center gap-2">
      <Icons.github className="size-5" />
      <Icons.check className="size-5 text-green-500" />
      <Icons.alertCircle className="text-destructive size-5" />
    </div>
  )
}

System Overview

MetricValue
Total Icons180+
Categories12
Registry EntriesFull metadata for all icons
Theme SupportLight/dark via currentColor
Import PatternUnified namespace (Icons.name)

Features

FeatureDescription
Theme-awareIcons use currentColor - automatically adapt to light/dark mode
180+ iconsSystem, UI, brand, development, and illustrative icons
12 categoriesOrganized by domain and usage
Full registrySearchable metadata with tags and descriptions
Tree-shakableImport individual icons for smaller bundles
Type-safeFull TypeScript support with IconName type
AutomationCLI commands for migration, audit, and management

Anthropic Design System

Browse all 100+ icons and illustrations from Anthropic's design system. Click any icon for tags, path, and usage details.

112 icons found

Logos

Claude

MCP

Navigation

UI

Development

Social

Content

Pictograms

Anthropic


Icon Categories

System Icons (Core UI)

Navigation, actions, and interface elements.

IconNameUsage
alertCircleAlert Circle<Icons.alertCircle />
checkCheck<Icons.check />
xClose/Cancel<Icons.x />
plusAdd<Icons.plus />
minusRemove<Icons.minus />
searchSearch<Icons.search />
settingsSettings<Icons.settings />
editEdit<Icons.edit />
copyCopy<Icons.copy />
trashDelete<Icons.trash />
uploadUpload<Icons.upload />
downloadDownload<Icons.download />
eyeView<Icons.eye />
eyeOffHide<Icons.eyeOff />
lockLock<Icons.lock />
userUser<Icons.user />
usersUsers<Icons.users />
dashboardDashboard<Icons.dashboard />

Navigation Icons

IconNameUsage
arrowLeftArrow Left<Icons.arrowLeft />
arrowRightArrow Right<Icons.arrowRight />
chevronDownChevron Down<Icons.chevronDown />
chevronUpChevron Up<Icons.chevronUp />
chevronLeftChevron Left<Icons.chevronLeft />
chevronRightChevron Right<Icons.chevronRight />

Theme Icons

IconNameUsage
moonDark Mode<Icons.moon />
sunLight Mode<Icons.sun />

Loading & Status

IconNameUsage
spinnerLoading Spinner<Icons.spinner className="animate-spin" />
refreshRefresh/Retry<Icons.refresh />
moreHorizontalMore (Horizontal)<Icons.moreHorizontal />
moreVerticalMore (Vertical)<Icons.moreVertical />

Integration Icons

Third-party brands and technologies.

IconNameUsage
nextjsNext.js<Icons.nextjs />
reactReact<Icons.react />
typescriptTypeScript<Icons.typescript />
tailwindcssTailwind CSS<Icons.tailwindcss />
shadcnuishadcn/ui<Icons.shadcnui />
prismaPrisma<Icons.prisma />
zodZod<Icons.zod />
githubGitHub<Icons.github />
gitGit<Icons.git />
figmaFigma<Icons.figma />
discordDiscord<Icons.discord />
framerFramer<Icons.framer />
claudeClaude AI<Icons.claude />
patreonPatreon<Icons.patreon />

Development Icons

IconNameUsage
mcpMCP Protocol<Icons.mcp />
cursorCursor IDE<Icons.cursor />
extensionsExtensions<Icons.extensions />

Programming Language Icons

IconNameUsage
pythonPython<Icons.python />
rustRust<Icons.rust />
rR Language<Icons.r />

Content Icons

IconNameUsage
docsDocumentation<Icons.docs />
reportReport<Icons.report />
pdfPDF<Icons.pdf />
logbookLogbook<Icons.logbook />
proposalProposal<Icons.proposal />
fileTextFile Text<Icons.fileText />

Finance Icons

IconNameUsage
invoiceInvoice<Icons.invoice />
salarySalary<Icons.salary />
subscriptionSubscription<Icons.subscription />

Communication Icons

IconNameUsage
mailEmail<Icons.mail />
notificationNotification<Icons.notification />

Rating Icons

IconNameUsage
excellentExcellent<Icons.excellent />
goodGood<Icons.good />
averageAverage<Icons.average />
poorPoor<Icons.poor />

Anthropic UI Icons

anthropicA
sparkle
terminal
codeWindow
chat
lightning
handsBuild
checklist

Import Patterns

Namespace Import (Recommended)

import { Icons } from "@/components/icons"
 
<Icons.github className="size-5" />
<Icons.check className="size-5 text-green-500" />
<Icons.spinner className="size-5 animate-spin" />

Individual Import (Tree-shaking)

import { GitHubIcon, CheckIcon } from "@/components/icons"
 
<GitHubIcon className="size-5" />
<CheckIcon className="size-5" />

Dynamic Import (Registry)

import { Icon } from "@/components/icons"
 
;<Icon name="github" className="size-5" />

Styling

Size Classes

Use Tailwind's size-* utilities for consistent sizing:

<Icons.github className="size-4" />  {/* 16px */}
<Icons.github className="size-5" />  {/* 20px */}
<Icons.github className="size-6" />  {/* 24px */}
<Icons.github className="size-8" />  {/* 32px */}

Color Inheritance

Icons inherit color from parent by default:

<div className="text-primary">
  <Icons.github /> {/* Inherits text-primary */}
</div>

Direct Color Override

<Icons.github className="text-muted-foreground" />
<Icons.alertCircle className="text-destructive" />
<Icons.check className="text-green-500" />

Semantic Color Classes

<Icons.check className="icon-success" />      {/* Green */}
<Icons.trash className="icon-destructive" />  {/* Red */}
<Icons.info className="icon-muted" />         {/* Muted */}
<Icons.star className="icon-warning" />       {/* Yellow */}

Automation Commands

/icon-add <name>

Add a new icon to the system.

/icon-add activity

/icon-migrate <scope>

Migrate lucide-react imports to the unified system.

# Migrate a single file
/icon-migrate src/components/example.tsx
 
# Migrate in batches (10 files at a time)
/icon-migrate batch
 
# Migrate all files (with confirmation)
/icon-migrate all
 
# Show migration status
/icon-migrate report

/icon-audit

Audit icon usage across the codebase.

/icon-audit

Output includes:

  • Unified system adoption percentage
  • Direct lucide-react import count
  • Registry completion status
  • Files needing migration

/icon-registry <mode>

Manage the icon registry.

# Sync registry with Icons namespace
/icon-registry sync
 
# Add single icon to registry
/icon-registry add alertCircle
 
# Validate registry completeness
/icon-registry validate
 
# Export registry as JSON
/icon-registry export

/icon-validate

Validate icons against design system rules.

/icon-validate

/icon-fetch <source>

Fetch icons from external sources.

# Fetch from Anthropic design system
/icon-fetch anthropic
 
# Fetch education-style icons
/icon-fetch education
 
# Fetch school operations icons
/icon-fetch school
 
# Fetch from all sources
/icon-fetch all

Migration Guide

From lucide-react to Unified System

The unified system provides consistent theming and better maintainability.

Before (Direct Import):

import { AlertCircle, RefreshCw, Moon, Sun } from "lucide-react"
 
<AlertCircle className="h-4 w-4" />
<RefreshCw className="h-5 w-5 animate-spin" />

After (Unified System):

import { Icons } from "@/components/icons"
 
<Icons.alertCircle className="size-4" />
<Icons.refresh className="size-5 animate-spin" />

Icon Name Mapping

lucide-reactUnified System
AlertCircleIcons.alertCircle
RefreshCwIcons.refresh
MoonIconIcons.moon
SunIconIcons.sun
ArrowLeftIcons.arrowLeft
ArrowRightIcons.arrowRight
ChevronDownIcons.chevronDown
ChevronUpIcons.chevronUp
ChevronLeftIcons.chevronLeft
ChevronRightIcons.chevronRight
CheckIcons.check
XIcons.x
PlusIcons.plus
MinusIcons.minus
Loader2Icons.spinner
MoreHorizontalIcons.moreHorizontal
MoreVerticalIcons.moreVertical
SettingsIcons.settings
UserIcons.user
UsersIcons.users
MailIcons.mail
EyeIcons.eye
EyeOffIcons.eyeOff
LockIcons.lock
EditIcons.edit
CopyIcons.copy
TrashIcons.trash
UploadIcons.upload
DownloadIcons.download
SearchIcons.search
CalendarIcons.calendar
FileTextIcons.fileText

Registry System

The icon registry provides metadata for all icons, enabling search, filtering, and documentation generation.

Registry Entry Structure

interface IconMetadata {
  id: string // kebab-case identifier
  name: string // Display name
  component: IconComponent // React component
  category: IconCategory // Primary category
  tags: string[] // Search keywords
  description?: string // Usage description
  viewBox: string // SVG viewBox
  customizable: boolean // Can use className for colors
}

Search Icons

import { searchIcons } from "@/components/icons/utils"
 
const results = searchIcons("arrow")
// Returns icons matching "arrow" in id, name, tags, or description

Get Icons by Category

import { getIconsByCategory, IconCategory } from "@/components/icons"
 
const systemIcons = getIconsByCategory(IconCategory.SYSTEM)
const integrationIcons = getIconsByCategory(IconCategory.INTEGRATIONS)

Available Categories

CategoryDescription
SYSTEMCore UI icons
INTEGRATIONSThird-party logos
CONTENTDocument/file icons
APPLICATIONSApp-specific icons
PRODUCTIVITYWorkflow icons
DEVELOPMENTDeveloper tools
PROGRAMMINGLanguage logos
ACADEMICEducation icons
FINANCEFinancial icons
COMMUNICATIONMessaging icons
RATINGSQuality indicators
SHAPESGeometric shapes
ILLUSTRATIONSComplex graphics
BRANDINGBrand identity

Directory Structure

src/components/icons/
├── index.tsx              # Main exports & Icons namespace
├── types.ts               # TypeScript types & IconCategory enum
├── constants.ts           # Category metadata & style guide
├── utils.ts               # Helper functions (search, filter)
├── registry.ts            # Icon registry with metadata (120+ entries)
├── anthropic.tsx          # Anthropic design system icons
├── anthropic-showcase.tsx # Interactive showcase component
├── components/
│   └── icon-wrapper.tsx   # IconWrapper for file-based icons
└── categories/
    ├── system.tsx         # System/UI icons (40+)
    ├── integrations.tsx   # Brand/integration icons (15+)
    ├── content.tsx        # Content type icons
    ├── apps.tsx           # Application icons
    ├── productivity.tsx   # Productivity icons
    ├── development.tsx    # Development tool icons
    ├── programming.tsx    # Programming language icons
    ├── ratings.tsx        # Rating icons
    └── shapes.tsx         # Shape icons

Adding New Icons

1. Choose the Right Category

CategoryUse For
system.tsxCore UI (buttons, navigation, actions)
integrations.tsxThird-party brands (GitHub, Stripe)
content.tsxDocuments and files
programming.tsxLanguage logos
development.tsxDev tools (Cursor, MCP)

2. Add the Icon Component

// categories/system.tsx
 
export const NewIcon = (props: IconProps) => (
  <svg
    xmlns="http://www.w3.org/2000/svg"
    viewBox="0 0 24 24"
    fill="none"
    stroke="currentColor"
    strokeWidth="2"
    strokeLinecap="round"
    strokeLinejoin="round"
    {...props}
  >
    <path d="..." />
  </svg>
)

3. Register in Icons Namespace

// index.tsx
 
export const Icons = {
  // ... existing icons
  newIcon: SystemIcons.NewIcon,
} as const

4. Add to Registry

// registry.ts
 
{
  id: "new-icon",
  name: "New Icon",
  component: SystemIcons.NewIcon,
  category: IconCategory.SYSTEM,
  tags: ["new", "icon", "example"],
  description: "Description of the icon",
  viewBox: "0 0 24 24",
  customizable: true,
}

Icon Guidelines

  1. Always use currentColor for fill/stroke
  2. Spread {...props} last to allow overrides
  3. Include xmlns for standalone export
  4. Prefer viewBox="0 0 24 24" for UI icons
  5. Use stroke-based design for consistency with lucide

Anthropic Illustrations

Large illustrative icons are available as image paths:

import Image from "next/image"
 
import { ANTHROPIC_ILLUSTRATIONS } from "@/components/icons"
 
;<Image
  src={ANTHROPIC_ILLUSTRATIONS.handsBuild}
  alt="Hands building"
  width={200}
  height={200}
/>

Available illustrations:

  • handsBuild, handsStack, objectsPuzzle
  • category01 through category14

Helper Functions

Get Icon for Language

import { getIconForLanguage } from "@/components/icons"
 
const Icon = getIconForLanguage("ts")   // TypeScriptIcon
const Icon = getIconForLanguage("py")   // PythonIcon
const Icon = getIconForLanguage("rs")   // RustIcon
 
<Icon className="size-4" />

Get All Icon Names

import { getAllIconNames, getIconCount } from "@/components/icons"
 
const names = getAllIconNames() // ["logo", "github", "check", ...]
const count = getIconCount() // 120+

Type-Safe Icon Name

import type { IconName } from "@/components/icons"
 
function IconButton({ icon }: { icon: IconName }) {
  const IconComponent = Icons[icon]
  return <IconComponent className="size-4" />
}

Best Practices

  1. Use the unified system - Avoid direct lucide-react imports
  2. Use namespace import - Icons.name for consistency
  3. Use size-* classes - Not w-4 h-4
  4. Let icons inherit color - From parent when possible
  5. Use semantic colors - .icon-destructive for delete actions
  6. Run /icon-audit - To check migration progress
  7. Add to registry - When creating new icons

Troubleshooting

Icon Not Found

Check if the icon exists in the Icons namespace:

import { Icons } from "@/components/icons"
 
console.log(Object.keys(Icons)) // List all available icons

TypeScript Error on Icon Name

Use the IconName type for type-safe icon names:

import type { IconName } from "@/components/icons"
 
const iconName: IconName = "github" // Type-checked

Icon Color Not Changing

Ensure the icon uses currentColor:

// Check the SVG has fill="currentColor" or stroke="currentColor"
<path fill="currentColor" d="..." />

Missing Icon in Registry

Run the registry sync command:

/icon-registry sync
TableIcon System

On This Page

IconsMigration ProgressRecent Additions (Phase 1)Quick StartSystem OverviewFeaturesAnthropic Design SystemIcon CategoriesSystem Icons (Core UI)Navigation IconsTheme IconsLoading & StatusIntegration IconsDevelopment IconsProgramming Language IconsContent IconsFinance IconsCommunication IconsRating IconsAnthropic UI IconsImport PatternsNamespace Import (Recommended)Individual Import (Tree-shaking)Dynamic Import (Registry)StylingSize ClassesColor InheritanceDirect Color OverrideSemantic Color ClassesAutomation Commands/icon-add <name>/icon-migrate <scope>/icon-audit/icon-registry <mode>/icon-validate/icon-fetch <source>Migration GuideFrom lucide-react to Unified SystemIcon Name MappingRegistry SystemRegistry Entry StructureSearch IconsGet Icons by CategoryAvailable CategoriesDirectory StructureAdding New Icons1. Choose the Right Category2. Add the Icon Component3. Register in Icons Namespace4. Add to RegistryIcon GuidelinesAnthropic IllustrationsHelper FunctionsGet Icon for LanguageGet All Icon NamesType-Safe Icon NameBest PracticesTroubleshootingIcon Not FoundTypeScript Error on Icon NameIcon Color Not ChangingMissing Icon in Registry