원클릭으로
designprototype
// Creates a Storybook UI prototype from a PRD-style input using existing shadcn/ui components, subtle visual tone, and a clear hierarchy. Use when the user invokes /design.prototype or asks for a prototype Storybook story.
// Creates a Storybook UI prototype from a PRD-style input using existing shadcn/ui components, subtle visual tone, and a clear hierarchy. Use when the user invokes /design.prototype or asks for a prototype Storybook story.
Write or refactor Cypress E2E tests following Page Object Model, action/assertion separation, and project conventions. Use when creating new tests, refactoring existing ones, or adding page object functions.
Implement a Figma design using shadcn/ui components. Use when converting Figma URLs to React code.
Sync a UI component from Figma to code using the component sync workflow. Use when updating components to match Figma designs.
Sync CSS variables from Figma plugin export to globals.css. Use when updating design tokens/colors from Figma.
Verify Figma implementation is pixel-perfect. Use after implementing Figma designs to catch and fix discrepancies.
| name | design.prototype |
| description | Creates a Storybook UI prototype from a PRD-style input using existing shadcn/ui components, subtle visual tone, and a clear hierarchy. Use when the user invokes /design.prototype or asks for a prototype Storybook story. |
| argument-hint | [prd-description] |
| allowed-tools | ["Read","Write","Edit","Glob","Grep","Bash","mcp__cursor-browser-extension__browser_navigate","mcp__cursor-browser-extension__browser_wait_for","mcp__cursor-browser-extension__browser_take_screenshot"] |
Create a Storybook prototype from $ARGUMENTS using only shadcn/ui components.
Note: All shadcn/ui components are already installed and available at apps/web/src/components/ui/. Import them directly (e.g., import { Button } from '@/components/ui/button').
If missing, ask:
Location: apps/web/src/features/design-system/prototypes/<Name>.tsx
Rules:
apps/web/src/components/ui/divsStyling Guidelines:
DO:
variant="outline", size="sm")flex, grid, gap-*, p-*DON'T:
bg-blue-500)Template:
import * as React from 'react'
import { Card, CardHeader, CardTitle, CardContent } from '@/components/ui/card'
// ... other shadcn imports
export const MyPrototype = (): React.ReactElement => {
return (
<div className="flex flex-col gap-6 p-6">
<h2 className="text-xl font-semibold">Page Title</h2>
{/* Layout with shadcn components */}
</div>
)
}
Location: apps/web/src/features/design-system/stories/prototypes/<Name>.stories.tsx
Template:
import type { Meta, StoryObj } from '@storybook/react'
import { MyPrototype } from '../../prototypes/MyPrototype'
const meta = {
title: 'Design System/Prototypes/My Prototype',
component: MyPrototype,
parameters: {
layout: 'fullscreen',
},
} satisfies Meta<typeof MyPrototype>
export default meta
type Story = StoryObj<typeof meta>
export const Default: Story = {
args: {
// component props if any
},
}
After writing the story:
browser_navigate("http://localhost:<port>/?path=/story/design-system-prototypes-<slug>--default")
browser_wait_for(time: 2)
browser_take_screenshot(fullPage: true)
If variants exist, capture each variant.
yarn workspace @safe-global/web type-check
yarn workspace @safe-global/web storybook
| Item | Format | Example |
|---|---|---|
| Component | <Name>.tsx | SecurityHub.tsx |
| Story | <Name>.stories.tsx | SecurityHub.stories.tsx |
| Title | Design System/Prototypes/<Name> | Design System/Prototypes/Security Hub |
| Slug | design-system-prototypes-<name>--default | design-system-prototypes-security-hub--default |
apps/web/src/components/ui/apps/web/src/utils/cn.tslucide-reactapps/web/src/features/design-system/prototypes/apps/web/src/features/design-system/stories/prototypes/yarn workspace @safe-global/web storybook