icons
SeekSaaS icon system guide covering @workspace/custom-icons package with Icons and AiIcons components
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
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/icons/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How icons Compares
| Feature / Agent | icons | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/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
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
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.
javascript-typescript-typescript-scaffold
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
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
Master modern JavaScript with ES6+, async patterns, and Node.js APIs. Handles promises, event loops, and browser/Node compatibility.
java-pro
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
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
Java 开发规范,包含命名约定、异常处理、Spring Boot 最佳实践等
java-21-to-java-25-upgrade
Comprehensive best practices for adopting new Java 25 features since the release of Java 21. Triggers on: ['*']
iroh-p2p
Build modern peer-to-peer applications with Iroh. QUIC-based P2P networking, hole punching, content distribution, and decentralized data synchronization.
irish-takeaway
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
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.