Requirements
- Target platform
- OpenClaw
- Install method
- Manual import
- Extraction
- Extract archive
- Prerequisites
- OpenClaw
- Primary doc
- SKILL.md
Build Vue 3 SSR/SSG applications with proper data fetching, hydration, and server patterns.
Build Vue 3 SSR/SSG applications with proper data fetching, hydration, and server patterns.
Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.
I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.
I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.
useFetch 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 mismatches useFetch runs on server during SSR โ check process.server if you need client-only data Add key option to useFetch when URL params change but path stays same โ without it, cache returns stale data useLazyFetch doesn't block navigation โ use for non-critical data, but handle the pending state
Date.now() or Math.random() in templates cause hydration mismatches โ compute once in setup or use <ClientOnly> Browser-only APIs (localStorage, window) crash SSR โ wrap in onMounted or process.client check Conditional rendering based on client-only state mismatches โ use <ClientOnly> component with fallback v-if with async data shows flash of wrong content โ use v-show or skeleton states instead
Components in components/ auto-import with folder-based naming โ components/UI/Button.vue becomes <UIButton> Composables in composables/ must be named use* for auto-import โ utils.ts exports won't auto-import Server utils in server/utils/ auto-import in server routes only โ not available in client code Disable auto-imports per-file with // @ts-nocheck or explicitly import to avoid naming collisions
Files in server/api/ become API routes โ server/api/users.get.ts handles GET /api/users Method suffix (.get.ts, .post.ts) is required for method-specific handlers โ without it, handles all methods getQuery(event) for query params, readBody(event) for POST body โ don't access event.req directly Return value is auto-serialized to JSON โ throw createError({ statusCode: 404 }) for errors
useState is SSR-safe and persists across navigation โ regular ref() resets on each page useState key must be unique app-wide โ collisions silently share state between components Pinia stores need storeToRefs() to keep reactivity when destructuring โ without it, values lose reactivity Don't initialize state with browser APIs in useState default โ it runs on server too
Global middleware in middleware/ with .global.ts suffix runs on every route โ order is alphabetical Route middleware defined in definePageMeta runs after global โ use for auth checks on specific pages navigateTo() in middleware must be returned โ forgetting return continues to the original route Server middleware in server/middleware/ runs on all server requests including API routes
runtimeConfig for server secrets, runtimeConfig.public for client-safe values โ env vars override with NUXT_ prefix app.config.ts for build-time config that doesn't need env vars โ it's bundled into the app nuxt.config.ts changes require restart โ app.config.ts changes hot-reload
useSeoMeta for standard meta tags โ type-safe and handles og:/twitter: prefixes automatically useHead for custom tags, scripts, and links โ more flexible but no type safety for meta names Meta in definePageMeta is static โ use useSeoMeta in setup for dynamic values titleTemplate in nuxt.config for consistent titles โ %s - My Site pattern
Plugins run before app creation โ use nuxtApp.hook('app:created') for post-creation logic provide in plugins makes values available via useNuxtApp() โ but composables are cleaner Plugin order: numbered prefixes (01.plugin.ts) run first, then alphabetical โ dependencies need explicit ordering Client-only plugins: .client.ts suffix โ server-only: .server.ts suffix
nuxt generate creates static files โ but API routes won't work without a server nuxt build creates server bundle โ deploy the .output directory ISR with routeRules: '/blog/**': { isr: 3600 } โ caches pages for 1 hour Prerender specific routes: routeRules: { '/about': { prerender: true } } โ builds static HTML at build time
Code helpers, APIs, CLIs, browser automation, testing, and developer operations.
Largest current source with strong distribution and engagement signals.