Help us improve
Share bugs, ideas, or general feedback.
From vue-development-assistant
Master Nuxt.js - SSR, SSG, Nitro Server, Modules, Auto-imports, Deployment
npx claudepluginhub pluginagentmarketplace/custom-plugin-vue --plugin vue-assistantHow this skill is triggered — by the user, by Claude, or both
Slash command
/vue-development-assistant:skills/vue-nuxtThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Production-grade skill for mastering Nuxt 3 and building full-stack Vue applications.
Provides Nuxt.js patterns for SSR/SSG/hybrid rendering, data fetching, file-based routing, Pinia state, performance optimization, auth middleware, and Vitest testing.
Standardizes Nuxt 3 project conventions: pages, layouts, SSR/SSG/SPA rendering, data fetching with useFetch/useAsyncData, route middleware, plugins, modules, and server routes.
Guides Nuxt 4+ development with server routes, file-based routing, middleware, composables, and configuration. Covers h3 v1 and nitropack v2 patterns. Updated for v4.3+.
Share bugs, ideas, or general feedback.
Production-grade skill for mastering Nuxt 3 and building full-stack Vue applications.
Single Responsibility: Teach Nuxt 3 architecture including SSR/SSG, Nitro server, modules, auto-imports, and deployment strategies.
interface NuxtParams {
topic: 'config' | 'ssr' | 'ssg' | 'api' | 'modules' | 'deploy' | 'all';
level: 'beginner' | 'intermediate' | 'advanced';
context?: {
hosting?: 'vercel' | 'netlify' | 'cloudflare' | 'node';
rendering?: 'ssr' | 'ssg' | 'hybrid';
};
}
Prerequisites: vue-fundamentals, vue-composition-api
Duration: 3-4 hours
Outcome: Set up and configure Nuxt 3
| Topic | Concept | Exercise |
|---|---|---|
| Installation | nuxi create | New project |
| Config | nuxt.config.ts | Basic setup |
| Directory | pages/, components/ | Structure app |
| Auto-imports | No manual imports | Use composables |
| Dev tools | Nuxt DevTools | Debugging |
Prerequisites: Module 1
Duration: 2 hours
Outcome: Master Nuxt routing conventions
| Pattern | File | Route |
|---|---|---|
| Static | pages/about.vue | /about |
| Dynamic | pages/user/[id].vue | /user/:id |
| Catch-all | pages/[...slug].vue | /* |
| Optional | pages/[[optional]].vue | /:optional? |
| Nested | pages/dashboard/settings.vue | /dashboard/settings |
Page Metadata:
<script setup>
definePageMeta({
layout: 'admin',
middleware: ['auth'],
title: 'Dashboard'
})
</script>
Prerequisites: Module 2
Duration: 3-4 hours
Outcome: Fetch data correctly in Nuxt
| Composable | Use Case | Example |
|---|---|---|
| useFetch | Simple fetching | API calls |
| useAsyncData | Full control | Transform data |
| useLazyFetch | Non-blocking | Secondary data |
| $fetch | Server-side | API routes |
Fetching Patterns:
// Block navigation
const { data } = await useFetch('/api/user')
// Non-blocking
const { data, pending } = useLazyFetch('/api/posts')
// With transform
const { data } = await useAsyncData('user',
() => $fetch('/api/user'),
{ transform: (d) => d.user }
)
Prerequisites: Module 3
Duration: 3-4 hours
Outcome: Build server API routes
| Topic | Location | Exercise |
|---|---|---|
| GET | server/api/users.get.ts | List users |
| POST | server/api/users.post.ts | Create user |
| Dynamic | server/api/users/[id].ts | Get by ID |
| Middleware | server/middleware/ | Auth check |
| Utils | server/utils/ | Shared code |
API Route Example:
// server/api/users/[id].get.ts
export default defineEventHandler(async (event) => {
const id = getRouterParam(event, 'id')
if (!id) {
throw createError({ statusCode: 400, message: 'ID required' })
}
const user = await db.user.findUnique({ where: { id } })
if (!user) {
throw createError({ statusCode: 404, message: 'Not found' })
}
return user
})
Prerequisites: Modules 1-4
Duration: 3 hours
Outcome: Deploy Nuxt applications
| Mode | Config | Use Case |
|---|---|---|
| SSR | ssr: true | Dynamic content |
| SSG | routeRules: { prerender } | Static content |
| SPA | ssr: false | Client-only |
| Hybrid | routeRules per route | Mixed content |
Deployment Targets:
| Platform | Preset | Config |
|---|---|---|
| Vercel | vercel | Zero-config |
| Netlify | netlify | netlify.toml |
| Cloudflare | cloudflare-pages | wrangler.toml |
| Node | node-server | Docker |
const skillConfig = {
maxAttempts: 3,
backoffMs: [1000, 2000, 4000],
onFailure: 'simplify_config'
}
tracking:
- event: project_created
data: [template, modules]
- event: api_route_built
data: [method, path]
- event: deployed
data: [platform, render_mode]
| Issue | Cause | Solution |
|---|---|---|
| Hydration mismatch | SSR/client diff | Use <ClientOnly> |
| Auto-import fails | Wrong directory | Check naming |
| API 500 error | Server error | Check server logs |
| Build fails | Config error | Validate nuxt.config |
import { describe, it, expect } from 'vitest'
import { setup, $fetch } from '@nuxt/test-utils'
describe('API Routes', async () => {
await setup({ server: true })
it('returns users', async () => {
const users = await $fetch('/api/users')
expect(Array.isArray(users)).toBe(true)
})
it('returns 404 for missing user', async () => {
const response = await $fetch('/api/users/999', {
ignoreResponseError: true
})
expect(response.statusCode).toBe(404)
})
})
Skill("vue-nuxt")
vue-composition-api - Prerequisitevue-testing - Testing Nuxt appsvue-typescript - Type-safe Nuxt