vintasoftware/vinta-schedule-frontend-web/new-composition
Claude Code and agent skill by vintasoftware/vinta-schedule-frontend-web
- community
Checking that the SKILL.md file is still in the repository.
Scaffold a feature composition — a component assembled from layout primitives + ui atoms under src/components/<feature>/, like a form, card view, navbar, or section. Use when the user says "build a <feature> component", "create a form for X", "add a settings panel/section", "make a <thing> view", or assembles existing atoms into something larger. NOT for design-system atoms (use new-component) or full routes (use new-page).
Install
npx vskill@latest install vintasoftware/vinta-schedule-frontend-web/new-compositionSKILL.md
New Composition
A composition is a feature-level component that assembles layout primitives and ui atoms into something a page renders. Lives in `src/components/<feature>/` (e.g. authentication, home-page, or a new feature folder). Examples: `login-form.tsx`, `marketing-home.tsx`, `page-header.tsx`.
Before writing
- Layout primitives:
@/components/layout(Box,Stack,HStack,
VStack, Grid, Container, Section, PageHeader, Heading, Text…).
- ui atoms:
@/components/ui(Button,Card,Input,Form,Badge,
Alert, Dialog…). If a needed atom is missing, create it first via new-component.
- Decide server vs client: add
'use client'only if it uses hooks, state,
or event handlers. Presentational compositions stay server components.
- Pick the feature folder + file name
kebab-name.tsx.
Structure
Assemble from primitives + atoms — no raw layout divs/classes:
If it has a form
Use react-hook-form + zod with the Form* primitives, mirroring `login-form.tsx`: useForm({ resolver: zodResolver(schema) }), FormField / FormItem / FormLabel / FormControl / FormMessage. Define the zod schema at module scope. Surface API errors with Alert.
If it fetches/mutates data
Don't call the generated client directly — use a data hook from @/hooks/<domain>/ (create one via new-hook if missing). Read isPending / error off the returned mutation/query for UI state.
Conventions
- Named export (compositions don't default-export, unlike pages). Match the
neighbor file if it differs (login-form default-exports — follow local style).
- Props typed with an exported
*Propsinterface. - Spacing in structural bars/shells: Tailwind classes (DESIGN.md §3); page/content
composition: primitive gap/padding props are fine.
- Responsive via
@containerqueries where the component reacts to its own width. - Icon-only controls:
aria-label.
After
- Add a colocated story
kebab-name.stories.tsx— see
add-storybook-story. Use parameters: { layout: 'fullscreen' } for full-bleed compositions and a mobile-viewport variant for responsive ones.
- Test interactive logic with Vitest + Testing Library (mock
next/navigation
and the network like the auth tests).
npm run typecheck+npm run lint+npm run formatclean; eyeball in
npm run storybook.
Don't
- Don't reach for raw
<div className="flex …">— compose primitives. - Don't call the generated API client from the component — go through a hook.
- Don't hard-code colors.
Security
- Security scanPassed, 90 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingai-tools/skills/new-composition/SKILL.md
Popularity
- 7-day trend score
- 0
Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/vintasoftware/vinta-schedule-frontend-web/new-composition)