[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71N37D2T8AB1ZXHWENW4V01":3,"skill-same:01M71N37D2T8AB1ZXHWENW4V01":96},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":45,"commitSha":46,"skillDirectory":47,"forksCount":14,"repositoryHtmlUrl":48,"repositoryHomepageUrl":49,"ownerHtmlUrl":50,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":51,"install":52,"resources":65},"01M71N37D2T8AB1ZXHWENW4V01","expo-router",null,"Framework (OSS). Navigation and routing for Expo Router. Covers file-based routes, groups and dynamic routes, folder organization, Link with previews and context menus, native Stack, page titles, modals and form sheets, NativeTabs, headers and toolbars, and header search bars.","pattanation\u002FNorvik","pattanation","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F235419268?v=4","01M71M5THHYYB15ME8R2E4FCZG","Patta","01M71M5TJM1NDM992M8PDKYR2K",0,"MIT","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fexpo-router\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"router","expo","expo router","groups","headers","link","folder","organization","native","context menus","stack","routing","with","titles","file","sheets","search","page","for","form","2026-11-10 10:56:23",false,"---\nname: expo-router\ndescription: Framework (OSS). Navigation and routing for Expo Router. Covers file-based routes, groups and dynamic routes, folder organization, Link with previews and context menus, native Stack, page titles, modals and form sheets, NativeTabs, headers and toolbars, and header search bars.\nversion: 1.0.1\nlicense: MIT\n---\n\n# Expo Router Navigation\n\nNavigation and routing for Expo Router apps. For screen styling, colors, controls, animations, media, and visual effects, use the `expo-native-ui` skill.\n\n## References\n\nConsult these resources as needed:\n\n```\nreferences\u002F\n  route-structure.md     Route conventions, dynamic routes, groups, folder organization\n  tabs.md                NativeTabs, migration from JS tabs, iOS 26 features\n  toolbar-and-headers.md Stack headers and toolbar buttons, menus, search (iOS only)\n  form-sheet.md          Form sheets in expo-router: configuration, footers and background interaction.\n  search.md              Search bar with headers, useSearch hook, filtering patterns\n  zoom-transitions.md    Apple Zoom: fluid zoom transitions with Link.AppleZoom (iOS 18+)\n```\n\n## Code Style\n\n- Always use kebab-case for file names, e.g. `comment-card.tsx`\n- Always remove old route files when moving or restructuring navigation\n- Never use special characters in file names\n- Configure tsconfig.json with path aliases, and prefer aliases over relative imports for refactors.\n\n## Routes\n\nSee `.\u002Freferences\u002Froute-structure.md` for detailed route conventions.\n\n- Routes belong in the `app` directory.\n- Never co-locate components, types, or utilities in the app directory. This is an anti-pattern.\n- Ensure the app always has a route that matches \"\u002F\", it may be inside a group route.\n\n## Library Preferences\n\n- `Color` from `expo-router` for native semantic colors, not raw `PlatformColor` (type-safe, auto-adapts to light\u002Fdark). See `expo-native-ui` for the full color palette pattern.\n- In SDK 56+, never import from `@react-navigation\u002F*` directly — use `expo-router\u002Freact-navigation` instead (covers `@react-navigation\u002Fnative`, `\u002Fcore`, `\u002Felements`, `\u002Frouters`)\n\n## Behavior\n\n- Prefer `Stack.SearchBar` to add a search bar to a screen\n\n# Navigation\n\n## Link\n\nUse `\u003CLink href=\"\u002Fpath\" \u002F>` from 'expo-router' for navigation between routes.\n\n```tsx\nimport { Link } from 'expo-router';\n\n\u002F\u002F Basic link\n\u003CLink href=\"\u002Fpath\" \u002F>\n\n\u002F\u002F Wrapping custom components\n\u003CLink href=\"\u002Fpath\" asChild>\n  \u003CPressable>...\u003C\u002FPressable>\n\u003C\u002FLink>\n```\n\nWhenever possible, include a `\u003CLink.Preview>` to follow iOS conventions. Add context menus and previews frequently to enhance navigation.\n\n## Stack\n\n- ALWAYS use `_layout.tsx` files to define stacks\n- Use Stack from 'expo-router\u002Fstack' for native navigation stacks\n\n### Page Title\n\nSet the page title with `Stack.Title`:\n\n```tsx\n\u003CStack.Title>Home\u003C\u002FStack.Title>\n```\n\n## Context Menus\n\nAdd long press context menus to Link components:\n\n```tsx\nimport { Link } from \"expo-router\";\n\n\u003CLink href=\"\u002Fsettings\" asChild>\n  \u003CLink.Trigger>\n    \u003CPressable>\n      \u003CCard \u002F>\n    \u003C\u002FPressable>\n  \u003C\u002FLink.Trigger>\n  \u003CLink.Menu>\n    \u003CLink.MenuAction\n      title=\"Share\"\n      icon=\"square.and.arrow.up\"\n      onPress={handleSharePress}\n    \u002F>\n    \u003CLink.MenuAction\n      title=\"Block\"\n      icon=\"nosign\"\n      destructive\n      onPress={handleBlockPress}\n    \u002F>\n    \u003CLink.Menu title=\"More\" icon=\"ellipsis\">\n      \u003CLink.MenuAction title=\"Copy\" icon=\"doc.on.doc\" onPress={() => {}} \u002F>\n      \u003CLink.MenuAction\n        title=\"Delete\"\n        icon=\"trash\"\n        destructive\n        onPress={() => {}}\n      \u002F>\n    \u003C\u002FLink.Menu>\n  \u003C\u002FLink.Menu>\n\u003C\u002FLink>;\n```\n\n## Link Previews\n\nUse link previews frequently to enhance navigation:\n\n```tsx\n\u003CLink href=\"\u002Fsettings\">\n  \u003CLink.Trigger>\n    \u003CPressable>\n      \u003CCard \u002F>\n    \u003C\u002FPressable>\n  \u003C\u002FLink.Trigger>\n  \u003CLink.Preview \u002F>\n\u003C\u002FLink>\n```\n\nLink preview can be used with context menus.\n\n## Modal\n\nPresent a screen as a modal:\n\n```tsx\n\u003CStack.Screen name=\"modal\" options={{ presentation: \"modal\" }} \u002F>\n```\n\nPrefer this to building a custom modal component.\n\n## Sheet\n\nPresent a screen as a dynamic form sheet:\n\n```tsx\n\u003CStack.Screen\n  name=\"sheet\"\n  options={{\n    presentation: \"formSheet\",\n    sheetGrabberVisible: true,\n    sheetAllowedDetents: [0.5, 1.0],\n    contentStyle: { backgroundColor: \"transparent\" },\n  }}\n\u002F>\n```\n\n- Using `contentStyle: { backgroundColor: \"transparent\" }` makes the background liquid glass on iOS 26+.\n\n## Common route structure\n\nA standard app layout with tabs and stacks inside each tab:\n\n```\napp\u002F\n  _layout.tsx — \u003CNativeTabs \u002F>\n  (index,search)\u002F\n    _layout.tsx — \u003CStack \u002F>\n    index.tsx — Main list\n    search.tsx — Search view\n```\n\n```tsx\n\u002F\u002F app\u002F_layout.tsx\nimport { NativeTabs } from \"expo-router\u002Funstable-native-tabs\";\nimport { ThemeProvider, DarkTheme, DefaultTheme } from \"expo-router\u002Freact-navigation\";\nimport { useColorScheme } from \"react-native\";\n\nexport default function Layout() {\n  const colorScheme = useColorScheme();\n  return (\n    \u003CThemeProvider value={colorScheme === \"dark\" ? DarkTheme : DefaultTheme}>\n      \u003CNativeTabs>\n        \u003CNativeTabs.Trigger name=\"(index)\">\n          \u003CNativeTabs.Trigger.Icon sf=\"list.dash\" md=\"list\" \u002F>\n          \u003CNativeTabs.Trigger.Label>Items\u003C\u002FNativeTabs.Trigger.Label>\n        \u003C\u002FNativeTabs.Trigger>\n        \u003CNativeTabs.Trigger name=\"(search)\" role=\"search\" \u002F>\n      \u003C\u002FNativeTabs>\n    \u003C\u002FThemeProvider>\n  );\n}\n```\n\nCreate a shared group route so both tabs can push common screens:\n\n```tsx\n\u002F\u002F app\u002F(index,search)\u002F_layout.tsx\nimport { Stack } from \"expo-router\u002Fstack\";\nimport { colors } from \"@\u002Ftheme\u002Fcolors\";\n\nexport default function Layout({ segment }) {\n  const screen = segment.match(\u002F\\((.*)\\)\u002F)?.[1]!;\n  const titles: Record\u003Cstring, string> = { index: \"Items\", search: \"Search\" };\n\n  return (\n    \u003CStack\n      screenOptions={{\n        headerTransparent: true,\n        headerShadowVisible: false,\n        headerLargeTitleShadowVisible: false,\n        headerLargeStyle: { backgroundColor: \"transparent\" },\n        headerTitleStyle: { color: colors.label },\n        headerLargeTitle: true,\n        headerBlurEffect: \"none\",\n        headerBackButtonDisplayMode: \"minimal\",\n      }}\n    >\n      \u003CStack.Screen name={screen} options={{ title: titles[screen] }} \u002F>\n      \u003CStack.Screen name=\"i\u002F[id]\" options={{ headerLargeTitle: false }} \u002F>\n    \u003C\u002FStack>\n  );\n}\n```\n","# Expo Router Navigation\n\nNavigation and routing for Expo Router apps. For screen styling, colors, controls, animations, media, and visual effects, use the `expo-native-ui` skill.\n\n## References\n\nConsult these resources as needed:\n\n```\nreferences\u002F\n  route-structure.md     Route conventions, dynamic routes, groups, folder organization\n  tabs.md                NativeTabs, migration from JS tabs, iOS 26 features\n  toolbar-and-headers.md Stack headers and toolbar buttons, menus, search (iOS only)\n  form-sheet.md          Form sheets in expo-router: configuration, footers and background interaction.\n  search.md              Search bar with headers, useSearch hook, filtering patterns\n  zoom-transitions.md    Apple Zoom: fluid zoom transitions with Link.AppleZoom (iOS 18+)\n```\n\n## Code Style\n\n- Always use kebab-case for file names, e.g. `comment-card.tsx`\n- Always remove old route files when moving or restructuring navigation\n- Never use special characters in file names\n- Configure tsconfig.json with path aliases, and prefer aliases over relative imports for refactors.\n\n## Routes\n\nSee `.\u002Freferences\u002Froute-structure.md` for detailed route conventions.\n\n- Routes belong in the `app` directory.\n- Never co-locate components, types, or utilities in the app directory. This is an anti-pattern.\n- Ensure the app always has a route that matches \"\u002F\", it may be inside a group route.\n\n## Library Preferences\n\n- `Color` from `expo-router` for native semantic colors, not raw `PlatformColor` (type-safe, auto-adapts to light\u002Fdark). See `expo-native-ui` for the full color palette pattern.\n- In SDK 56+, never import from `@react-navigation\u002F*` directly — use `expo-router\u002Freact-navigation` instead (covers `@react-navigation\u002Fnative`, `\u002Fcore`, `\u002Felements`, `\u002Frouters`)\n\n## Behavior\n\n- Prefer `Stack.SearchBar` to add a search bar to a screen\n\n# Navigation\n\n## Link\n\nUse `\u003CLink href=\"\u002Fpath\" \u002F>` from 'expo-router' for navigation between routes.\n\n```tsx\nimport { Link } from 'expo-router';\n\n\u002F\u002F Basic link\n\u003CLink href=\"\u002Fpath\" \u002F>\n\n\u002F\u002F Wrapping custom components\n\u003CLink href=\"\u002Fpath\" asChild>\n  \u003CPressable>...\u003C\u002FPressable>\n\u003C\u002FLink>\n```\n\nWhenever possible, include a `\u003CLink.Preview>` to follow iOS conventions. Add context menus and previews frequently to enhance navigation.\n\n## Stack\n\n- ALWAYS use `_layout.tsx` files to define stacks\n- Use Stack from 'expo-router\u002Fstack' for native navigation stacks\n\n### Page Title\n\nSet the page title with `Stack.Title`:\n\n```tsx\n\u003CStack.Title>Home\u003C\u002FStack.Title>\n```\n\n## Context Menus\n\nAdd long press context menus to Link components:\n\n```tsx\nimport { Link } from \"expo-router\";\n\n\u003CLink href=\"\u002Fsettings\" asChild>\n  \u003CLink.Trigger>\n    \u003CPressable>\n      \u003CCard \u002F>\n    \u003C\u002FPressable>\n  \u003C\u002FLink.Trigger>\n  \u003CLink.Menu>\n    \u003CLink.MenuAction\n      title=\"Share\"\n      icon=\"square.and.arrow.up\"\n      onPress={handleSharePress}\n    \u002F>\n    \u003CLink.MenuAction\n      title=\"Block\"\n      icon=\"nosign\"\n      destructive\n      onPress={handleBlockPress}\n    \u002F>\n    \u003CLink.Menu title=\"More\" icon=\"ellipsis\">\n      \u003CLink.MenuAction title=\"Copy\" icon=\"doc.on.doc\" onPress={() => {}} \u002F>\n      \u003CLink.MenuAction\n        title=\"Delete\"\n        icon=\"trash\"\n        destructive\n        onPress={() => {}}\n      \u002F>\n    \u003C\u002FLink.Menu>\n  \u003C\u002FLink.Menu>\n\u003C\u002FLink>;\n```\n\n## Link Previews\n\nUse link previews frequently to enhance navigation:\n\n```tsx\n\u003CLink href=\"\u002Fsettings\">\n  \u003CLink.Trigger>\n    \u003CPressable>\n      \u003CCard \u002F>\n    \u003C\u002FPressable>\n  \u003C\u002FLink.Trigger>\n  \u003CLink.Preview \u002F>\n\u003C\u002FLink>\n```\n\nLink preview can be used with context menus.\n\n## Modal\n\nPresent a screen as a modal:\n\n```tsx\n\u003CStack.Screen name=\"modal\" options={{ presentation: \"modal\" }} \u002F>\n```\n\nPrefer this to building a custom modal component.\n\n## Sheet\n\nPresent a screen as a dynamic form sheet:\n\n```tsx\n\u003CStack.Screen\n  name=\"sheet\"\n  options={{\n    presentation: \"formSheet\",\n    sheetGrabberVisible: true,\n    sheetAllowedDetents: [0.5, 1.0],\n    contentStyle: { backgroundColor: \"transparent\" },\n  }}\n\u002F>\n```\n\n- Using `contentStyle: { backgroundColor: \"transparent\" }` makes the background liquid glass on iOS 26+.\n\n## Common route structure\n\nA standard app layout with tabs and stacks inside each tab:\n\n```\napp\u002F\n  _layout.tsx — \u003CNativeTabs \u002F>\n  (index,search)\u002F\n    _layout.tsx — \u003CStack \u002F>\n    index.tsx — Main list\n    search.tsx — Search view\n```\n\n```tsx\n\u002F\u002F app\u002F_layout.tsx\nimport { NativeTabs } from \"expo-router\u002Funstable-native-tabs\";\nimport { ThemeProvider, DarkTheme, DefaultTheme } from \"expo-router\u002Freact-navigation\";\nimport { useColorScheme } from \"react-native\";\n\nexport default function Layout() {\n  const colorScheme = useColorScheme();\n  return (\n    \u003CThemeProvider value={colorScheme === \"dark\" ? DarkTheme : DefaultTheme}>\n      \u003CNativeTabs>\n        \u003CNativeTabs.Trigger name=\"(index)\">\n          \u003CNativeTabs.Trigger.Icon sf=\"list.dash\" md=\"list\" \u002F>\n          \u003CNativeTabs.Trigger.Label>Items\u003C\u002FNativeTabs.Trigger.Label>\n        \u003C\u002FNativeTabs.Trigger>\n        \u003CNativeTabs.Trigger name=\"(search)\" role=\"search\" \u002F>\n      \u003C\u002FNativeTabs>\n    \u003C\u002FThemeProvider>\n  );\n}\n```\n\nCreate a shared group route so both tabs can push common screens:\n\n```tsx\n\u002F\u002F app\u002F(index,search)\u002F_layout.tsx\nimport { Stack } from \"expo-router\u002Fstack\";\nimport { colors } from \"@\u002Ftheme\u002Fcolors\";\n\nexport default function Layout({ segment }) {\n  const screen = segment.match(\u002F\\((.*)\\)\u002F)?.[1]!;\n  const titles: Record\u003Cstring, string> = { index: \"Items\", search: \"Search\" };\n\n  return (\n    \u003CStack\n      screenOptions={{\n        headerTransparent: true,\n        headerShadowVisible: false,\n        headerLargeTitleShadowVisible: false,\n        headerLargeStyle: { backgroundColor: \"transparent\" },\n        headerTitleStyle: { color: colors.label },\n        headerLargeTitle: true,\n        headerBlurEffect: \"none\",\n        headerBackButtonDisplayMode: \"minimal\",\n      }}\n    >\n      \u003CStack.Screen name={screen} options={{ title: titles[screen] }} \u002F>\n      \u003CStack.Screen name=\"i\u002F[id]\" options={{ headerLargeTitle: false }} \u002F>\n    \u003C\u002FStack>\n  );\n}\n```\n",{"name":5,"license":15,"version":44,"description":7},"1.0.1","claude\u002Finstall-gsd-build-foQdV","d86cd127f527124b5fd0fd0bc679a4d79b7d01d7",".agents\u002Fskills\u002Fexpo-router","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik","https:\u002F\u002Fnorvik-orpin.vercel.app","https:\u002F\u002Fgithub.com\u002Fpattanation","2026-07-17 11:17:04",{"source":8,"skillName":5,"commands":53,"prompt":63,"zipAvailable":64},[54,57,60],{"tool":55,"command":56},"npx","npx skills add pattanation\u002FNorvik --skill expo-router",{"tool":58,"command":59},"bunx","bunx skills add pattanation\u002FNorvik --skill expo-router",{"tool":61,"command":62},"pnpm","pnpm dlx skills add pattanation\u002FNorvik --skill expo-router","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fexpo-router\u002FSKILL.md",true,[66,72,76,80,84,88,92],{"path":67,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":70,"sourceHtmlUrl":71},"agents\u002Fopenai.yaml","REFERENCE","参考文档",422,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fexpo-router\u002Fagents\u002Fopenai.yaml",{"path":73,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":74,"sourceHtmlUrl":75},"references\u002Fform-sheet.md",6320,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fexpo-router\u002Freferences\u002Fform-sheet.md",{"path":77,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":78,"sourceHtmlUrl":79},"references\u002Froute-structure.md",5106,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fexpo-router\u002Freferences\u002Froute-structure.md",{"path":81,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":82,"sourceHtmlUrl":83},"references\u002Fsearch.md",5173,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fexpo-router\u002Freferences\u002Fsearch.md",{"path":85,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":86,"sourceHtmlUrl":87},"references\u002Ftabs.md",13308,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fexpo-router\u002Freferences\u002Ftabs.md",{"path":89,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":90,"sourceHtmlUrl":91},"references\u002Ftoolbar-and-headers.md",8061,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fexpo-router\u002Freferences\u002Ftoolbar-and-headers.md",{"path":93,"resourceType":68,"resourceTypeDesc":69,"sizeBytes":94,"sourceHtmlUrl":95},"references\u002Fzoom-transitions.md",4848,"https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fexpo-router\u002Freferences\u002Fzoom-transitions.md",[97,130,154,177,199,213],{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":101,"licenseFileUrl":102,"sourceHtmlUrl":103,"categories":104,"keywords":113,"publishedAt":129},"01M71QDV4DM8T19HEHWATEF1K4","webapp-testing","Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fwebapp-testing\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fwebapp-testing\u002FSKILL.md",[105,110],{"categoryNo":106,"categoryName":107,"taxonomyType":108,"taxonomyTypeDesc":109},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",{"categoryNo":111,"categoryName":112,"taxonomyType":108,"taxonomyTypeDesc":109},"01JBSEEDCAT000000000000009","前端开发",[114,115,116,37,117,118,119,120,121,122,123,31,124,125,126,127,128],"webapp","testing","webapp testing","applications","local","frontend","debugging","toolkit","logs","browser","playwright","web","behavior","ui","screenshots","2026-11-10 13:02:02",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":101,"licenseFileUrl":134,"sourceHtmlUrl":135,"categories":136,"keywords":138,"publishedAt":129},"01M71QDH2GGMXGA9105C9W1N7B","web-artifacts-builder","Suite of tools for creating elaborate, multi-component claude.ai HTML artifacts using modern frontend web technologies (React, Tailwind CSS, shadcn\u002Fui). Use for complex artifacts requiring state management, routing, or shadcn\u002Fui components - not for simple single-file HTML\u002FJSX artifacts.","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fweb-artifacts-builder\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fweb-artifacts-builder\u002FSKILL.md",[137],{"categoryNo":111,"categoryName":112,"taxonomyType":108,"taxonomyTypeDesc":109},[139,140,141,125,142,143,144,37,145,146,119,147,148,33,149,150,151,152,30,153],"builder","artifacts builder","artifacts","web artifacts builder","single-file","css","Tailwind","ui components","single","use","components","react","multi","state","state management",{"skillNo":155,"name":156,"nameZh":6,"description":157,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":158,"sourceHtmlUrl":159,"categories":160,"keywords":162,"publishedAt":129},"01M71QD9T2XC3EWMQNN9ACNWQ1","vueuse-functions","Apply VueUse composables where appropriate to build concise, maintainable Vue.js \u002F Nuxt features.","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvueuse-functions\u002FLICENSE.md","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvueuse-functions\u002FSKILL.md",[161],{"categoryNo":111,"categoryName":112,"taxonomyType":108,"taxonomyTypeDesc":109},[163,164,165,166,167,168,169,170,171,172,173,174,175,176],"functions","vueuse","vueuse functions","project","nuxt","apply","github","concise","build","https","features","vue","js","composables",{"skillNo":178,"name":179,"nameZh":6,"description":180,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":181,"sourceHtmlUrl":182,"categories":183,"keywords":186,"publishedAt":129},"01M71QD51HWSGYMCMB7RW7PGK8","vue-testing-best-practices","Use for Vue.js testing. Covers Vitest, Vue Test Utils, component testing, mocking, testing patterns, and Playwright for E2E testing.","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvue-testing-best-practices\u002FLICENSE.md","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvue-testing-best-practices\u002FSKILL.md",[184,185],{"categoryNo":106,"categoryName":107,"taxonomyType":108,"taxonomyTypeDesc":109},{"categoryNo":111,"categoryName":112,"taxonomyType":108,"taxonomyTypeDesc":109},[187,115,188,174,189,124,190,191,192,169,193,37,194,195,196,148,197,175,198],"vue testing best practices","testing best practices","best practices","test","testing patterns","component","vitest","mocking","e2e","utils","patterns","e2e testing",{"skillNo":200,"name":201,"nameZh":6,"description":202,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":203,"sourceHtmlUrl":204,"categories":205,"keywords":207,"publishedAt":129},"01M71QD358H2DJ9THJRBP77T3T","vue-router-best-practices","Vue Router 4 patterns, navigation guards, route params, and route-component lifecycle interactions.","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvue-router-best-practices\u002FLICENSE.md","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvue-router-best-practices\u002FSKILL.md",[206],{"categoryNo":111,"categoryName":112,"taxonomyType":108,"taxonomyTypeDesc":109},[19,174,208,189,209,192,210,169,197,211,212],"vue router best practices","route","guards","navigation","lifecycle",{"skillNo":214,"name":215,"nameZh":6,"description":216,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":217,"sourceHtmlUrl":218,"categories":219,"keywords":221,"publishedAt":129},"01M71QCYPNWDE2MQZ1TF3ED5S4","vue-best-practices","MUST be used for Vue.js tasks. Strongly recommends Composition API with `\u003Cscript setup>` and TypeScript as the standard approach. Covers Vue 3, SSR, Volar, vue-tsc. Load for any Vue, .vue files, Vue Router, Pinia, or Vite with Vue work. ALWAYS use Composition API unless the project explicitly requires Options API.","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvue-best-practices\u002FLICENSE.md","https:\u002F\u002Fgithub.com\u002Fpattanation\u002FNorvik\u002Fblob\u002Fclaude\u002Finstall-gsd-build-foQdV\u002F.agents\u002Fskills\u002Fvue-best-practices\u002FSKILL.md",[220],{"categoryNo":111,"categoryName":112,"taxonomyType":108,"taxonomyTypeDesc":109},[222,174,189,223,166,224,225,226,19,227,228,229,230,231,232,37,233,148,234,235],"vue best practices","Composition","files","tasks","api","pinia","work","options","ssr","typescript","as","vite","load","standard"]