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.
Before creating files, gather:
pricing-table, user-profilesrc/
āāā app/
ā āāā designs/
ā ā āāā [design-id]/
ā ā āāā page.tsx # Detail page
ā āāā page.tsx # Update designs array
āāā components/
āāā previews/
āāā [Name]Preview.tsx # Preview component
Create src/components/previews/[Name]Preview.tsx.
See examples/preview-template.tsx for the full template.
Key conventions:
export function [Name]Preview()[design-id]-light, [design-id]-dark, [design-id]-light-panel, [design-id]-dark-panelbg-[#f5f5f5] with #d4d4d4 dotsbg-zinc-950 with #3f3f46 dotsCreate src/app/designs/[design-id]/page.tsx.
See examples/page-template.tsx for the full template.
Key conventions:
unavatar.ioAdd 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,
},
];
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;
}
}
| 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 |
<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"
>
<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>
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:
scaleX(0) to scaleX(1) with origin-leftopacity: 0 to opacity: 1translateY(10px) to translateY(0)Consider using these patterns in your design: