Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Builds Vue 3 components with Composition API patterns, configures Nuxt 3 SSR/SSG projects, sets up Pinia stores, scaffolds Quasar/Capacitor mobile apps, implements PWA features, and optimises Vite builds. Use when creating Vue 3 applications with Composition API, writing reusable composables, managing state with Pinia, building hybrid mobile apps with Quasar or Capacitor, configuring service workers, or tuning Vite configuration and TypeScript integration.
.claude/skills/jeffallan-vue-expert/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 7% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 31% | 0% |
| case-07 | ✓→✓ | = Same ✓ | 29% | 0% |
| case-01 | ✓→✓ | = Same ✓ | 36% | 0% |
| case-02 | ✓→✓ | = Same ✓ | 26% | 0% |
Senior Vue specialist with deep expertise in Vue 3 Composition API, reactivity system, and modern Vue ecosystem.
vue-tsc --noEmit for type errors; verify reactivity with Vue DevTools. If type errors are found: fix each issue and re-run vue-tsc --noEmit until the output is clean before proceedingLoad detailed guidance based on context:
| Topic | Reference | Load When | |-------|-----------|-----------| | Composition API | references/composition-api.md | ref, reactive, computed, watch, lifecycle | | Components | references/components.md | Props, emits, slots, provide/inject | | State Management | references/state-management.md | Pinia stores, actions, getters | | Nuxt 3 | references/nuxt.md | SSR, file-based routing, useFetch, Fastify, hydration | | TypeScript | references/typescript.md | Typing props, generic components, type safety | | Mobile & Hybrid | references/mobile-hybrid.md | Quasar, Capacitor, PWA, service worker, mobile | | Build Tooling | references/build-tooling.md | Vite config, sourcemaps, optimization, bundling |
Minimal component demonstrating preferred patterns:
vue<script setup lang="ts"> import { ref, computed } from 'vue' const props = defineProps<{ initialCount?: number }>() const count = ref(props.initialCount ?? 0) const doubled = computed(() => count.value * 2) function increment() { count.value++ } </script> <template> <button @click="increment">Count: {{ count }} (doubled: {{ doubled }})</button> </template>
<script setup> syntax for componentsref() for primitives, reactive() for objectscomputed() for derived stateWhen implementing Vue features, provide:
<script setup> and TypeScriptVue 3 Composition API, Pinia, Nuxt 3, Vue Router 4, Vite, VueUse, TypeScript, Vitest, Vue Test Utils, SSR/SSG, reactive programming, performance optimization
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-07 | pass→pass | 11,266 | 9,581 | -15% | 1 | 1 | 0% | 2,337 | 3,004 | +29% | 0 | 0 | — |
case-01 | pass→pass | 21,791 | 22,552 | +3% | 1 | 1 | 0% | 5,035 | 6,827 | +36% | 0 | 0 | — |
case-02 | pass→pass | 15,217 | 14,641 | -4% | 1 | 1 | 0% | 3,196 | 4,027 | +26% | 0 | 0 | — |
case-03 | fail→pass | 13,184 | 10,914 | -17% | 1 | 1 | 0% | 3,057 | 3,261 | +7% | 0 | 0 | — |
case-04 | pass→pass | 10,565 | 11,619 | +10% | 1 | 1 | 0% | 2,126 | 3,396 | +60% | 0 | 0 | — |
case-05 | fail→pass | 8,681 | 7,274 | -16% | 1 | 1 | 0% | 1,855 | 2,422 | +31% | 0 | 0 | — |
case-06 | pass→pass | 4,466 | 3,616 | -19% | 1 | 1 | 0% | 818 | 1,457 | +78% | 0 | 0 | — |
case-08 | pass→pass | 8,423 | 8,314 | -1% | 1 | 1 | 0% | 1,640 | 2,466 | +50% | 0 | 0 | — |
case-09 | pass→pass | 8,101 | 8,669 | +7% | 1 | 1 | 0% | 1,728 | 2,597 | +50% | 0 | 0 | — |
case-10 | pass→pass | 4,594 | 5,476 | +19% | 1 | 1 | 0% | 966 | 1,936 | +100% | 0 | 0 | — |
case-11 | fail→fail | 10,124 | 10,436 | +3% | 1 | 1 | 0% | 2,164 | 2,948 | +36% | 0 | 0 | — |
case-12 | pass→pass | 4,049 | 5,294 | +31% | 1 | 1 | 0% | 639 | 1,888 | +195% | 0 | 0 | — |
case-13 | pass→pass | 12,746 | 11,075 | -13% | 1 | 1 | 0% | 2,757 | 3,229 | +17% | 0 | 0 | — |
case-14 | pass→pass | 11,611 | 12,945 | +11% | 1 | 1 | 0% | 2,081 | 3,328 | +60% | 0 | 0 | — |
case-15 | pass→pass | 14,346 | 13,115 | -9% | 1 | 1 | 0% | 2,879 | 3,387 | +18% | 0 | 0 | — |
case-16 | pass→pass | 3,337 | 3,785 | +13% | 1 | 1 | 0% | 634 | 1,474 | +132% | 0 | 0 | — |
case-17 | pass→pass | 8,199 | 8,722 | +6% | 1 | 1 | 0% | 1,633 | 2,523 | +55% | 0 | 0 | — |
case-18 | pass→pass | 11,254 | 9,799 | -13% | 1 | 1 | 0% | 2,020 | 2,791 | +38% | 0 | 0 | — |
case-19 | pass→pass | 8,118 | 9,652 | +19% | 1 | 1 | 0% | 1,878 | 2,782 | +48% | 0 | 0 | — |
case-20 | pass→pass | 12,737 | 11,951 | -6% | 1 | 1 | 0% | 2,811 | 3,593 | +28% | 0 | 0 | — |
case-21 | pass→pass | 9,431 | 8,833 | -6% | 1 | 1 | 0% | 2,183 | 2,668 | +22% | 0 | 0 | — |
case-22 | pass→pass | 15,153 | 17,833 | +18% | 1 | 1 | 0% | 3,603 | 4,728 | +31% | 0 | 0 | — |
case-23 | pass→pass | 21,284 | 21,046 | -1% | 1 | 1 | 0% | 4,733 | 5,710 | +21% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted. The headline lift of +9 percentage points is the difference between those two pass rates over the 23 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.