[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FGZNEKD3F5FJCZGRB33VYX":3,"skill-same:01M6FGZNEKD3F5FJCZGRB33VYX":89},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":21,"linkOnly":22,"markdownContent":23,"markdownBody":24,"frontMatter":25,"refName":26,"commitSha":27,"skillDirectory":28,"forksCount":29,"repositoryHtmlUrl":30,"repositoryHomepageUrl":31,"ownerHtmlUrl":32,"ownerBlogUrl":6,"ownerDescription":33,"updatedAt":34,"install":35,"resources":48},"01M6FGZNEKD3F5FJCZGRB33VYX","tanstack-start",null,"ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",67,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Ftanstack-start\u002FSKILL.md",[],[18,19,20],"start","tanstack","tanstack start","2026-11-10 10:12:30",false,"---\nname: tanstack-start\ndescription: TanStack Start (RC) full-stack React with server functions, SSR, Cloudflare Workers. Use for Next.js migration, edge rendering, or encountering hydration, auth, data pattern errors.\nlicense: MIT\nallowed-tools: [Bash, Read, Write, Edit]\nmetadata:\n  version: 1.0.0-rc.1\n  author: Claude Skills Maintainers\n  last-verified: 2025-12-09\n  production-tested: false\n  status: rc\n  keywords:\n    - tanstack start\n    - tanstack react start\n    - full-stack react\n    - selective ssr\n    - spa mode\n    - static prerender\n    - server functions\n    - server routes\n  - cloudflare workers\n  - edge rendering\n  - hydration errors\n  - next.js migration\n---\n\n# TanStack Start (React) — RC-Ready Playbook\n\nFull-stack React on TanStack Router with per-route SSR\u002FCSR, file-based routing, server functions, and first-class Cloudflare Workers support.\n\n## Use this skill when\n- Building a greenfield React app that needs route-level SSR\u002FCSR\u002FSSG switches.\n- Migrating from Next.js\u002FReact Router while keeping file-based routing + API routes.\n- Shipping to edge runtimes (Workers) with typed server functions and bindings.\n- You want predictable routing with type-safe params\u002Fsearch + built-in preloading.\n\n## What’s inside\n- **References**: quickstart\u002Flayout, rendering modes, server functions, Cloudflare hosting, execution\u002Fauth, plus new routing\u002Fdata\u002Fnavigation\u002Fdevtools guides.\n- **Script**: `scripts\u002Fbootstrap-cloudflare-start.sh \u003Capp>` scaffolds Start + Workers + binding types.\n- **Troubleshooting**: hydration, API routing, bindings, navigation\u002Fpreloading failures.\n\n---\n\n## Quick Start (React)\n```bash\nnpm create @tanstack\u002Fstart@latest my-app\ncd my-app\nnpm run dev\n```\nManual installs (all bundle targets are supported): add `@tanstack\u002Freact-router` + `@tanstack\u002Freact-start` with your bundler plugin (`vite`, `webpack`, or `esbuild`) per the official install guides.\n\n### Core layout reminder\n- `app\u002Froutes\u002F**` file-based routes → router tree, automatic code-splitting + data preloading.\n- `app\u002Fentry.client.tsx` hydrates `\u003CStartClient \u002F>`; `app\u002Fentry.server.tsx` wraps `createServerEntry`.\n- `app\u002Fconfig.ts` or `app\u002Fstart.ts` sets `defaultSsr`, `spaMode`, middleware, and context.\n\n---\n\n## Routing + Data Best Practices\n\n- **Type-safe params & search**: `createFileRoute()` infers path params; add `validateSearch` (zod) to parse and coerce search params.\n- **Route matching order is deterministic** (index → static → dynamic → splat); rely on this when adding catch-alls.\n- **Loaders run once per location change**; return plain data, throw `redirect()`\u002F`notFound()` for control flow.\n- **Data mutations**: colocate `action`\u002Fserver functions; keep loaders read-only and invalidate via `router.invalidate()` after mutation.\n- **TanStack Query bridge**: create a `QueryClient` in router context and `ensureQueryData` inside loaders to dedupe fetches.\n- **Deferred\u002Fexternal data**: stream partial data or read from external loaders; prefer suspense-friendly responses.\n- **Head management**: set `head` per route for `\u003Ctitle>`\u002Fmeta; derive from loader data to keep SEO consistent.\n- **Not-found\u002Fauth**: throw `notFound()` or `redirect()` in loaders\u002Fmiddleware; use error boundaries for UX.\n\nExample route (typed search + data-only SSR):\n```ts\n\u002F\u002F app\u002Froutes\u002Fposts.$postId.tsx\nimport { createFileRoute, redirect } from '@tanstack\u002Freact-router'\nimport { z } from 'zod'\n\nexport const Route = createFileRoute('\u002Fposts\u002F$postId')({\n  validateSearch: z.object({ preview: z.boolean().optional() }),\n  ssr: 'data-only',\n  loader: async ({ params, search, context }) => {\n    const post = await context.queryClient.ensureQueryData(['post', params.postId], () =>\n      fetch(`\u002Fapi\u002Fposts\u002F${params.postId}?preview=${!!search.preview}`).then(r => r.json())\n    )\n    if (!post.published && !search.preview) throw redirect({ to: '\u002Fdrafts' })\n    return { post }\n  },\n})\n```\n\n---\n\n## Navigation, Preloading, and UX\n\n- **Link prefetch defaults**: `\u003CLink preload=\"intent\">` (hover\u002Ffocus) preloads route data\u002Fcode; use `preload=\"render\"` for above-the-fold routes.\n- **Programmatic preloading**: `router.preloadRoute({ to, search })` to warm caches before navigation (e.g., on visibility).\n- **Route masking**: keep canonical URLs while showing user-friendly masks (e.g., `\u002Fproducts?slug=abc` masked as `\u002Fp\u002Fabc`).\n- **Navigation blocking**: protect unsaved forms with `router.navigate({ to, replace, from })` blockers or `useBlocker`.\n- **Scroll restoration**: enable `scrollRestoration` to restore positions on back\u002Fforward; customize per route when using long lists.\n- **Search param serialization**: customize parse\u002Fstringify to keep numbers\u002Fdates stable and avoid stringified booleans.\n\n---\n\n## Rendering & Performance\n\n- **Per-route SSR**: set `ssr: true | false | 'data-only'` on routes; `defaultSsr` config sets the baseline.\n- **Code-splitting**: file-based routes auto-split; add `lazy`\u002F`load` for manual chunks on code-based routes.\n- **Preloading strategy**: pair `preload=\"intent\"` links with `defaultPreloadStaleTime` to avoid over-fetching.\n- **Render optimizations**: keep loaders pure, memoize heavy components, and use `pendingComponent` for CSR routes to avoid layout shift.\n\n---\n\n## Devtools, Linting, and LLM Support\n\n- Add `\u003CRouterDevtools \u002F>` during development to inspect matches, loader states, and preloading.\n- Enable the ESLint plugin `@tanstack\u002Feslint-plugin-router` with the recommended config to enforce inference-sensitive property order (e.g., `beforeLoad` before `loader`).\n- LLM-aware routing: the Router exposes structured route metadata to LLM agents; keep descriptions concise in `Route` meta for better AI navigation.\n\n---\n\n## Deployment Notes (Cloudflare-friendly)\n\n- Keep `cloudflare({ viteEnvironment: { name: 'ssr' } })` first in Vite plugins so bindings reach server entry.\n- Regenerate bindings after changes: `npm run cf-typegen`.\n- For static-heavy sites, enable prerender to ship HTML to Workers Assets\u002FPages; exclude param routes or add explicit `pages`.\n\n---\n\n## Ship Checklist\n- [ ] Routes load without hydration warnings (prefer `ssr: 'data-only'` for non-deterministic UI).\n- [ ] Search params validated with `validateSearch` and custom serializer where needed.\n- [ ] Link preloading configured for high-traffic routes; blockers added for unsaved forms.\n- [ ] ESLint plugin enabled (`create-route-property-order` rule) and `npm run check` passes.\n- [ ] Devtools verified locally; `router.matches` state looks correct.\n- [ ] Cloudflare bindings typed (`cf-typegen`) and streaming tested via `curl -N`.\n","# TanStack Start (React) — RC-Ready Playbook\n\nFull-stack React on TanStack Router with per-route SSR\u002FCSR, file-based routing, server functions, and first-class Cloudflare Workers support.\n\n## Use this skill when\n- Building a greenfield React app that needs route-level SSR\u002FCSR\u002FSSG switches.\n- Migrating from Next.js\u002FReact Router while keeping file-based routing + API routes.\n- Shipping to edge runtimes (Workers) with typed server functions and bindings.\n- You want predictable routing with type-safe params\u002Fsearch + built-in preloading.\n\n## What’s inside\n- **References**: quickstart\u002Flayout, rendering modes, server functions, Cloudflare hosting, execution\u002Fauth, plus new routing\u002Fdata\u002Fnavigation\u002Fdevtools guides.\n- **Script**: `scripts\u002Fbootstrap-cloudflare-start.sh \u003Capp>` scaffolds Start + Workers + binding types.\n- **Troubleshooting**: hydration, API routing, bindings, navigation\u002Fpreloading failures.\n\n---\n\n## Quick Start (React)\n```bash\nnpm create @tanstack\u002Fstart@latest my-app\ncd my-app\nnpm run dev\n```\nManual installs (all bundle targets are supported): add `@tanstack\u002Freact-router` + `@tanstack\u002Freact-start` with your bundler plugin (`vite`, `webpack`, or `esbuild`) per the official install guides.\n\n### Core layout reminder\n- `app\u002Froutes\u002F**` file-based routes → router tree, automatic code-splitting + data preloading.\n- `app\u002Fentry.client.tsx` hydrates `\u003CStartClient \u002F>`; `app\u002Fentry.server.tsx` wraps `createServerEntry`.\n- `app\u002Fconfig.ts` or `app\u002Fstart.ts` sets `defaultSsr`, `spaMode`, middleware, and context.\n\n---\n\n## Routing + Data Best Practices\n\n- **Type-safe params & search**: `createFileRoute()` infers path params; add `validateSearch` (zod) to parse and coerce search params.\n- **Route matching order is deterministic** (index → static → dynamic → splat); rely on this when adding catch-alls.\n- **Loaders run once per location change**; return plain data, throw `redirect()`\u002F`notFound()` for control flow.\n- **Data mutations**: colocate `action`\u002Fserver functions; keep loaders read-only and invalidate via `router.invalidate()` after mutation.\n- **TanStack Query bridge**: create a `QueryClient` in router context and `ensureQueryData` inside loaders to dedupe fetches.\n- **Deferred\u002Fexternal data**: stream partial data or read from external loaders; prefer suspense-friendly responses.\n- **Head management**: set `head` per route for `\u003Ctitle>`\u002Fmeta; derive from loader data to keep SEO consistent.\n- **Not-found\u002Fauth**: throw `notFound()` or `redirect()` in loaders\u002Fmiddleware; use error boundaries for UX.\n\nExample route (typed search + data-only SSR):\n```ts\n\u002F\u002F app\u002Froutes\u002Fposts.$postId.tsx\nimport { createFileRoute, redirect } from '@tanstack\u002Freact-router'\nimport { z } from 'zod'\n\nexport const Route = createFileRoute('\u002Fposts\u002F$postId')({\n  validateSearch: z.object({ preview: z.boolean().optional() }),\n  ssr: 'data-only',\n  loader: async ({ params, search, context }) => {\n    const post = await context.queryClient.ensureQueryData(['post', params.postId], () =>\n      fetch(`\u002Fapi\u002Fposts\u002F${params.postId}?preview=${!!search.preview}`).then(r => r.json())\n    )\n    if (!post.published && !search.preview) throw redirect({ to: '\u002Fdrafts' })\n    return { post }\n  },\n})\n```\n\n---\n\n## Navigation, Preloading, and UX\n\n- **Link prefetch defaults**: `\u003CLink preload=\"intent\">` (hover\u002Ffocus) preloads route data\u002Fcode; use `preload=\"render\"` for above-the-fold routes.\n- **Programmatic preloading**: `router.preloadRoute({ to, search })` to warm caches before navigation (e.g., on visibility).\n- **Route masking**: keep canonical URLs while showing user-friendly masks (e.g., `\u002Fproducts?slug=abc` masked as `\u002Fp\u002Fabc`).\n- **Navigation blocking**: protect unsaved forms with `router.navigate({ to, replace, from })` blockers or `useBlocker`.\n- **Scroll restoration**: enable `scrollRestoration` to restore positions on back\u002Fforward; customize per route when using long lists.\n- **Search param serialization**: customize parse\u002Fstringify to keep numbers\u002Fdates stable and avoid stringified booleans.\n\n---\n\n## Rendering & Performance\n\n- **Per-route SSR**: set `ssr: true | false | 'data-only'` on routes; `defaultSsr` config sets the baseline.\n- **Code-splitting**: file-based routes auto-split; add `lazy`\u002F`load` for manual chunks on code-based routes.\n- **Preloading strategy**: pair `preload=\"intent\"` links with `defaultPreloadStaleTime` to avoid over-fetching.\n- **Render optimizations**: keep loaders pure, memoize heavy components, and use `pendingComponent` for CSR routes to avoid layout shift.\n\n---\n\n## Devtools, Linting, and LLM Support\n\n- Add `\u003CRouterDevtools \u002F>` during development to inspect matches, loader states, and preloading.\n- Enable the ESLint plugin `@tanstack\u002Feslint-plugin-router` with the recommended config to enforce inference-sensitive property order (e.g., `beforeLoad` before `loader`).\n- LLM-aware routing: the Router exposes structured route metadata to LLM agents; keep descriptions concise in `Route` meta for better AI navigation.\n\n---\n\n## Deployment Notes (Cloudflare-friendly)\n\n- Keep `cloudflare({ viteEnvironment: { name: 'ssr' } })` first in Vite plugins so bindings reach server entry.\n- Regenerate bindings after changes: `npm run cf-typegen`.\n- For static-heavy sites, enable prerender to ship HTML to Workers Assets\u002FPages; exclude param routes or add explicit `pages`.\n\n---\n\n## Ship Checklist\n- [ ] Routes load without hydration warnings (prefer `ssr: 'data-only'` for non-deterministic UI).\n- [ ] Search params validated with `validateSearch` and custom serializer where needed.\n- [ ] Link preloading configured for high-traffic routes; blockers added for unsaved forms.\n- [ ] ESLint plugin enabled (`create-route-property-order` rule) and `npm run check` passes.\n- [ ] Devtools verified locally; `router.matches` state looks correct.\n- [ ] Cloudflare bindings typed (`cf-typegen`) and streaming tested via `curl -N`.\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fsecondsky\u002Fclaude-skills\u002Ftanstack-start",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":7,"skillName":5,"commands":36,"prompt":46,"zipAvailable":47},[37,40,43],{"tool":38,"command":39},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill tanstack-start",{"tool":41,"command":42},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill tanstack-start",{"tool":44,"command":45},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill tanstack-start","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Ftanstack-start\u002FSKILL.md",true,[49,55,59,63,67,71,75,79,83],{"path":50,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":53,"sourceHtmlUrl":54},"references\u002Fcloudflare-hosting-and-env.md","REFERENCE","参考文档",2647,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Ftanstack-start\u002Freferences\u002Fcloudflare-hosting-and-env.md",{"path":56,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":57,"sourceHtmlUrl":58},"references\u002Fdevtools-and-llm-support.md",1238,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Ftanstack-start\u002Freferences\u002Fdevtools-and-llm-support.md",{"path":60,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":61,"sourceHtmlUrl":62},"references\u002Fexecution-and-auth.md",2183,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Ftanstack-start\u002Freferences\u002Fexecution-and-auth.md",{"path":64,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":65,"sourceHtmlUrl":66},"references\u002Fnavigation-and-preloading.md",1684,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Ftanstack-start\u002Freferences\u002Fnavigation-and-preloading.md",{"path":68,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":69,"sourceHtmlUrl":70},"references\u002Fquickstart-and-layout.md",2882,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Ftanstack-start\u002Freferences\u002Fquickstart-and-layout.md",{"path":72,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":73,"sourceHtmlUrl":74},"references\u002Frendering-modes.md",2024,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Ftanstack-start\u002Freferences\u002Frendering-modes.md",{"path":76,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":77,"sourceHtmlUrl":78},"references\u002Frouting-and-data-loading.md",2395,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Ftanstack-start\u002Freferences\u002Frouting-and-data-loading.md",{"path":80,"resourceType":51,"resourceTypeDesc":52,"sizeBytes":81,"sourceHtmlUrl":82},"references\u002Fserver-functions-and-middleware.md",2955,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Ftanstack-start\u002Freferences\u002Fserver-functions-and-middleware.md",{"path":84,"resourceType":85,"resourceTypeDesc":86,"sizeBytes":87,"sourceHtmlUrl":88},"scripts\u002Fbootstrap-cloudflare-start.sh","SCRIPT","脚本",1096,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsecondsky\u002Fclaude-skills\u002Ftanstack-start\u002Fscripts\u002Fbootstrap-cloudflare-start.sh",[90,104,114,123,129,136],{"skillNo":91,"name":92,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":100,"publishedAt":21},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[95],{"categoryNo":96,"categoryName":97,"taxonomyType":98,"taxonomyTypeDesc":99},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[101,102,103],"model","model hierarchy","model hierarchy skill",{"skillNo":105,"name":106,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":110,"publishedAt":21},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[109],{"categoryNo":96,"categoryName":97,"taxonomyType":98,"taxonomyTypeDesc":99},[111,112,113],"MCP","zoom","zoom mcp",{"skillNo":115,"name":116,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":119,"publishedAt":21},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[120,121,122,112],"sdk","zoom apps sdk","apps",{"skillNo":124,"name":125,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":128,"publishedAt":21},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[125],{"skillNo":130,"name":131,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":135,"publishedAt":21},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[134],{"categoryNo":96,"categoryName":97,"taxonomyType":98,"taxonomyTypeDesc":99},[131],{"skillNo":137,"name":138,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":139,"categories":140,"keywords":141,"publishedAt":21},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[138]]