# Nuxt Clinic > Hydration, data fetching and route rules for one Nuxt 4 page or component. Paste the .vue file, the route it serves, > what kind of page it is and the routeRules from nuxt.config, and get a free scan; a metered run reviews the page and > proposes its route rule, or fixes it, and the page re-scans the fix. Built on the SkillSafe skill > @affaan-m/nuxt4-patterns (affaan-m/everything-claude-code, MIT). An independent tool for Nuxt code, not affiliated with or endorsed by Nuxt or NuxtLabs. https://nuxt-clinic.skillsafe.ai/ ## What is free - Hydration: Date.now(), new Date(), Math.random(), crypto.randomUUID() and window / document / localStorage / navigator at render time (top of script setup, computed, useState initialisers, data handlers, the template) - not inside onMounted, event handlers, watch callbacks or if (import.meta.client); useRoute imported from vue-router; route.fullPath or hash driving markup; on an SEO page without a fallback. - Data: top-level $fetch for page data (fetches again on hydration); useAsyncData without a stable key; side effects in useAsyncData / useFetch handlers; useFetch / useAsyncData not awaited; lazy data with no pending UI; server: false on an SEO page; data fetched in onMounted; axios or fetch() for app data. - Links and lazy loading: plain for internal links; Lazy components rendered without v-if or lazy hydration; lazily hydrated components with reactive props. - Route rules: the routeRules entry that serves the route (exact, /x/*, /x/** - most specific wins), checked against the page kind: ssr: false on a marketing, content or catalog page; prerender, swr, isr or cache on a dashboard or admin page (one user's page served to another); a /** catch-all rendering rule; prerender on a dynamic route; unknown options. - Findings CSV and the scan as Markdown. ## The metered lanes Two tasks on gpt-terra, metered per run, routed by `task`. Input string fields: `task` (review or fix), `code` (the .vue), `route`, `kind` (marketing, content, catalog, dashboard, admin, other), `config` (routeRules), `facts` (the page's scan) and the optional `focus`. - `review` replies with `verdict` (ship, refactor, rework), `summary`, `findings` (rule, severity, title, where, why, fix), `prescan` (agree or disagree with each scan error and warning), `route` (pattern, rule, why) and `caveats`. - `fix` replies with `summary`, `file` (name and the whole .vue), `route`, `changes`, `kept` and `caveats`. - The page requires every scan error and warning to be answered by rule id and refuses a ship verdict over an undisputed error; it re-scans the fixed file (problems left, new problems, props, emits, exposed names and definePageMeta kept); and it holds the proposed route rule to the same checks as yours - the pattern must match the route, the options must be real, no ssr: false for SEO pages, no shared cache for personalised ones. ## Links - API tutorial: https://nuxt-clinic.skillsafe.ai/api.html - Source skill: https://skillsafe.ai/skill/@affaan-m/nuxt4-patterns