icons

SeekSaaS icon system guide covering @workspace/custom-icons package with Icons and AiIcons components

16 stars

Best use case

icons is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

SeekSaaS icon system guide covering @workspace/custom-icons package with Icons and AiIcons components

Teams using icons should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/icons/SKILL.md --create-dirs "https://raw.githubusercontent.com/diegosouzapw/awesome-omni-skill/main/skills/development/icons/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/icons/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How icons Compares

Feature / AgenticonsStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

SeekSaaS icon system guide covering @workspace/custom-icons package with Icons and AiIcons components

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# SeekSaaS Icons Guide

## Overview

SeekSaaS provides a comprehensive icon system through the `@workspace/custom-icons` package. This package includes:
- **Icons**: General-purpose icons for frameworks, tools, and platforms
- **AiIcons**: AI-specific icons for AI providers and tools

## Package Structure

```
packages/custom-icons/
├── src/
│   ├── index.tsx              # Main exports
│   ├── custom/                # General icons
│   │   └── index.tsx         # Icons object (100+ icons)
│   └── ai-icons/              # AI-specific icons
│       └── index.tsx         # AiIcons object
├── package.json
└── tsconfig.json
```

## Installation

The package is already available in the monorepo. Import it into your feature or web app:

```bash
# Already available via workspace protocol
pnpm add @workspace/custom-icons
```

## Usage

### Basic Import

```tsx
import { Icons } from "@workspace/custom-icons";
import { AiIcons } from "@workspace/custom-icons/ai-icons";
```

### Using Icons

```tsx
import { Icons } from "@workspace/custom-icons";

export function MyComponent() {
  return (
    <div>
      <Icons.react size={24} />
      <Icons.nextJS size={24} />
      <Icons.gitHub size={24} />
      <Icons.lucide size={24} />
    </div>
  );
}
```

### Using AiIcons

```tsx
import { AiIcons } from "@workspace/custom-icons/ai-icons";

export function AIComponent() {
  return (
    <div>
      <AiIcons.openai size={24} />
      <AiIcons.claude size={24} />
      <AiIcons.cursor size={24} />
    </div>
  );
}
```

### Custom Props

Most icons accept SVG props:

```tsx
<Icons.react 
  size={48}
  className="text-blue-500"
  onClick={() => console.log("clicked")}
/>

<AiIcons.cursor 
  width={64}
  height={64}
  style={{ color: "#000" }}
/>
```

## Icons Collection

### Framework Icons

| Icon | Name | Usage |
|------|------|-------|
|  | `Icons.nextJS` | Next.js |
|  | `Icons.nuxt` | Nuxt.js |
|  | `Icons.svelteKit` | SvelteKit |
|  | `Icons.solidStart` | SolidStart |
|  | `Icons.react` | React |
|  | `Icons.vue` | Vue.js |
|  | `Icons.astro` | Astro |
|  | `Icons.remix` | Remix |
|  | `Icons.reactRouter` | React Router |
|  | `Icons.expo` | Expo |
|  | `Icons.hono` | Hono |
|  | `Icons.fastify` | Fastify |
|  | `Icons.express` | Express |
|  | `Icons.elysia` | Elysia |
|  | `Icons.node` | Node.js |

### Database & ORM Icons

| Icon | Name | Usage |
|------|------|-------|
|  | `Icons.prisma` | Prisma |
|  | `Icons.drizzle` | Drizzle ORM |
|  | `Icons.tanstack` | TanStack |

### Tooling Icons

| Icon | Name | Usage |
|------|------|-------|
|  | `Icons.biomejs` | Biome |
|  | `Icons.turborepo` | Turborepo |
|  | `Icons.pnpm` | pnpm |
|  | `Icons.yarn` | Yarn |
|  | `Icons.npm` | npm |
|  | `Icons.vite` | Vite |
|  | `Icons.vercel` | Vercel |

### UI Framework Icons

| Icon | Name | Usage |
|------|------|-------|
|  | `Icons.shadcn` | shadcn/ui |
|  | `Icons.radix` | Radix UI |
|  | `Icons.tailwind` | Tailwind CSS |
|  | `Icons.tailark` | TailArk |
|  | `Icons.magicui` | Magic UI |

### Auth & Payment Icons

| Icon | Name | Usage |
|------|------|-------|
|  | `Icons.betterAuth` | Better Auth |
|  | `Icons.stripe` | Stripe |
|  | `Icons.paypal` | PayPal |
|  | `Icons.alipay` | Alipay |
|  | `Icons.wechatpay` | WeChat Pay |

### Cloud & Deployment Icons

| Icon | Name | Usage |
|------|------|-------|
|  | `Icons.cloudflare` | Cloudflare |
|  | `Icons.aws` | AWS |
|  | `Icons.docker` | Docker |

### Social Icons

| Icon | Name | Usage |
|------|------|-------|
|  | `Icons.gitHub` | GitHub |
|  | `Icons.x` | Twitter/X |
|  | `Icons.linkedIn` | LinkedIn |
|  | `Icons.vk` | VK |
|  | `Icons.discord` | Discord |
|  | `Icons.youtube` | YouTube |
|  | `Icons.google` | Google |
|  | `Icons.apple` | Apple |

### Language Icons

| Icon | Name | Usage |
|------|------|-------|
|  | `Icons.ts` | TypeScript |
|  | `Icons.javascript` | JavaScript |
|  | `Icons.css` | CSS |
|  | `Icons.json` | JSON |
|  | `Icons.bash` | Bash |

### Animation Icons

| Icon | Name | Usage |
|------|------|-------|
|  | `Icons.motion` | Framer Motion |

### Documentation Icons

| Icon | Name | Usage |
|------|------|-------|
|  | `Icons.fumadocs` | Fumadocs |
|  | `Icons.book` | Generic book |
|  | `Icons.aria` | ARIA |

### Other Icons

| Icon | Name | Usage |
|------|------|-------|
|  | `Icons.lucide` | Lucide |
|  | `Icons.v0` | v0 |
|  | `Icons.creem` | Creem |
|  | `Icons.nitro` | Nitro |
|  | `Icons.inlang` | inlang |
|  | `Icons.i18next` | i18next |

## AiIcons Collection

### AI IDEs & Editors

| Icon | Name | Usage |
|------|------|-------|
|  | `AiIcons.cursor` | Cursor IDE |
|  | `AiIcons.vscode` | VS Code |
|  | `AiIcons.copilot` | GitHub Copilot |
|  | `AiIcons.zed` | Zed Editor |
|  | `AiIcons.windsurf` | WindSurf |

### AI Providers

| Icon | Name | Usage |
|------|------|-------|
|  | `AiIcons.openai` | OpenAI (ChatGPT) |
|  | `AiIcons.claude` | Claude (Anthropic) |
|  | `AiIcons.gemini` | Gemini (Google) |
|  | `AiIcons.deepseek` | DeepSeek |
|  | `AiIcons.xai` | xAI (Grok) |

### AI Concepts

| Icon | Name | Usage |
|------|------|-------|
|  | `AiIcons.vibe` | Vibe coding |
|  | `AiIcons.mcp` | MCP (Model Context Protocol) |

### OpenCode

| Icon | Name | Usage |
|------|------|-------|
|  | `AiIcons.opencode` | OpenCode |

## Using with Tailwind CSS

Combine icons with Tailwind CSS classes:

```tsx
import { Icons } from "@workspace/custom-icons";

export function IconButton({ icon, label }: { icon: keyof typeof Icons; label: string }) {
  const IconComponent = Icons[icon];

  return (
    <button className="flex items-center gap-2 px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 transition-colors">
      <IconComponent size={20} />
      <span>{label}</span>
    </button>
  );
}
```

### Color Customization

```tsx
// Using className for colors
<Icons.react className="text-blue-500" size={32} />
<Icons.gitHub className="text-gray-900 dark:text-white" size={24} />

// Using style prop
<Icons.nextJS style={{ color: "#000000" }} size={32} />
```

### Size Customization

```tsx
<Icons.lucide size={16} />  // Small
<Icons.lucide size={24} />  // Medium (default)
<Icons.lucide size={32} />  // Large
<Icons.lucide size={48} />  // Extra large
```

## Creating New Icons

### Adding to Icons Object

Edit `packages/custom-icons/src/custom/index.tsx`:

```tsx
import { SiNewTool } from "react-icons/si";

export const Icons = {
  // ... existing icons
  newTool: SiNewTool,
};
```

### Adding to AiIcons Object

Edit `packages/custom-icons/src/ai-icons/index.tsx`:

```tsx
import { SiNewAI } from "react-icons/si";

export const AiIcons = {
  // ... existing icons
  newAI: (props: SVGProps<SVGSVGElement>) => (
    <svg {...props}>
      <path d="..." fill="currentColor" />
    </svg>
  ),
};
```

### Creating Custom SVG Icons

```tsx
import { cn } from "@workspace/ui/lib/utils";
import type { SVGProps } from "react";

export const Icons = {
  customIcon: ({ className, ...props }: SVGProps<SVGSVGElement>) => (
    <svg
      viewBox="0 0 24 24"
      fill="none"
      xmlns="http://www.w3.org/2000/svg"
      className={cn("size-4", className)}
      {...props}
    >
      <path d="M12 2L2 7l10 5 10-5-10-5z" fill="currentColor" />
      <path d="M2 17l10 5 10-5" stroke="currentColor" strokeWidth={2} />
      <path d="M2 12l10 5 10-5" stroke="currentColor" strokeWidth={2} />
    </svg>
  ),
};
```

## Icon Size Reference

Use consistent sizes across the application:

| Size | Usage | Example |
|------|-------|---------|
| 16 | Small (labels, badges) | `<Icons.icon size={16} />` |
| 20 | Buttons, small UI | `<Icons.icon size={20} />` |
| 24 | Standard (most common) | `<Icons.icon size={24} />` |
| 32 | Cards, sections | `<Icons.icon size={32} />` |
| 48 | Hero sections | `<Icons.icon size={48} />` |
| 64 | Feature highlights | `<Icons.icon size={64} />` |

## Accessibility

Icons should be accessible when used meaningfully:

```tsx
// Decorative icons (screen reader can skip)
<Icons.gitHub aria-hidden="true" />

// Interactive icons (with label)
<button aria-label="GitHub">
  <Icons.gitHub size={24} />
</button>

// Informational icons (with description)
<div role="img" aria-label="Status: Online" aria-description="Green checkmark indicating system is operational">
  <Icons.checkCircle className="text-green-500" size={24} />
</div>
```

## Performance Tips

### Tree Shaking

The icons are exported as an object, so importing the entire module is efficient. For best results:

```tsx
// Good - import what you need
import { Icons } from "@workspace/custom-icons";
const { react, vue } = Icons;

// Avoid - this still works but imports more
import * as AllIcons from "@workspace/custom-icons";
```

### Memoization for Frequently Used Icons

```tsx
import { memo } from "react";
import { Icons } from "@workspace/custom-icons";

const ReactIcon = memo(Icons.react);
const VueIcon = memo(Icons.vue);

export function IconGrid() {
  return (
    <div className="grid grid-cols-4 gap-4">
      <ReactIcon size={32} />
      <VueIcon size={32} />
    </div>
  );
}
```

## Common Patterns

### Icon Button

```tsx
import { Icons } from "@workspace/custom-icons";
import { Button } from "@workspace/ui/components/ui/button";
import { cn } from "@workspace/ui/lib/utils";

interface IconButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {
  icon: keyof typeof Icons;
  variant?: "default" | "ghost" | "outline";
  size?: "sm" | "md" | "lg";
}

export function IconButton({ icon, variant = "default", size = "md", className, ...props }: IconButtonProps) {
  const IconComponent = Icons[icon];
  const sizeMap = { sm: 16, md: 20, lg: 24 };

  return (
    <Button variant={variant} size="icon" className={cn("h-9 w-9", className)} {...props}>
      <IconComponent size={sizeMap[size]} />
    </Button>
  );
}
```

### Icon Badge

```tsx
import { Icons } from "@workspace/custom-icons";

export function IconBadge({ icon, label, color }: { icon: keyof typeof Icons; label: string; color: string }) {
  const IconComponent = Icons[icon];

  return (
    <span className={cn("inline-flex items-center gap-1 px-2 py-1 rounded-full text-xs font-medium", color)}>
      <IconComponent size={14} />
      {label}
    </span>
  );
}
```

### Icon Card

```tsx
import { Icons } from "@workspace/custom-icons";

export function TechCard({ name, icon, description }: { name: string; icon: keyof typeof Icons; description: string }) {
  const IconComponent = Icons[icon];

  return (
    <div className="p-4 border rounded-lg hover:shadow-lg transition-shadow">
      <IconComponent size={48} className="mb-3 text-blue-500" />
      <h3 className="font-semibold">{name}</h3>
      <p className="text-sm text-muted-foreground">{description}</p>
    </div>
  );
}
```

## TypeScript Support

Full TypeScript support with type inference:

```tsx
import { Icons, AiIcons } from "@workspace/custom-icons";

// Type-safe icon access
const iconName: keyof typeof Icons = "react";
const aiIconName: keyof typeof AiIcons = "claude";

// These will be typed correctly
const Icon = Icons[iconName];
const AiIcon = AiIcons[aiIconName];
```

## Dependencies

```json
{
  "dependencies": {
    "@workspace/ui": "workspace:*",
    "class-variance-authority": "^0.7.1",
    "react-icons": "^5.5.0"
  }
}
```

- **react-icons**: Provides the underlying icon components (Feather, Font Awesome, etc.)
- **@workspace/ui**: For utility functions like `cn()` for class name merging

## Resources

- [react-icons](https://react-icons.github.io/react-icons/)
- [SVG Props](https://react.dev/reference/react/Component)
- [Tailwind CSS](https://tailwindcss.com)

Related Skills

moai-icons-vector

16
from diegosouzapw/awesome-omni-skill

Vector icon libraries ecosystem guide covering 10+ major libraries with 200K+ icons, including React Icons (35K+), Lucide (1000+), Tabler Icons (5900+), Iconify (200K+), Heroicons, Phosphor, and Radix Icons with implementation patterns, decision trees, and best practices.

bgo

10
from diegosouzapw/awesome-omni-skill

Automates the complete Blender build-go workflow, from building and packaging your extension/add-on to removing old versions, installing, enabling, and launching Blender for quick testing and iteration.

Coding & Development

javascript-typescript-typescript-scaffold

16
from diegosouzapw/awesome-omni-skill

You are a TypeScript project architecture expert specializing in scaffolding production-ready Node.js and frontend applications. Generate complete project structures with modern tooling (pnpm, Vite, N

javascript-testing-patterns

16
from diegosouzapw/awesome-omni-skill

Implement comprehensive testing strategies using Jest, Vitest, and Testing Library for unit tests, integration tests, and end-to-end testing with mocking, fixtures, and test-driven development. Use...

javascript-pro

16
from diegosouzapw/awesome-omni-skill

Master modern JavaScript with ES6+, async patterns, and Node.js APIs. Handles promises, event loops, and browser/Node compatibility.

java-pro

16
from diegosouzapw/awesome-omni-skill

Master Java 21+ with modern features like virtual threads, pattern matching, and Spring Boot 3.x. Expert in the latest Java ecosystem including GraalVM, Project Loom, and cloud-native patterns. Use PROACTIVELY for Java development, microservices architecture, or performance optimization.

java-doctor

16
from diegosouzapw/awesome-omni-skill

Comprehensive Java code health analyzer. 0-100 score with diagnostics. Progressive loading - detects project tech (Spring, gRPC, JPA) and loads relevant rules. Version-aware for Java 8-25 & Spring Boot 3.x/4.x. Dead code detection included. Use when reviewing Java code, finding bugs, or preparing for PR.

java-dev

16
from diegosouzapw/awesome-omni-skill

Java 开发规范,包含命名约定、异常处理、Spring Boot 最佳实践等

java-21-to-java-25-upgrade

16
from diegosouzapw/awesome-omni-skill

Comprehensive best practices for adopting new Java 25 features since the release of Java 21. Triggers on: ['*']

iroh-p2p

16
from diegosouzapw/awesome-omni-skill

Build modern peer-to-peer applications with Iroh. QUIC-based P2P networking, hole punching, content distribution, and decentralized data synchronization.

irish-takeaway

16
from diegosouzapw/awesome-omni-skill

Find nearby takeaways in Ireland and browse menus via Deliveroo/Just Eat. Uses Google Places API for discovery and browser automation for menu scraping.

ipai-ui-ux-pro-max

16
from diegosouzapw/awesome-omni-skill

Design intelligence for UI/UX generation and critique; use for layouts, typography, color palettes, tokens, and UX best practices. 50 styles, 21 palettes, 50 font pairings, 20 charts, 9 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind, shadcn/ui). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient. Integrations: shadcn/ui MCP for component search and examples.