---
name: create-new-design
description: Scaffolds a new design in the design-inspirations repo with preview component, detail page, and main page entry. Use when creating a new design, adding a design inspiration, or scaffolding design 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 component
```
## Step 1: Create Preview Component
Create `src/components/previews/[Name]Preview.tsx`.
See [examples/preview-template.tsx](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 `#d4d4d4` dots
- Dark panel: `bg-zinc-950` with `#3f3f46` dots
## Step 2: Create Detail Page
Create `src/app/designs/[design-id]/page.tsx`.
See [examples/page-template.tsx](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`:
```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`:
```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
```tsx
Code
```
## Attribution Format
```tsx
Inspired from
@[username]
```
## Step 5: Custom Animations (if needed)
If your component has custom animations (e.g., carousels, progress bars), add keyframes to `src/app/globals.css`:
```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)` to `scaleX(1)` with `origin-left`
- **Fade in**: `opacity: 0` to `opacity: 1`
- **Slide up**: `translateY(10px)` to `translateY(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