xiaohongshu
xiaohongshu
logo-with-variants
Create logo components with multiple variants (icon, wordmark, logo) and light/dark modes. Use when the user provides logo SVG files and wants to create a variant-based logo component following the Clerk pattern in the Elements project.
Full skill instructions
Creates logo components with variant support following the established pattern in Elements codebase.
public/test/ or provides paths to logo files-dark.svg or -light.svg)Location: src/components/ui/logos/{name}.tsx
Props interface:
{
className?: string;
variant?: "icon" | "logo" | "wordmark";
mode?: "dark" | "light";
}
Structure:
variant propvariant="wordmark" (primary logo)Reference implementation: Check src/components/ui/logos/clerk.tsx for the exact pattern to follow.
For each SVG file:
fill-rule → fillRule, stroke-width → strokeWidth)Location: registry/default/blocks/logos/{name}-logo/
Files to create:
registry-item.json:{
"name": "{name}-logo",
"type": "registry:block",
"title": "{DisplayName} Logo",
"description": "{Brand description}",
"categories": ["logos"],
"meta": {
"hasVariants": true,
"variants": [
"icon-dark",
"icon-light",
"logo-dark",
"logo-light",
"wordmark-dark",
"wordmark-light"
],
"variantTypes": {
"base": ["icon", "logo", "wordmark"],
"modes": ["dark", "light"]
}
},
"files": [
{
"path": "components/logos/{name}.tsx",
"type": "registry:component"
}
],
"docs": "{Brand} logo with 3 base variants (icon, logo, wordmark) and 2 modes (dark, light) = 6 total combinations. Theme-aware: automatically adapts colors when you switch themes."
}
CRITICAL: The variants array MUST list ALL combinations explicitly in {base}-{mode} format (e.g., "icon-dark", "logo-light"). This is what makes the variant count badge (e.g., "6") appear correctly in the UI. Do NOT just list base names like ["icon", "logo", "wordmark"].
components/logos/{name}.tsxCRITICAL STEP: The registry/index.ts file is the SOURCE OF TRUTH for the build process. You MUST add/update the logo entry in this file with the EXACT same metadata structure as the registry-item.json.
Location: registry/index.ts
Find the array of registry items and add your logo entry with the complete meta field:
{
$schema: "https://ui.shadcn.com/schema/registry-item.json",
name: "{name}-logo",
type: "registry:block",
title: "{DisplayName} Logo",
description: "{Brand description}",
registryDependencies: [],
dependencies: [],
categories: ["logos"],
meta: {
hasVariants: true,
variants: [
"icon-dark",
"icon-light",
"logo-dark",
"logo-light",
"wordmark-dark",
"wordmark-light",
],
variantTypes: {
base: ["icon", "logo", "wordmark"],
modes: ["dark", "light"],
},
},
files: [
{
path: "registry/default/blocks/logos/{name}-logo/components/logos/{name}.tsx",
type: "registry:component",
},
],
docs: "{Brand} logo with 3 base variants (icon, logo, wordmark) and 2 modes (dark, light) = 6 total combinations. Theme-aware: automatically adapts colors when you switch themes.",
}
If updating an existing logo: Search for the logo name in registry/index.ts and replace the entire entry with the new metadata including the meta field.
Add to registry/default/blocks/logos/logos/registry-item.json:
Run:
bun run build:registry
This generates the public registry files.
interface LogoProps {
className?: string;
variant?: "icon" | "logo" | "wordmark";
mode?: "dark" | "light";
}
const COLORS = {
dark: "#HEX_VALUE",
light: "#HEX_VALUE",
};
export function BrandLogo({
className,
variant = "wordmark",
mode = "dark",
}: LogoProps) {
const color = COLORS[mode];
if (variant === "icon") {
return (
<svg className={className} viewBox="...">
{/* Icon SVG content */}
</svg>
);
}
if (variant === "logo") {
return (
<svg className={className} viewBox="...">
{/* Logo SVG content */}
</svg>
);
}
// Default: wordmark
return (
<svg className={className} viewBox="...">
{/* Wordmark SVG content */}
</svg>
);
}
After completion:
@/components/ui/logos/{name}npx shadcn@latest add @elements/{name}-logoIf brand guidelines are provided:
src/components/ui/logos/clerk.tsxregistry/default/blocks/logos/clerk-logo/src/app/docs/logos/logo-variants-dialog.tsxregistry/default/blocks/logos/logos/registry-item.jsonsrc/ and registry/ locationshasVariants: true is set in registry metadatabuild:registry after making changesxiaohongshu
technical spec
product ux expert
database patterns
Conduct multi-agent task orchestration and workflow coordination.
Initialize project with Conductor artifacts (product definition,
Expert in web animations, transitions, and motion design using Framer Motion and CSS
Creates Mermaid and ASCII diagrams for flowcharts, architecture, ERDs, state machines, mindmaps, and more. Use when user mentions diagram, flowchart, mermaid, ASCII diagram, text diagram, terminal diagram, visualize, C4, mindmap, architecture diagram, sequence diagram, ERD, or needs visual docume...
PostgreSQL bindings for H3 hexagonal grid system. Use when working with H3 cells in Postgres, including spatial indexing, geometry/geography integration, and raster analysis.
Context-Driven Development skill for projects using Conductor. Use this skill when you detect a `conductor/` directory in the project, when working on tasks defined in a `plan.md` file, or when the user asks about tracks, specs, or plans. Automatically applies TDD workflow, tracks task completion...
Display project status, active tracks, and next actions
Official Stakpak application containerization standard operating procedure, a step-by-step guidline to properly dockerize applications. This is a rule book curated by the Stakpak Team.
Generate, edit, and beat-sync AI video with leading models in one workspace.
The world's fastest calendar for remote work
Transform Your Design with AI Designer by ImgCreator.ai
Revolutionizing Video Production with AI-Powered Creativity
Extend an image past the frame and let AI fill the new aspect ratio.
Discover your celebrity doppelgänger with StarByFace!
ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.
Opus.ai: Revolutionize Your Web Experience