/shadcn-ui-conventions
UI component conventions for 8-bit styled components. Use when working with shadcn/ui components or implementing retro-styled UI elements.
$ npx -y skills add theorcdev/8bitcn-ui --skill shadcn-ui-conventions --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/shadcn-ui-conventions
Context preview
The summary Claude sees to decide when to auto-load this skill.
UI component conventions for 8-bit styled components. Use when working with shadcn/ui components or implementing retro-styled UI elements.
SKILL.md
shadcn-ui-conventions.SKILL.mdname: shadcn-ui-conventions
description: UI component conventions for 8-bit styled components. Use when working with shadcn/ui components or implementing retro-styled UI elements.
UI Component Conventions
The `components/ui` directory uses different conventions from the rest of the project. It's excluded from Biome/Ultracite linting to preserve shadcn/ui patterns.
When to use this skill
- When creating new UI components
- When modifying existing shadcn/ui components
- When implementing 8-bit retro styling
- When working with component imports and types
Linting
- **Biome excludes this directory**: `biome.jsonc` has `"!components/ui"` in the includes
- **No Ultracite formatting**: Components use their own patterns
- **Run lint manually** when needed: `npx biome check components/ui/`
Import Patterns
**Base components** (e.g., `button.tsx`):
import type * as React from "react";
import { Slot } from "@radix-ui/react-slot";
import { type VariantProps, cva } from "class-variance-authority";
import { cn } from "@/lib/utils";**8bit components** (e.g., `8bit/button.tsx`):
import { type VariantProps, cva } from "class-variance-authority";
import { cn } from "@/lib/utils";
import { Button as ShadcnButton } from "@/components/ui/button";
import "@/components/ui/8bit/styles/retro.css";Import order: 1. External libraries (class-variance-authority, @radix-ui) 2. Internal utils (`@/lib/utils`) 3. Base component alias (`@/components/ui/component`) 4. Retro stylesheet (`@/components/ui/8bit/styles/retro.css`)
Type Definitions
**Base components**: Inline props type with function
function Button({
className,
variant,
...props
}: React.ComponentProps<"button"> &
VariantProps<typeof buttonVariants> & {
asChild?: boolean;
})**8bit components**: Export interface separately
export interface BitButtonProps
extends React.ButtonHTMLAttributes<HTMLButtonElement>,
VariantProps<typeof buttonVariants> {
asChild?: boolean;
ref?: React.Ref<HTMLButtonElement>;
}
function Button({ children, asChild, ...props }: BitButtonProps)Ref Handling
**Base components**: Use `React.forwardRef`
const DialogOverlay = React.forwardRef<
React.ComponentRef<typeof DialogPrimitive.Overlay>,
React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>
>(({ className, ...props }, ref) => (
<DialogPrimitive.Overlay ref={ref} {...props} />
));
DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;**8bit components**: Use `ref` prop (React 19 pattern)
export interface BitButtonProps
extends React.ButtonHTMLAttributes<HTMLButtonElement> {
ref?: React.Ref<HTMLButtonElement>;
}
function Button({ ref, ...props }: BitButtonProps) {
return <ShadcnButton ref={ref} {...props} />
}8bit Component Patterns
**Retro CSS import**: Required for all 8bit components
import "@/components/ui/8bit/styles/retro.css";
**Base component alias**: Import base component with alias
import { Button as ShadcnButton } from "@/components/ui/button";**Variant overrides**: 8bit variants often have minimal styles (borders/colors handled by CSS)
export const buttonVariants = cva("", {
variants: {
variant: {
default: "bg-foreground",
// ...
},
},
});Reference Files
- `components/ui/button.tsx` - Base component example
- `components/ui/8bit/button.tsx` - 8bit wrapper example
- `components/ui/dialog.tsx` - Complex base component with Radix primitives
Read more
name: shadcn-ui-conventions description: UI component conventions for 8-bit styled components. Use when working with shadcn/ui components or implementing retro-styled UI elements.
UI Component Conventions
The `components/ui` directory uses different conventions from the rest of the project. It's excluded from Biome/Ultracite linting to preserve shadcn/ui patterns.
When to use this skill
- When creating new UI components
- When modifying existing shadcn/ui components
- When implementing 8-bit retro styling
- When working with component imports and types
Linting
- **Biome excludes this directory**: `biome.jsonc` has `"!components/ui"` in the includes
- **No Ultracite formatting**: Components use their own patterns
- **Run lint manually** when needed: `npx biome check components/ui/`
Import Patterns
**Base components** (e.g., `button.tsx`):
import type * as React from "react";
import { Slot } from "@radix-ui/react-slot";
import { type VariantProps, cva } from "class-variance-authority";
import { cn } from "@/lib/utils";**8bit components** (e.g., `8bit/button.tsx`):
import { type VariantProps, cva } from "class-variance-authority";
import { cn } from "@/lib/utils";
import { Button as ShadcnButton } from "@/components/ui/button";
import "@/components/ui/8bit/styles/retro.css";Import order: 1. External libraries (class-variance-authority, @radix-ui) 2. Internal utils (`@/lib/utils`) 3. Base component alias (`@/components/ui/component`) 4. Retro stylesheet (`@/components/ui/8bit/styles/retro.css`)
Type Definitions
**Base components**: Inline props type with function
function Button({
className,
variant,
...props
}: React.ComponentProps<"button"> &
VariantProps<typeof buttonVariants> & {
asChild?: boolean;
})**8bit components**: Export interface separately
export interface BitButtonProps
extends React.ButtonHTMLAttributes<HTMLButtonElement>,
VariantProps<typeof buttonVariants> {
asChild?: boolean;
ref?: React.Ref<HTMLButtonElement>;
}
function Button({ children, asChild, ...props }: BitButtonProps)Ref Handling
**Base components**: Use `React.forwardRef`
const DialogOverlay = React.forwardRef<
React.ComponentRef<typeof DialogPrimitive.Overlay>,
React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>
>(({ className, ...props }, ref) => (
<DialogPrimitive.Overlay ref={ref} {...props} />
));
DialogOverlay.displayName = DialogPrimitive.Overlay.displayName;**8bit components**: Use `ref` prop (React 19 pattern)
export interface BitButtonProps
extends React.ButtonHTMLAttributes<HTMLButtonElement> {
ref?: React.Ref<HTMLButtonElement>;
}
function Button({ ref, ...props }: BitButtonProps) {
return <ShadcnButton ref={ref} {...props} />
}8bit Component Patterns
**Retro CSS import**: Required for all 8bit components
import "@/components/ui/8bit/styles/retro.css";
**Base component alias**: Import base component with alias
import { Button as ShadcnButton } from "@/components/ui/button";**Variant overrides**: 8bit variants often have minimal styles (borders/colors handled by CSS)
export const buttonVariants = cva("", {
variants: {
variant: {
default: "bg-foreground",
// ...
},
},
});Reference Files
- `components/ui/button.tsx` - Base component example
- `components/ui/8bit/button.tsx` - 8bit wrapper example
- `components/ui/dialog.tsx` - Complex base component with Radix primitives
Accessible retro components that you can copy and paste into your apps.Free. Open Source. Built on shadcn/ui. Documentation · Components · Blocks · Themes · Discord
Repo: theorcdev/8bitcn-ui
Other skills on 8bitcn-ui.
- /8-bit-pixel-art-patterns
Create pixelated borders, shadows, and effects for 8-bit retro components. Apply when building 8-bit styled UI components that need authentic pixel art aesthetics.
Open skill - /8bit-docs-patterns
Create documentation with gaming-specific examples, retro styling, and 8-bit terminology. Apply when documenting gaming blocks, RPG components, or retro-styled UI elements.
Open skill - /animation-performance-retro
Optimize 8-bit animations for smooth performance. Apply when creating animated pixel art, game UI effects, or any retro-styled animations.
Open skill - /bundle-barrel-imports
Import directly from source files instead of barrel files. Apply when using libraries like lucide-react, @mui/material, or @radix-ui/react-* to reduce bundle size and improve dev boot time.
Open skill - /bundle-dynamic-imports
Use next/dynamic for lazy-loading heavy components. Apply when importing large components like editors, charts, or rich text editors that aren't needed on initial render.
Open skill - /component-wrapper-architecture
Best practices for wrapping shadcn/ui components. Apply when creating 8-bit styled variants of existing shadcn/ui components.
Open skill

