[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EQSS39Z8692WJE6CZXPRZD":3,"skill-same:01M6EQSS39Z8692WJE6CZXPRZD":84},{"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":31,"publishedAt":50,"linkOnly":51,"markdownContent":52,"markdownBody":53,"frontMatter":54,"refName":55,"commitSha":56,"skillDirectory":57,"forksCount":58,"repositoryHtmlUrl":59,"repositoryHomepageUrl":60,"ownerHtmlUrl":61,"ownerBlogUrl":6,"ownerDescription":62,"updatedAt":63,"install":64,"resources":77},"01M6EQSS39Z8692WJE6CZXPRZD","ui-style-guide",null,"Frontend coding standards, component patterns, and design system for the Guessimate Angular UI. Reference when writing or reviewing frontend code.","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\u002Faiskillstore\u002Fmarketplace\u002Fdavidopdebeeck\u002Fui-style-guide\u002FSKILL.md",[18,23,26],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",[32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49],"ui style guide","style","ui","guide","system","patterns","reference","standards","frontend coding standards","coding","frontend","angular","coding standards","code","design system","component","writing","design","2026-11-10 10:12:30",false,"---\nname: ui-style-guide\ndescription: Frontend coding standards, component patterns, and design system for the Guessimate Angular UI. Reference when writing or reviewing frontend code.\n---\n\n# Frontend Style Guide & Coding Conventions\n\nThis document defines the coding standards, architectural patterns, and design system for the Guessimate Angular frontend.\n\n## 1. Technology Stack\n\n- **Framework:** Angular 20+\n- **Styling:** Tailwind CSS 4\n- **State Management:** Angular Signals & RxJS\n- **Build System:** Angular CLI (Esbuild)\n\n## 2. Project Structure\n\nWe follow a **Feature-Based** directory structure. Code is organized by domain feature rather than technical type.\n\n```\nsrc\u002Fapp\u002F\n├── core\u002F            # Global singletons (Guards, Interceptors, Global Services)\n├── layout\u002F          # Layout components (Navigation, Footer, Shell)\n├── features\u002F        # Feature modules (Domain logic)\n│   ├── home\u002F\n│   ├── session\u002F\n│   │   ├── components\u002F  # Dumb\u002FPresentational components\n│   │   ├── pages\u002F       # Smart\u002FContainer components (Routed)\n│   │   ├── services\u002F    # Feature-specific state\u002Flogic\n│   │   └── models\u002F      # Feature-specific types\n│   └── ...\n├── websocket\u002F       # WebSocket infrastructure\n└── shared\u002F          # Shared utilities (Pipes, Directives, Generic UI)\n```\n\n### Naming Conventions\n\n- **Files:** Kebab-case (e.g., `session-page.component.ts`, `auth.service.ts`).\n- **Classes:** PascalCase (e.g., `SessionPageComponent`, `AuthService`).\n- **Selectors:** `app-` prefix, kebab-case (e.g., `app-user-profile`).\n- **Signals:** No suffix, descriptive noun\u002Fverb (e.g., `user()`, `isLoading()`).\n- **Observables:** `$` suffix (e.g., `user$`).\n\n## 3. Component Standards\n\n### Definition\n\n- Use **Standalone Components** (`standalone: true` is default in v19+).\n- Prefer **Inline Templates** for most components to keep logic and view co-located.\n- Avoid external CSS files; use **Tailwind CSS** utility classes directly in the template.\n\n```typescript\n\n@Component({\n    selector: 'app-example',\n    imports: [CommonModule, RouterLink], \u002F\u002F Explicit imports\n    template: `\n    \u003Cdiv class=\"p-4 bg-surface-100 rounded-lg\">\n      \u003Ch1 class=\"text-2xl font-bold text-gray-900\">{{ title() }}\u003C\u002Fh1>\n    \u003C\u002Fdiv>\n  `\n})\nexport class ExampleComponent {\n    title = signal('Hello World');\n}\n```\n\n### Control Flow\n\nUse the new built-in Angular Control Flow syntax.\n\n```html\n\u003C!-- Good -->\n@if (isLoading()) {\n\u003Capp-spinner\u002F>\n} @else {\n@for (item of items(); track item.id) {\n\u003Capp-item [data]=\"item\"\u002F>\n}\n}\n```\n\n### Dependency Injection\n\nPrefer the `inject()` function over constructor injection for better type inference and cleaner code.\n\n```typescript\n\u002F\u002F Good\nprivate readonly\nroute = inject(ActivatedRoute);\nprivate readonly\nstore = inject(SessionStore);\n\n\u002F\u002F Avoid if possible\nconstructor(private\nroute: ActivatedRoute\n)\n{\n}\n```\n\n## 4. State Management\n\n- **Local State:** Use `signal()` for primitive state.\n- **Shared State:** Use **Signal Stores** (Services using Signals) provided at the appropriate level (Root or Component).\n- **Reactive Data:** Use `computed()` for derived state and `effect()` sparingly for side effects.\n\n```typescript\n\n@Injectable()\nexport class SessionStore {\n    \u002F\u002F State\n    private readonly _state = signal\u003CSessionState>(initialState);\n\n    \u002F\u002F Selectors\n    readonly lobby = computed(() => this._state().lobby);\n    readonly connection = computed(() => this._state().connection);\n\n    \u002F\u002F Actions\n    setLobby(lobby: Lobby) {\n        this._state.update(s => ({...s, lobby}));\n    }\n}\n```\n\n## 5. Styling & Design System\n\nWe use **Tailwind CSS 4** with a semantic color palette defined in `styles.css`.\n\n### Usage Rules\n\n1. **Utility-First:** Write classes directly in HTML.\n2. **No Magic Numbers:** Use theme values (e.g., `p-4` not `p-[16px]`).\n3. **Dark Mode:** Use the `dark:` modifier for all color-related classes.\n\n### Color Palette\n\nThe application uses a semantic naming convention mapped to Tailwind colors.\n\n#### Core Colors\n\n| Category          | Semantic Name   | Light Mode    | Dark Mode        | Usage                                |\n|:------------------|:----------------|:--------------|:-----------------|:-------------------------------------|\n| **Background**    | `background`    | `gray-50`     | `gray-950`       | Main application background          |\n| **Surface**       | `surface`       | `white`       | `gray-900`       | Cards, modals, sections              |\n| **Surface Alt**   | `surface-alt`   | `gray-100`    | `gray-800`       | Secondary backgrounds, input fields  |\n| **Primary**       | `brand`         | `blue-600`    | `blue-600`       | Primary actions, buttons, highlights |\n| **Primary Muted** | `brand-muted`   | `blue-50`     | `blue-900\u002F30`    | Selected states, light highlights    |\n| **Success**       | `success`       | `emerald-500` | `emerald-600`    | Success states, confirmation         |\n| **Success Muted** | `success-muted` | `emerald-50`  | `emerald-900\u002F30` | Success backgrounds                  |\n| **Danger**        | `danger`        | `red-600`     | `red-600`        | Errors, destructive actions          |\n| **Danger Muted**  | `danger-muted`  | `red-50`      | `red-900\u002F30`     | Error backgrounds                    |\n| **Warning**       | `warning`       | `amber-500`   | `amber-600`      | Warnings, pending states             |\n| **Warning Muted** | `warning-muted` | `amber-50`    | `amber-900\u002F30`   | Warning backgrounds                  |\n\n#### Typography & Borders\n\n| Category      | Light Mode | Dark Mode  | Usage                              |\n|:--------------|:-----------|:-----------|:-----------------------------------|\n| **Primary**   | `gray-900` | `white`    | Main headings and body text        |\n| **Secondary** | `gray-500` | `gray-400` | Subtitles, labels, secondary info  |\n| **Muted**     | `gray-400` | `gray-500` | Disabled text, placeholders        |\n| **Border**    | `gray-200` | `gray-800` | Standard dividers and card borders |\n\n### Implementation in `styles.css`\n\nColors are defined using CSS variables in the `@theme` block:\n\n```css\n@theme {\n    --color-brand-600: var(--color-blue-600);\n    --color-surface-100: var(--color-stone-100);\n    \u002F* ... *\u002F\n}\n```\n\n## 6. Common Component Patterns\n\n### Cards & Containers\n\nStandard styling for content containers (like estimation cards, lists):\n\n```html\n\n\u003Cdiv class=\"flex flex-col bg-surface-100\u002F60 border border-surface-200 dark:bg-gray-900\u002F40 dark:border-gray-800\u002F60 rounded-md shadow-sm\">\n    \u003C!-- Content -->\n\u003C\u002Fdiv>\n```\n\n- **Background:** `bg-surface-100\u002F60` (Light) \u002F `dark:bg-gray-900\u002F40` (Dark)\n- **Border:** `border border-surface-200` (Light) \u002F `dark:border-gray-800\u002F60` (Dark)\n- **Rounding:** `rounded-md` (Standard)\n- **Dividers:** `divide-y divide-surface-300 dark:divide-gray-800`\n\n### Typography Headers\n\n```html\n\n\u003Cdiv class=\"flex flex-col gap-1\">\n    \u003Ch2 class=\"text-2xl font-semibold leading-none text-gray-900 dark:text-white\">Title\u003C\u002Fh2>\n    \u003Cspan class=\"text-sm font-normal text-gray-600 dark:text-gray-400\">Subtitle description\u003C\u002Fspan>\n\u003C\u002Fdiv>\n```\n","# Frontend Style Guide & Coding Conventions\n\nThis document defines the coding standards, architectural patterns, and design system for the Guessimate Angular frontend.\n\n## 1. Technology Stack\n\n- **Framework:** Angular 20+\n- **Styling:** Tailwind CSS 4\n- **State Management:** Angular Signals & RxJS\n- **Build System:** Angular CLI (Esbuild)\n\n## 2. Project Structure\n\nWe follow a **Feature-Based** directory structure. Code is organized by domain feature rather than technical type.\n\n```\nsrc\u002Fapp\u002F\n├── core\u002F            # Global singletons (Guards, Interceptors, Global Services)\n├── layout\u002F          # Layout components (Navigation, Footer, Shell)\n├── features\u002F        # Feature modules (Domain logic)\n│   ├── home\u002F\n│   ├── session\u002F\n│   │   ├── components\u002F  # Dumb\u002FPresentational components\n│   │   ├── pages\u002F       # Smart\u002FContainer components (Routed)\n│   │   ├── services\u002F    # Feature-specific state\u002Flogic\n│   │   └── models\u002F      # Feature-specific types\n│   └── ...\n├── websocket\u002F       # WebSocket infrastructure\n└── shared\u002F          # Shared utilities (Pipes, Directives, Generic UI)\n```\n\n### Naming Conventions\n\n- **Files:** Kebab-case (e.g., `session-page.component.ts`, `auth.service.ts`).\n- **Classes:** PascalCase (e.g., `SessionPageComponent`, `AuthService`).\n- **Selectors:** `app-` prefix, kebab-case (e.g., `app-user-profile`).\n- **Signals:** No suffix, descriptive noun\u002Fverb (e.g., `user()`, `isLoading()`).\n- **Observables:** `$` suffix (e.g., `user$`).\n\n## 3. Component Standards\n\n### Definition\n\n- Use **Standalone Components** (`standalone: true` is default in v19+).\n- Prefer **Inline Templates** for most components to keep logic and view co-located.\n- Avoid external CSS files; use **Tailwind CSS** utility classes directly in the template.\n\n```typescript\n\n@Component({\n    selector: 'app-example',\n    imports: [CommonModule, RouterLink], \u002F\u002F Explicit imports\n    template: `\n    \u003Cdiv class=\"p-4 bg-surface-100 rounded-lg\">\n      \u003Ch1 class=\"text-2xl font-bold text-gray-900\">{{ title() }}\u003C\u002Fh1>\n    \u003C\u002Fdiv>\n  `\n})\nexport class ExampleComponent {\n    title = signal('Hello World');\n}\n```\n\n### Control Flow\n\nUse the new built-in Angular Control Flow syntax.\n\n```html\n\u003C!-- Good -->\n@if (isLoading()) {\n\u003Capp-spinner\u002F>\n} @else {\n@for (item of items(); track item.id) {\n\u003Capp-item [data]=\"item\"\u002F>\n}\n}\n```\n\n### Dependency Injection\n\nPrefer the `inject()` function over constructor injection for better type inference and cleaner code.\n\n```typescript\n\u002F\u002F Good\nprivate readonly\nroute = inject(ActivatedRoute);\nprivate readonly\nstore = inject(SessionStore);\n\n\u002F\u002F Avoid if possible\nconstructor(private\nroute: ActivatedRoute\n)\n{\n}\n```\n\n## 4. State Management\n\n- **Local State:** Use `signal()` for primitive state.\n- **Shared State:** Use **Signal Stores** (Services using Signals) provided at the appropriate level (Root or Component).\n- **Reactive Data:** Use `computed()` for derived state and `effect()` sparingly for side effects.\n\n```typescript\n\n@Injectable()\nexport class SessionStore {\n    \u002F\u002F State\n    private readonly _state = signal\u003CSessionState>(initialState);\n\n    \u002F\u002F Selectors\n    readonly lobby = computed(() => this._state().lobby);\n    readonly connection = computed(() => this._state().connection);\n\n    \u002F\u002F Actions\n    setLobby(lobby: Lobby) {\n        this._state.update(s => ({...s, lobby}));\n    }\n}\n```\n\n## 5. Styling & Design System\n\nWe use **Tailwind CSS 4** with a semantic color palette defined in `styles.css`.\n\n### Usage Rules\n\n1. **Utility-First:** Write classes directly in HTML.\n2. **No Magic Numbers:** Use theme values (e.g., `p-4` not `p-[16px]`).\n3. **Dark Mode:** Use the `dark:` modifier for all color-related classes.\n\n### Color Palette\n\nThe application uses a semantic naming convention mapped to Tailwind colors.\n\n#### Core Colors\n\n| Category          | Semantic Name   | Light Mode    | Dark Mode        | Usage                                |\n|:------------------|:----------------|:--------------|:-----------------|:-------------------------------------|\n| **Background**    | `background`    | `gray-50`     | `gray-950`       | Main application background          |\n| **Surface**       | `surface`       | `white`       | `gray-900`       | Cards, modals, sections              |\n| **Surface Alt**   | `surface-alt`   | `gray-100`    | `gray-800`       | Secondary backgrounds, input fields  |\n| **Primary**       | `brand`         | `blue-600`    | `blue-600`       | Primary actions, buttons, highlights |\n| **Primary Muted** | `brand-muted`   | `blue-50`     | `blue-900\u002F30`    | Selected states, light highlights    |\n| **Success**       | `success`       | `emerald-500` | `emerald-600`    | Success states, confirmation         |\n| **Success Muted** | `success-muted` | `emerald-50`  | `emerald-900\u002F30` | Success backgrounds                  |\n| **Danger**        | `danger`        | `red-600`     | `red-600`        | Errors, destructive actions          |\n| **Danger Muted**  | `danger-muted`  | `red-50`      | `red-900\u002F30`     | Error backgrounds                    |\n| **Warning**       | `warning`       | `amber-500`   | `amber-600`      | Warnings, pending states             |\n| **Warning Muted** | `warning-muted` | `amber-50`    | `amber-900\u002F30`   | Warning backgrounds                  |\n\n#### Typography & Borders\n\n| Category      | Light Mode | Dark Mode  | Usage                              |\n|:--------------|:-----------|:-----------|:-----------------------------------|\n| **Primary**   | `gray-900` | `white`    | Main headings and body text        |\n| **Secondary** | `gray-500` | `gray-400` | Subtitles, labels, secondary info  |\n| **Muted**     | `gray-400` | `gray-500` | Disabled text, placeholders        |\n| **Border**    | `gray-200` | `gray-800` | Standard dividers and card borders |\n\n### Implementation in `styles.css`\n\nColors are defined using CSS variables in the `@theme` block:\n\n```css\n@theme {\n    --color-brand-600: var(--color-blue-600);\n    --color-surface-100: var(--color-stone-100);\n    \u002F* ... *\u002F\n}\n```\n\n## 6. Common Component Patterns\n\n### Cards & Containers\n\nStandard styling for content containers (like estimation cards, lists):\n\n```html\n\n\u003Cdiv class=\"flex flex-col bg-surface-100\u002F60 border border-surface-200 dark:bg-gray-900\u002F40 dark:border-gray-800\u002F60 rounded-md shadow-sm\">\n    \u003C!-- Content -->\n\u003C\u002Fdiv>\n```\n\n- **Background:** `bg-surface-100\u002F60` (Light) \u002F `dark:bg-gray-900\u002F40` (Dark)\n- **Border:** `border border-surface-200` (Light) \u002F `dark:border-gray-800\u002F60` (Dark)\n- **Rounding:** `rounded-md` (Standard)\n- **Dividers:** `divide-y divide-surface-300 dark:divide-gray-800`\n\n### Typography Headers\n\n```html\n\n\u003Cdiv class=\"flex flex-col gap-1\">\n    \u003Ch2 class=\"text-2xl font-semibold leading-none text-gray-900 dark:text-white\">Title\u003C\u002Fh2>\n    \u003Cspan class=\"text-sm font-normal text-gray-600 dark:text-gray-400\">Subtitle description\u003C\u002Fspan>\n\u003C\u002Fdiv>\n```\n",{"name":5,"description":7},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Faiskillstore\u002Fmarketplace\u002Fdavidopdebeeck\u002Fui-style-guide",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":8,"skillName":5,"commands":65,"prompt":75,"zipAvailable":76},[66,69,72],{"tool":67,"command":68},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill ui-style-guide",{"tool":70,"command":71},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill ui-style-guide",{"tool":73,"command":74},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill ui-style-guide","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fdavidopdebeeck\u002Fui-style-guide\u002FSKILL.md",true,[78],{"path":79,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":82,"sourceHtmlUrl":83},"skill-report.json","REFERENCE","参考文档",19599,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fdavidopdebeeck\u002Fui-style-guide\u002Fskill-report.json",[85,97,107,116,122,129],{"skillNo":86,"name":87,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":93,"publishedAt":50},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[90],{"categoryNo":91,"categoryName":92,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[94,95,96],"model","model hierarchy","model hierarchy skill",{"skillNo":98,"name":99,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":103,"publishedAt":50},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[102],{"categoryNo":91,"categoryName":92,"taxonomyType":21,"taxonomyTypeDesc":22},[104,105,106],"MCP","zoom","zoom mcp",{"skillNo":108,"name":109,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":112,"publishedAt":50},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[113,114,115,105],"sdk","zoom apps sdk","apps",{"skillNo":117,"name":118,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":121,"publishedAt":50},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[118],{"skillNo":123,"name":124,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":128,"publishedAt":50},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[127],{"categoryNo":91,"categoryName":92,"taxonomyType":21,"taxonomyTypeDesc":22},[124],{"skillNo":130,"name":131,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":132,"categories":133,"keywords":134,"publishedAt":50},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[131]]