[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6D82932SR8GEG49ME6DCN0P":3,"skill-same:01M6D82932SR8GEG49ME6DCN0P":55},{"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":22,"publishedAt":28,"linkOnly":29,"markdownContent":30,"markdownBody":30,"frontMatter":31,"refName":32,"commitSha":33,"skillDirectory":34,"forksCount":35,"repositoryHtmlUrl":36,"repositoryHomepageUrl":6,"ownerHtmlUrl":37,"ownerBlogUrl":38,"ownerDescription":39,"updatedAt":40,"install":41,"resources":54},"01M6D82932SR8GEG49ME6DCN0P","project-guidelines-example",null,"oabdelmaksoud\u002FSuperClaw","oabdelmaksoud","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F50699149?v=4","01M6D5CVVN778ZCDP1WHS816SP","Omar Abdelmaksoud","01M6D5CW1RHNSKCJR85GJACBFT",2,"MIT","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fdocs\u002Fzh-TW\u002Fskills\u002Fproject-guidelines-example\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",[23,24,25,26,27],"guidelines","project guidelines example","example","project","Project Guidelines","2026-11-10 10:12:30",false,"# 專案指南技能（範例）\n\n這是專案特定技能的範例。使用此作為你自己專案的範本。\n\n基於真實生產應用程式：[Zenith](https:\u002F\u002Fzenith.chat) - AI 驅動的客戶探索平台。\n\n---\n\n## 何時使用\n\n在處理專案特定設計時參考此技能。專案技能包含：\n- 架構概覽\n- 檔案結構\n- 程式碼模式\n- 測試要求\n- 部署工作流程\n\n---\n\n## 架構概覽\n\n**技術堆疊：**\n- **前端**：Next.js 15（App Router）、TypeScript、React\n- **後端**：FastAPI（Python）、Pydantic 模型\n- **資料庫**：Supabase（PostgreSQL）\n- **AI**：Claude API 帶工具呼叫和結構化輸出\n- **部署**：Google Cloud Run\n- **測試**：Playwright（E2E）、pytest（後端）、React Testing Library\n\n**服務：**\n```\n┌─────────────────────────────────────────────────────────────┐\n│                         前端                                 │\n│  Next.js 15 + TypeScript + TailwindCSS                     │\n│  部署：Vercel \u002F Cloud Run                                   │\n└─────────────────────────────────────────────────────────────┘\n                              │\n                              ▼\n┌─────────────────────────────────────────────────────────────┐\n│                         後端                                 │\n│  FastAPI + Python 3.11 + Pydantic                          │\n│  部署：Cloud Run                                            │\n└─────────────────────────────────────────────────────────────┘\n                              │\n              ┌───────────────┼───────────────┐\n              ▼               ▼               ▼\n        ┌──────────┐   ┌──────────┐   ┌──────────┐\n        │ Supabase │   │  Claude  │   │  Redis   │\n        │ Database │   │   API    │   │  Cache   │\n        └──────────┘   └──────────┘   └──────────┘\n```\n\n---\n\n## 檔案結構\n\n```\nproject\u002F\n├── frontend\u002F\n│   └── src\u002F\n│       ├── app\u002F              # Next.js app router 頁面\n│       │   ├── api\u002F          # API 路由\n│       │   ├── (auth)\u002F       # 需認證路由\n│       │   └── workspace\u002F    # 主應用程式工作區\n│       ├── components\u002F       # React 元件\n│       │   ├── ui\u002F           # 基礎 UI 元件\n│       │   ├── forms\u002F        # 表單元件\n│       │   └── layouts\u002F      # 版面配置元件\n│       ├── hooks\u002F            # 自訂 React hooks\n│       ├── lib\u002F              # 工具\n│       ├── types\u002F            # TypeScript 定義\n│       └── config\u002F           # 設定\n│\n├── backend\u002F\n│   ├── routers\u002F              # FastAPI 路由處理器\n│   ├── models.py             # Pydantic 模型\n│   ├── main.py               # FastAPI app 進入點\n│   ├── auth_system.py        # 認證\n│   ├── database.py           # 資料庫操作\n│   ├── services\u002F             # 業務邏輯\n│   └── tests\u002F                # pytest 測試\n│\n├── deploy\u002F                   # 部署設定\n├── docs\u002F                     # 文件\n└── scripts\u002F                  # 工具腳本\n```\n\n---\n\n## 程式碼模式\n\n### API 回應格式（FastAPI）\n\n```python\nfrom pydantic import BaseModel\nfrom typing import Generic, TypeVar, Optional\n\nT = TypeVar('T')\n\nclass ApiResponse(BaseModel, Generic[T]):\n    success: bool\n    data: Optional[T] = None\n    error: Optional[str] = None\n\n    @classmethod\n    def ok(cls, data: T) -> \"ApiResponse[T]\":\n        return cls(success=True, data=data)\n\n    @classmethod\n    def fail(cls, error: str) -> \"ApiResponse[T]\":\n        return cls(success=False, error=error)\n```\n\n### 前端 API 呼叫（TypeScript）\n\n```typescript\ninterface ApiResponse\u003CT> {\n  success: boolean\n  data?: T\n  error?: string\n}\n\nasync function fetchApi\u003CT>(\n  endpoint: string,\n  options?: RequestInit\n): Promise\u003CApiResponse\u003CT>> {\n  try {\n    const response = await fetch(`\u002Fapi${endpoint}`, {\n      ...options,\n      headers: {\n        'Content-Type': 'application\u002Fjson',\n        ...options?.headers,\n      },\n    })\n\n    if (!response.ok) {\n      return { success: false, error: `HTTP ${response.status}` }\n    }\n\n    return await response.json()\n  } catch (error) {\n    return { success: false, error: String(error) }\n  }\n}\n```\n\n### Claude AI 整合（結構化輸出）\n\n```python\nfrom anthropic import Anthropic\nfrom pydantic import BaseModel\n\nclass AnalysisResult(BaseModel):\n    summary: str\n    key_points: list[str]\n    confidence: float\n\nasync def analyze_with_claude(content: str) -> AnalysisResult:\n    client = Anthropic()\n\n    response = client.messages.create(\n        model=\"claude-sonnet-4-5-20250514\",\n        max_tokens=1024,\n        messages=[{\"role\": \"user\", \"content\": content}],\n        tools=[{\n            \"name\": \"provide_analysis\",\n            \"description\": \"Provide structured analysis\",\n            \"input_schema\": AnalysisResult.model_json_schema()\n        }],\n        tool_choice={\"type\": \"tool\", \"name\": \"provide_analysis\"}\n    )\n\n    # 提取工具使用結果\n    tool_use = next(\n        block for block in response.content\n        if block.type == \"tool_use\"\n    )\n\n    return AnalysisResult(**tool_use.input)\n```\n\n### 自訂 Hooks（React）\n\n```typescript\nimport { useState, useCallback } from 'react'\n\ninterface UseApiState\u003CT> {\n  data: T | null\n  loading: boolean\n  error: string | null\n}\n\nexport function useApi\u003CT>(\n  fetchFn: () => Promise\u003CApiResponse\u003CT>>\n) {\n  const [state, setState] = useState\u003CUseApiState\u003CT>>({\n    data: null,\n    loading: false,\n    error: null,\n  })\n\n  const execute = useCallback(async () => {\n    setState(prev => ({ ...prev, loading: true, error: null }))\n\n    const result = await fetchFn()\n\n    if (result.success) {\n      setState({ data: result.data!, loading: false, error: null })\n    } else {\n      setState({ data: null, loading: false, error: result.error! })\n    }\n  }, [fetchFn])\n\n  return { ...state, execute }\n}\n```\n\n---\n\n## 測試要求\n\n### 後端（pytest）\n\n```bash\n# 執行所有測試\npoetry run pytest tests\u002F\n\n# 執行帶覆蓋率的測試\npoetry run pytest tests\u002F --cov=. --cov-report=html\n\n# 執行特定測試檔案\npoetry run pytest tests\u002Ftest_auth.py -v\n```\n\n**測試結構：**\n```python\nimport pytest\nfrom httpx import AsyncClient\nfrom main import app\n\n@pytest.fixture\nasync def client():\n    async with AsyncClient(app=app, base_url=\"http:\u002F\u002Ftest\") as ac:\n        yield ac\n\n@pytest.mark.asyncio\nasync def test_health_check(client: AsyncClient):\n    response = await client.get(\"\u002Fhealth\")\n    assert response.status_code == 200\n    assert response.json()[\"status\"] == \"healthy\"\n```\n\n### 前端（React Testing Library）\n\n```bash\n# 執行測試\nnpm run test\n\n# 執行帶覆蓋率的測試\nnpm run test -- --coverage\n\n# 執行 E2E 測試\nnpm run test:e2e\n```\n\n**測試結構：**\n```typescript\nimport { render, screen, fireEvent } from '@testing-library\u002Freact'\nimport { WorkspacePanel } from '.\u002FWorkspacePanel'\n\ndescribe('WorkspacePanel', () => {\n  it('renders workspace correctly', () => {\n    render(\u003CWorkspacePanel \u002F>)\n    expect(screen.getByRole('main')).toBeInTheDocument()\n  })\n\n  it('handles session creation', async () => {\n    render(\u003CWorkspacePanel \u002F>)\n    fireEvent.click(screen.getByText('New Session'))\n    expect(await screen.findByText('Session created')).toBeInTheDocument()\n  })\n})\n```\n\n---\n\n## 部署工作流程\n\n### 部署前檢查清單\n\n- [ ] 本機所有測試通過\n- [ ] `npm run build` 成功（前端）\n- [ ] `poetry run pytest` 通過（後端）\n- [ ] 無寫死密鑰\n- [ ] 環境變數已記錄\n- [ ] 資料庫 migrations 準備就緒\n\n### 部署指令\n\n```bash\n# 建置和部署前端\ncd frontend && npm run build\ngcloud run deploy frontend --source .\n\n# 建置和部署後端\ncd backend\ngcloud run deploy backend --source .\n```\n\n### 環境變數\n\n```bash\n# 前端（.env.local）\nNEXT_PUBLIC_API_URL=https:\u002F\u002Fapi.example.com\nNEXT_PUBLIC_SUPABASE_URL=https:\u002F\u002Fxxx.supabase.co\nNEXT_PUBLIC_SUPABASE_ANON_KEY=eyJ...\n\n# 後端（.env）\nDATABASE_URL=postgresql:\u002F\u002F...\nANTHROPIC_API_KEY=sk-ant-...\nSUPABASE_URL=https:\u002F\u002Fxxx.supabase.co\nSUPABASE_KEY=eyJ...\n```\n\n---\n\n## 關鍵規則\n\n1. **無表情符號** 在程式碼、註解或文件中\n2. **不可變性** - 永遠不要突變物件或陣列\n3. **TDD** - 實作前先寫測試\n4. **80% 覆蓋率** 最低\n5. **多個小檔案** - 200-400 行典型，最多 800 行\n6. **無 console.log** 在生產程式碼中\n7. **適當錯誤處理** 使用 try\u002Fcatch\n8. **輸入驗證** 使用 Pydantic\u002FZod\n\n---\n\n## 相關技能\n\n- `coding-standards.md` - 一般程式碼最佳實務\n- `backend-patterns.md` - API 和資料庫模式\n- `frontend-patterns.md` - React 和 Next.js 模式\n- `tdd-workflow\u002F` - 測試驅動開發方法論\n",{},"main","7b610356e36623652299fa2acb477ff821b1d920","upstream-sync\u002Fwork\u002Fecc\u002Fdocs\u002Fzh-TW\u002Fskills\u002Fproject-guidelines-example",0,"https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fo-abdelmaksoud\u002F","Full-Stack Engineer | AI Systems Architect | Building autonomous multi-agent systems","2026-03-08 21:12:53",{"source":7,"skillName":5,"commands":42,"prompt":52,"zipAvailable":53},[43,46,49],{"tool":44,"command":45},"npx","npx skills add oabdelmaksoud\u002FSuperClaw --skill project-guidelines-example",{"tool":47,"command":48},"bunx","bunx skills add oabdelmaksoud\u002FSuperClaw --skill project-guidelines-example",{"tool":50,"command":51},"pnpm","pnpm dlx skills add oabdelmaksoud\u002FSuperClaw --skill project-guidelines-example","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fdocs\u002Fzh-TW\u002Fskills\u002Fproject-guidelines-example\u002FSKILL.md",true,[],[56,75,89,120,146,165],{"skillNo":57,"name":58,"nameZh":6,"description":59,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":60,"categories":61,"keywords":65,"publishedAt":28},"01M6D88QCPTBZVCRED0NZ1Y8K8","visa-doc-translate","Translate visa application documents (images) to English and create a bilingual PDF with original and translation","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fvisa-doc-translate\u002FSKILL.md",[62],{"categoryNo":63,"categoryName":64,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000002","文档处理",[66,67,68,69,70,71,72,73,74],"translate","doc","visa doc translate","translation","application","create","images","PDF","documents",{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":28},"01M6D88NBM95T3TFM50CYYAP65","verification-loop","A comprehensive verification system for Claude Code sessions.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fverification-loop\u002FSKILL.md",[],[82,83,84,85,86,87,88],"verification","loop","verification loop","sessions","code","claude code sessions","system",{"skillNo":90,"name":91,"nameZh":6,"description":92,"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":106,"publishedAt":28},"01M6D88JFZ2P996GVRHJNSZSTM","tdd-workflow","Use this skill when writing new features, fixing bugs, or refactoring code. Enforces test-driven development with 80%+ coverage including unit, integration, and E2E tests.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Ftdd-workflow\u002FSKILL.md",[95,98,101],{"categoryNo":96,"categoryName":97,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":99,"categoryName":100,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":102,"categoryName":103,"taxonomyType":104,"taxonomyTypeDesc":105},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[107,108,109,110,111,112,86,113,114,115,116,117,118,119],"tdd","workflow","tdd workflow","e2e tests","e2e","integration","development","use","test","refactoring","coverage","tests","writing",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":126,"publishedAt":28},"01M6D88FTHRRSVJMXF2G7MQAK3","swiftui-patterns","SwiftUI architecture patterns, state management with @Observable, view composition, navigation, performance optimization, and modern iOS\u002FmacOS UI best practices.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fswiftui-patterns\u002FSKILL.md",[],[127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145],"patterns","swiftui","swiftui patterns","architecture","macos","performance","state management","best practices","state","ui","Optimization","ios","architecture patterns","Composition","performance optimization","view","management","swiftui architecture","navigation",{"skillNo":147,"name":148,"nameZh":6,"description":149,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":150,"categories":151,"keywords":153,"publishedAt":28},"01M6D88D527QTQT9DKHTRFN6EA","swift-protocol-di-testing","Protocol-based dependency injection for testable Swift code — mock file system, network, and external APIs using focused protocols and Swift Testing.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fswift-protocol-di-testing\u002FSKILL.md",[152],{"categoryNo":96,"categoryName":97,"taxonomyType":20,"taxonomyTypeDesc":21},[154,155,156,157,86,158,159,160,161,88,162,163,164],"swift protocol di testing","protocol","swift","testing","protocols","file","network","injection","dependency","swift testing","dependency injection",{"skillNo":166,"name":167,"nameZh":6,"description":168,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":169,"categories":170,"keywords":171,"publishedAt":28},"01M6D88AJW8H2QNWSW5ZY82R43","swift-concurrency-6-2","Swift 6.2 Approachable Concurrency — single-threaded by default, @concurrent for explicit background offloading, isolated conformances for main actor types.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fswift-concurrency-6-2\u002FSKILL.md",[],[172,173,156,174,175,32],"concurrency","swift concurrency","swift concurrency 6 2","default"]