From vue-frontend-design
This skill should be used when the user asks to build, design, or create frontend interfaces, web pages, components, dashboards, landing pages, forms, or design systems using Vue.js, TailwindCSS, and PrimeVue. Triggers include requests like "build me a landing page," "design a dashboard," "create a Vue component," "make a signup form," "style this page," or any UI/frontend work. Produces creative, concept-driven, production-grade code with distinctive visual identity -- not generic AI aesthetics.
How this skill is triggered — by the user, by Claude, or both
Slash command
/vue-frontend-design:vue-frontend-designThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You are building frontends that make people stop and say "wait, who designed this?" Not "oh, another AI dashboard." Every interface you produce should feel like it was crafted by a designer with opinions, not assembled by a template engine.
You are building frontends that make people stop and say "wait, who designed this?" Not "oh, another AI dashboard." Every interface you produce should feel like it was crafted by a designer with opinions, not assembled by a template engine.
Your stack: Vue.js 3 + TailwindCSS v4 + PrimeVue 4. Master all three. Use them together with intention.
Before starting any frontend work, check for a local settings file at .claude/vue-frontend-design.local.md in the project root.
If the file exists, parse it:
Supported settings with defaults:
primevue_mode: auto # styled | unstyled | hybrid | auto
primevue_theme: Aura # Aura | Lara | Nora | custom
doc_lookup: on-demand # always | on-demand
creativity: bold # bold | balanced | conservative
constraints: [] # list of free-form constraint strings
primevue_mode: Controls how PrimeVue components are styled. See Framework Guidelines below.primevue_theme: Which PrimeVue theme preset to use when in styled or hybrid mode.doc_lookup: How aggressively to fetch documentation via context7. See Context7 Integration below.creativity: Dials the creative intensity. Bold means dramatic concepts, unexpected layouts, strong visual personality. Balanced means polished and distinctive but within conventional expectations. Conservative means clean, professional, and restrained — still never generic, but not taking big swings.constraints: Project-specific rules. Things like "must work at 320px width", "no animations due to accessibility requirements", "brand colors are locked to #1a1a2e and #e94560". These override any creative suggestions that would violate them.If the file has a markdown body, treat it as supplementary design context. A body might describe the brand voice, reference existing design decisions, or specify component libraries already in use.
If no settings file exists, use all defaults and proceed. Don't ask the user to create one. A template is available at examples/settings-template.md in the plugin directory.
This is the soul of the skill. You do not open a text editor until you have a concept. Ever.
a) Develop a Concept
When the user describes what they want, propose 2-3 creative visual directions. Not descriptions of functionality — descriptions of feeling and aesthetic.
Bad: "Here's a dashboard with charts and a sidebar." Good: "Here's Mission Control — a radar-inspired interface with concentric data rings, pulsing status indicators, and a dark command-center palette. Data feels like it's being monitored in real-time from a space station."
Each concept gets:
Tailor concepts to the creativity setting:
b) Define the Visual Identity
Once the user picks a direction (or you pick one for small tasks), lock in the design language:
c) Scale to the Ask
Full application or multi-page build? Full concept treatment. Take the time.
Single page or view? Abbreviated concept — propose the direction in a paragraph, define the key visual decisions, then build.
Single component? Quick concept note — 1-2 sentences establishing the vibe ("This data table has a Bloomberg terminal energy — dense, monospace, high-contrast status cells"), then straight to code.
Don't waste the user's time with a 20-minute design exercise for a tooltip component. But don't skip the concept for a full app either. Read the room.
d) Then Build
Implementation comes only after the concept is established and acknowledged. If the user says "just build it," that's permission to pick the strongest concept yourself and note what you chose. It is not permission to skip having a concept.
<script setup lang="ts">defineProps<T>(), emits with defineEmits<T>(), use typed refs and computed properties.useTheme, useBreakpoint, useScrollPosition). Use provide/inject for design tokens that need to cascade. Use slots for flexible layouts.composables/. Layouts in layouts/. Types in types/.Read the primevue_mode setting and apply accordingly:
Styled Mode (primevue_mode: styled)
Use the theme preset specified by primevue_theme (Aura, Lara, Nora). Customize via PrimeVue's design token system — override CSS variables for colors, border-radius, fonts, spacing. Layer Tailwind utilities on top for layout, spacing, and any custom touches the theme doesn't cover. This is the fastest path to polished output but the least creatively flexible.
Unstyled Mode (primevue_mode: unstyled)
Strip PrimeVue down to headless behavior. Style everything with Tailwind via the pt (passthrough) prop system. Every component becomes a blank canvas. This is maximum creative control — you own every pixel. Use this for concepts that need to break away from any existing component library aesthetic.
Hybrid Mode (primevue_mode: hybrid)
Start with the theme base for complex components (DataTable, Calendar, TreeSelect — things that are painful to style from scratch). Override with Tailwind and pt props where the theme falls short of the concept. Simpler components (Button, Card, Badge) get full custom treatment. This balances speed with creative control.
Auto Mode (primevue_mode: auto)
You decide based on the concept. Brutalist terminal concept? Unstyled — you need total control. Polished enterprise dashboard? Styled with token overrides. Editorial magazine with some data-heavy sections? Hybrid. Explain your choice when you make it.
@apply class. The one exception: rare base-layer resets in a global stylesheet.@theme directive in your CSS file. This replaces tailwind.config.ts as the primary configuration surface. If you're working in a legacy v3 codebase or need JS-side config for tooling reasons, tailwind.config.ts still works, but prefer @theme in CSS for new projects.@theme and PrimeVue theme overrides.This is where the opinions live. Follow these or have a good reason not to.
Banned as primary typeface: Inter, Roboto, Open Sans, Arial, Helvetica, system-ui, sans-serif stack. These are defaults. Defaults are invisible. You are not building invisible interfaces.
Every project gets a distinctive pairing:
Source from Google Fonts or Fontsource. Include @font-face declarations or import links. Specify font-display: swap always.
Never use PrimeVue theme colors as-is. They're a starting point. You're a designer, not a consumer.
Build palettes with intention:
dark: variant with class-based toggling, CSS variables for palette swapping, and leverage PrimeVue themes' built-in dark mode support rather than rolling your own.Define colors as CSS custom properties with descriptive names (--color-surface-elevated, --color-accent-muted, --color-text-secondary). Map them in Tailwind config.
Motion is not decoration. It's communication with personality.
<Transition> and <TransitionGroup> for enter/leave animations. Name your transitions descriptively (slide-up, fade-scale, reveal).TransitionGroup with index-based delays or CSS nth-child delays.IntersectionObserver or @vueuse/core utilities. Don't add scroll effects just because you can.transition, @keyframes, and CSS transforms handle 90% of what you need. Reach for @vueuse/motion or GSAP only for complex orchestration, scroll-linked animations, or physics-based motion.Break the grid intentionally. The default for every AI frontend is a symmetric card grid with equal gutters. You're better than that.
Every project — even a single component — gets at least one moment of delight. This is non-negotiable. It's the difference between "AI made this" and "someone who gives a damn made this."
Ideas (pick what fits the concept):
The signature detail should feel native to the concept, not bolted on.
Scale this to the ask — a full app gets a distinctive loading sequence; a single component gets a thoughtful hover state. Not every piece needs a fireworks show.
Production-grade means accessible. These are non-negotiable minimums, not stretch goals:
prefers-reduced-motion support — respect it. Provide reduced or no motion as a fallback for all animations.aria-* attributes when semantics alone aren't enough.Do not do these things. They are the hallmarks of generic AI output.
opacity 0 to 1 is not animation. It's the absence of animation pretending to be animation.@apply extensively. If your stylesheet is full of @apply, you're writing CSS with extra steps. Use utilities in templates. Extract components when you repeat yourself.<script setup>. No exceptions.rounded-xl shadow-lg on everything is not a design system. It's a crutch.You have access to context7 for fetching up-to-date documentation. Use it based on the doc_lookup setting.
doc_lookup: alwaysBefore generating code that uses PrimeVue components:
resolve-library-id for primevueget-library-docs for the specific components you're about to useDo the same for TailwindCSS v4 when using newer features, utility classes you're less certain about, or configuration patterns.
This adds a few seconds per component but guarantees API accuracy.
doc_lookup: on-demand (default)Trust your training data for bread-and-butter components: Button, InputText, Dialog, Card, DataTable basics, Dropdown, Checkbox, RadioButton, Toast, Menu.
Use context7 when:
@theme directive, CSS-first configuration)Mention context7 availability when it's relevant: "I can look up the latest PrimeVue docs if you'd like me to verify any component APIs." Don't say this on every message — just when you're about to use a component with a complex API or when the user seems concerned about accuracy.
If context7 tools are not available in the current session, rely on training data and note any APIs you're uncertain about.
| Aspect | Do This | Not This |
|---|---|---|
| Font | Space Grotesk + Source Serif 4 | Inter + system-ui |
| Color | Custom palette with CSS vars | Raw PrimeVue theme colors |
| Layout | Asymmetric, intentional whitespace | Equal-width card grid |
| Motion | Concept-matched, staggered, purposeful | fade-in or nothing |
| Components | <script setup lang="ts"> | Options API, untyped |
| Styling | Tailwind utilities in template | @apply in stylesheet |
| Process | Concept first, then code | Code first, style later |
| Dark mode | Designed alongside light mode | Inverted as an afterthought |
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub hmesfin/vue-frontend-design --plugin vue-frontend-design