Install
openclaw skills install nuxtBuild Vue 3 SSR/SSG applications with proper data fetching, hydration, and server patterns.
openclaw skills install nuxtuseFetch deduplicates and caches requests during SSR — use it in components, not $fetch which fetches twice (server + client)$fetch is for event handlers and server routes only — in <script setup> it causes hydration mismatchesuseFetch runs on server during SSR — check process.server if you need client-only datakey option to useFetch when URL params change but path stays same — without it, cache returns stale datauseLazyFetch doesn't block navigation — use for non-critical data, but handle the pending stateDate.now() or Math.random() in templates cause hydration mismatches — compute once in setup or use <ClientOnly>onMounted or process.client check<ClientOnly> component with fallbackv-if with async data shows flash of wrong content — use v-show or skeleton states insteadcomponents/ auto-import with folder-based naming — components/UI/Button.vue becomes <UIButton>composables/ must be named use* for auto-import — utils.ts exports won't auto-importserver/utils/ auto-import in server routes only — not available in client code// @ts-nocheck or explicitly import to avoid naming collisionsserver/api/ become API routes — server/api/users.get.ts handles GET /api/users.get.ts, .post.ts) is required for method-specific handlers — without it, handles all methodsgetQuery(event) for query params, readBody(event) for POST body — don't access event.req directlycreateError({ statusCode: 404 }) for errorsuseState is SSR-safe and persists across navigation — regular ref() resets on each pageuseState key must be unique app-wide — collisions silently share state between componentsstoreToRefs() to keep reactivity when destructuring — without it, values lose reactivityuseState default — it runs on server toomiddleware/ with .global.ts suffix runs on every route — order is alphabeticaldefinePageMeta runs after global — use for auth checks on specific pagesnavigateTo() in middleware must be returned — forgetting return continues to the original routeserver/middleware/ runs on all server requests including API routesruntimeConfig for server secrets, runtimeConfig.public for client-safe values — env vars override with NUXT_ prefixapp.config.ts for build-time config that doesn't need env vars — it's bundled into the appnuxt.config.ts changes require restart — app.config.ts changes hot-reloaduseSeoMeta for standard meta tags — type-safe and handles og:/twitter: prefixes automaticallyuseHead for custom tags, scripts, and links — more flexible but no type safety for meta namesdefinePageMeta is static — use useSeoMeta in setup for dynamic valuestitleTemplate in nuxt.config for consistent titles — %s - My Site patternnuxtApp.hook('app:created') for post-creation logicprovide in plugins makes values available via useNuxtApp() — but composables are cleaner01.plugin.ts) run first, then alphabetical — dependencies need explicit ordering.client.ts suffix — server-only: .server.ts suffixnuxt generate creates static files — but API routes won't work without a servernuxt build creates server bundle — deploy the .output directoryrouteRules: '/blog/**': { isr: 3600 } — caches pages for 1 hourrouteRules: { '/about': { prerender: true } } — builds static HTML at build time