
Create New Design
- 6 installs
- 6 repo stars
- Updated February 8, 2026
- ainergiz/design-inspirations
create-new-design is a Claude Code skill that scaffolds a new design in the design-inspirations repo with a preview component, detail page, and main page entry.
About
create-new-design is a Claude Code skill that scaffolds a new design entry inside the design-inspirations Next.js repo. It creates the preview component, the detail page, the main-page listing entry, and the ViewTransition CSS following the repo conventions. A developer uses it when adding a new design inspiration to that project.
- Scaffolds preview component, detail page, and main page entry with correct file structure
- Encodes ViewTransition naming conventions for shared-element transitions
- Ships page and preview template files as examples
Create New Design by the numbers
- 6 all-time installs (skills.sh)
- Ranked #1,778 of 2,244 Frontend Development skills by installs in the Skillselion catalog
- Data as of Jul 28, 2026 (Skillselion catalog sync)
create-new-design capabilities & compatibility
- Capabilities
- page scaffolding · component scaffolding · view transitions
- Works with
- github
- Use cases
- frontend · ui design · web design
- Pricing
- Free
What create-new-design says it does
Scaffolds a new design in the design-inspirations repo with preview component, detail page, and main page entry.
Scaffold a new design inspiration with the correct file structure, ViewTransition naming, and component patterns.
npx skills add https://github.com/ainergiz/design-inspirations --skill create-new-designAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 6 |
|---|---|
| repo stars | ★ 6 |
| Last updated | February 8, 2026 |
| Repository | ainergiz/design-inspirations ↗ |
What it does
Scaffolding a new design entry in the design-inspirations Next.js repo with preview, detail page, and page listing.
Who is it for?
Adding a new design to the design-inspirations Next.js repo with the correct file structure and ViewTransition naming.
Skip if: Designing UI from scratch outside this specific repo structure.
When should I use this skill?
When creating a new design, adding a design inspiration, or scaffolding design files.
What you get
A fully scaffolded design entry with preview, detail page, listing, and transition CSS.
- preview component
- detail page
- main page listing entry
By the numbers
- 4-step scaffolding workflow
- requires 5 pieces of design metadata
Files
Create New Design
Scaffold a new design inspiration with the correct file structure, ViewTransition naming, and component patterns.
Required Information
Before creating files, gather:
1. Design ID (kebab-case): e.g., pricing-table, user-profile 2. Title: e.g., "Pricing Table", "User Profile Card" 3. Description: One-line description for the main page 4. Tags: 2-4 category tags (e.g., "Card", "Form", "Dashboard") 5. Attribution (optional): Twitter handle of original designer
File Structure
src/
├── app/
│ ├── designs/
│ │ └── [design-id]/
│ │ └── page.tsx # Detail page
│ └── page.tsx # Update designs array
└── components/
└── previews/
└── [Name]Preview.tsx # Preview componentStep 1: Create Preview Component
Create src/components/previews/[Name]Preview.tsx.
See examples/preview-template.tsx for the full template.
Key conventions:
- Export named function:
export function [Name]Preview() - ViewTransition names:
[design-id]-light,[design-id]-dark,[design-id]-light-panel,[design-id]-dark-panel - Side-by-side layout with dot grid backgrounds
- Light panel:
bg-[#f5f5f5]with#d4d4d4dots - Dark panel:
bg-zinc-950with#3f3f46dots
Step 2: Create Detail Page
Create src/app/designs/[design-id]/page.tsx.
See examples/page-template.tsx for the full template.
Key conventions:
- Use DM Sans font for design pages
- Split layout: 50/50 light/dark
- Header with back arrow, Code button, and attribution
- Code button links to the component file on GitHub
- Attribution format: "Inspired from @username" with profile photo via
unavatar.io
Step 3: Update Main Page
Add entry to src/app/page.tsx:
import { [Name]Preview } from "@/components/previews/[Name]Preview";
const designs = [
// ... existing designs
{
id: "[design-id]",
number: "XX", // Increment from last
title: "[Title]",
description: "[Description]",
tags: ["Tag1", "Tag2"],
PreviewComponent: [Name]Preview,
},
];Step 4: Update globals.css
Add ViewTransition CSS for new design in src/app/globals.css:
/* Add to existing shared element transitions section */
::view-transition-old([design-id]-light),
::view-transition-new([design-id]-light),
::view-transition-old([design-id]-dark),
::view-transition-new([design-id]-dark),
::view-transition-old([design-id]-light-panel),
::view-transition-new([design-id]-light-panel),
::view-transition-old([design-id]-dark-panel),
::view-transition-new([design-id]-dark-panel) {
animation-duration: 300ms;
animation-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
}
/* Add to reduced motion section */
@media (prefers-reduced-motion: reduce) {
::view-transition-old([design-id]-light),
::view-transition-new([design-id]-light),
::view-transition-old([design-id]-dark),
::view-transition-new([design-id]-dark),
::view-transition-old([design-id]-light-panel),
::view-transition-new([design-id]-light-panel),
::view-transition-old([design-id]-dark-panel),
::view-transition-new([design-id]-dark-panel) {
animation: none;
}
}ViewTransition Naming Convention
| Element | Pattern | Example |
|---|---|---|
| Light card | [design-id]-light | pricing-table-light |
| Dark card | [design-id]-dark | pricing-table-dark |
| Light panel | [design-id]-light-panel | pricing-table-light-panel |
| Dark panel | [design-id]-dark-panel | pricing-table-dark-panel |
Code Button Format
<a
href="https://github.com/ainergiz/design-inspirations/blob/main/src/app/designs/[design-id]/page.tsx"
target="_blank"
rel="noopener noreferrer"
className="flex items-center gap-1.5 px-3 py-1.5 text-sm text-zinc-500 hover:text-zinc-700 hover:bg-zinc-100 rounded-lg transition-colors"
>
<Code className="w-4 h-4" />
<span className="hidden sm:inline">Code</span>
</a>Attribution Format
<a
href="https://x.com/[username]"
target="_blank"
rel="noopener noreferrer"
className="flex items-center gap-2 text-sm text-zinc-500 hover:text-zinc-700"
>
<span className="hidden sm:inline text-zinc-400">Inspired from</span>
<Image
src="https://unavatar.io/x/[username]"
alt="[Name]"
width={24}
height={24}
className="w-6 h-6 rounded-full"
/>
<span className="font-medium text-zinc-700">@[username]</span>
<ExternalLink className="w-3.5 h-3.5" />
</a>Step 5: Custom Animations (if needed)
If your component has custom animations (e.g., carousels, progress bars), add keyframes to src/app/globals.css:
/* Example: Carousel progress animation */
@keyframes carousel-progress {
from {
transform: scaleX(0);
}
to {
transform: scaleX(1);
}
}
.animate-carousel-progress {
animation: carousel-progress linear forwards;
}Common animation patterns:
- Progress bars:
scaleX(0)toscaleX(1)withorigin-left - Fade in:
opacity: 0toopacity: 1 - Slide up:
translateY(10px)totranslateY(0)
Related Skills
Consider using these patterns in your design:
- component-variants: Color token mapping for light/dark modes
- expandable-card: Smooth expand/collapse with grid-rows
- image-carousel: Auto-advance carousel with touch support
- glassmorphism: Frosted glass overlay effects
- nested-card: Outer gradient with inner content card
- stacked-cards: Fanned/cascading card stacks with hover lift
- dropdown-menu: Click-outside detection and z-index stacking
Checklist
- [ ] Preview component created with correct ViewTransition names
- [ ] Detail page created with split layout
- [ ] Code button links to component file on GitHub
- [ ] Design entry added to main page designs array
- [ ] globals.css updated with ViewTransition CSS
- [ ] Custom keyframes added to globals.css (if needed)
- [ ] Attribution included (if available)
- [ ] Both light and dark variants implemented
- [ ] Components follow existing code style
- [ ] Touch interactions considered for mobile
// Page Template for Design Inspirations
// Replace [DesignName] with your component name (PascalCase)
// Replace [design-id] with your design ID (kebab-case)
// Replace [Design Title] with your design title
// Replace [username] with the Twitter handle of the original designer
"use client";
import { useState, ViewTransition } from "react";
import Link from "next/link";
import Image from "next/image";
import { DM_Sans } from "next/font/google";
import { ArrowLeft, ExternalLink, Code } from "lucide-react";
// Import any additional icons your design needs
const dmSans = DM_Sans({
subsets: ["latin"],
weight: ["400", "500", "600"],
});
// Light variant of your design (full interactive version)
function [DesignName]Light() {
// Add any state management needed for interactivity
// const [expanded, setExpanded] = useState(true);
return (
<div className="bg-[#f8f8f8] rounded-2xl border border-zinc-200/80 shadow-lg shadow-zinc-200/50 overflow-hidden">
{/* Your full light design implementation */}
<div className="px-5 py-5">
<span className="text-zinc-900">Light mode content</span>
</div>
</div>
);
}
// Dark variant of your design (full interactive version)
function [DesignName]Dark() {
// Add any state management needed for interactivity
// const [expanded, setExpanded] = useState(true);
return (
<div className="bg-zinc-800 rounded-2xl border border-zinc-700/80 shadow-lg shadow-black/30 overflow-hidden">
{/* Your full dark design implementation */}
<div className="px-5 py-5">
<span className="text-zinc-100">Dark mode content</span>
</div>
</div>
);
}
export default function [DesignName]Page() {
return (
<div className={`min-h-screen ${dmSans.className}`}>
{/* Header */}
<header className="fixed top-0 left-0 right-0 z-20 border-b border-zinc-200 bg-white/90 backdrop-blur-sm">
<div className="max-w-7xl mx-auto px-6 py-4 flex items-center justify-between">
<div className="flex items-center gap-4">
<Link
href="/"
className="text-zinc-400 hover:text-zinc-600 transition-colors"
>
<ArrowLeft className="w-5 h-5" />
</Link>
<h1 className="text-base font-medium text-zinc-900">
[Design Title]
</h1>
</div>
<div className="flex items-center gap-4">
<a
href="https://github.com/ainergiz/design-inspirations/blob/main/src/app/designs/[design-id]/page.tsx"
target="_blank"
rel="noopener noreferrer"
className="flex items-center gap-1.5 px-3 py-1.5 text-sm text-zinc-500 hover:text-zinc-700 hover:bg-zinc-100 rounded-lg transition-colors"
>
<Code className="w-4 h-4" />
<span className="hidden sm:inline">Code</span>
</a>
<a
href="https://x.com/[username]"
target="_blank"
rel="noopener noreferrer"
className="flex items-center gap-2 text-sm text-zinc-500 hover:text-zinc-700 transition-colors"
>
<span className="hidden sm:inline text-zinc-400">Inspired from</span>
<Image
src="https://unavatar.io/x/[username]"
alt="Designer Name"
width={24}
height={24}
className="w-6 h-6 rounded-full"
/>
<span className="font-medium text-zinc-700">@[username]</span>
<ExternalLink className="w-3.5 h-3.5" />
</a>
</div>
</div>
</header>
{/* Split layout */}
<div className="flex flex-col md:flex-row min-h-screen pt-[57px]">
{/* Light mode side */}
<ViewTransition name="[design-id]-light-panel">
<div className="flex-1 bg-[#f5f5f5] relative">
{/* Dot grid background */}
<div
className="absolute inset-0"
style={{
backgroundImage: `radial-gradient(circle, #d4d4d4 1px, transparent 1px)`,
backgroundSize: "24px 24px",
}}
/>
<div className="relative z-10 flex flex-col items-center justify-center min-h-[calc(100vh-57px)] p-6 md:p-12">
<ViewTransition name="[design-id]-light">
<div className="w-full max-w-md">
<[DesignName]Light />
</div>
</ViewTransition>
</div>
</div>
</ViewTransition>
{/* Dark mode side */}
<ViewTransition name="[design-id]-dark-panel">
<div className="flex-1 bg-zinc-950 relative">
{/* Dot grid background */}
<div
className="absolute inset-0"
style={{
backgroundImage: `radial-gradient(circle, #3f3f46 1px, transparent 1px)`,
backgroundSize: "24px 24px",
}}
/>
<div className="relative z-10 flex flex-col items-center justify-center min-h-[calc(100vh-57px)] p-6 md:p-12">
<ViewTransition name="[design-id]-dark">
<div className="w-full max-w-md">
<[DesignName]Dark />
</div>
</ViewTransition>
</div>
</div>
</ViewTransition>
</div>
</div>
);
}
// Preview Template for Design Inspirations
// Replace [DesignName] with your component name (PascalCase)
// Replace [design-id] with your design ID (kebab-case)
"use client";
import { ViewTransition } from "react";
// Import any additional dependencies your design needs
// Light variant of your design (compact preview version)
function [DesignName]Light() {
return (
<div className="bg-[#f8f8f8] rounded-xl border border-zinc-200/80 shadow-lg shadow-zinc-200/50 overflow-hidden">
{/* Your light design implementation */}
<div className="px-3 py-3">
<span className="text-zinc-900 text-sm">Light mode content</span>
</div>
</div>
);
}
// Dark variant of your design (compact preview version)
function [DesignName]Dark() {
return (
<div className="bg-zinc-800 rounded-xl border border-zinc-700/80 shadow-lg shadow-black/30 overflow-hidden">
{/* Your dark design implementation */}
<div className="px-3 py-3">
<span className="text-zinc-100 text-sm">Dark mode content</span>
</div>
</div>
);
}
// Main preview component - exports side-by-side light/dark
export function [DesignName]Preview() {
return (
<div className="flex gap-3">
{/* Light mode panel */}
<ViewTransition name="[design-id]-light-panel">
<div className="flex-1 bg-[#f5f5f5] rounded-xl p-3 relative overflow-hidden inline-block">
{/* Dot grid background */}
<div
className="absolute inset-0"
style={{
backgroundImage: `radial-gradient(circle, #d4d4d4 1px, transparent 1px)`,
backgroundSize: "16px 16px",
}}
/>
<div className="relative z-10">
<ViewTransition name="[design-id]-light">
<div className="inline-block">
<[DesignName]Light />
</div>
</ViewTransition>
</div>
</div>
</ViewTransition>
{/* Dark mode panel */}
<ViewTransition name="[design-id]-dark-panel">
<div className="flex-1 bg-zinc-950 rounded-xl p-3 relative overflow-hidden inline-block">
{/* Dot grid background */}
<div
className="absolute inset-0"
style={{
backgroundImage: `radial-gradient(circle, #3f3f46 1px, transparent 1px)`,
backgroundSize: "16px 16px",
}}
/>
<div className="relative z-10">
<ViewTransition name="[design-id]-dark">
<div className="inline-block">
<[DesignName]Dark />
</div>
</ViewTransition>
</div>
</div>
</ViewTransition>
</div>
);
}
Related skills
FAQ
What does create-new-design do?
It scaffolds a new design in the design-inspirations repo with a preview component, detail page, and main page entry.
What conventions does it enforce?
Kebab-case design IDs, ViewTransition light/dark/panel names, DM Sans fonts, and a 50/50 split layout.