[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M72X4CMBDR3FAQFVPNX8T21Q":3,"skill-same:01M72X4CMBDR3FAQFVPNX8T21Q":45},{"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":18,"linkOnly":19,"markdownContent":20,"markdownBody":20,"frontMatter":21,"refName":22,"commitSha":23,"skillDirectory":24,"forksCount":25,"repositoryHtmlUrl":26,"repositoryHomepageUrl":6,"ownerHtmlUrl":27,"ownerBlogUrl":28,"ownerDescription":29,"updatedAt":30,"install":31,"resources":44},"01M72X4CMBDR3FAQFVPNX8T21Q","project-guidelines-example",null,"SriramGandhiS\u002FSkills","SriramGandhiS","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F211849986?v=4","01M72WQCW12BYX71C6WN584TTA","Sriram S","01M72WQCWTJ2RD0ET1X31AF1RC",1,"MIT","https:\u002F\u002Fgithub.com\u002FSriramGandhiS\u002FSkills\u002Fblob\u002Fmaster\u002Fdocs\u002Fja-JP\u002Fskills\u002Fproject-guidelines-example\u002FSKILL.md",[],[],"2026-11-10 22:39:42",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│                         Frontend                            │\n│  Next.js 15 + TypeScript + TailwindCSS                     │\n│  Deployed: Vercel \u002F Cloud Run                              │\n└─────────────────────────────────────────────────────────────┘\n                              │\n                              ▼\n┌─────────────────────────────────────────────────────────────┐\n│                         Backend                             │\n│  FastAPI + Python 3.11 + Pydantic                          │\n│  Deployed: 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フック\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アプリエントリ\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    # Extract tool use result\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### カスタムフック (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- [ ] データベースマイグレーションが準備されている\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",{},"master","d6ca01da0f24a3b0e26e4a8b7b66cbd25d429f5d","docs\u002Fja-JP\u002Fskills\u002Fproject-guidelines-example",0,"https:\u002F\u002Fgithub.com\u002FSriramGandhiS\u002FSkills","https:\u002F\u002Fgithub.com\u002FSriramGandhiS","https:\u002F\u002Fsriram.website\u002F","Curious guy who keeps tinkering until something works","2026-05-20 16:21:34",{"source":7,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add SriramGandhiS\u002FSkills --skill project-guidelines-example",{"tool":37,"command":38},"bunx","bunx skills add SriramGandhiS\u002FSkills --skill project-guidelines-example",{"tool":40,"command":41},"pnpm","pnpm dlx skills add SriramGandhiS\u002FSkills --skill project-guidelines-example","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FSriramGandhiS\u002FSkills\u002Fblob\u002Fmaster\u002Fdocs\u002Fja-JP\u002Fskills\u002Fproject-guidelines-example\u002FSKILL.md",true,[],[46,54,59,65,72,79],{"skillNo":47,"name":48,"nameZh":6,"description":49,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":50,"categories":51,"keywords":52,"publishedAt":53},"01M732609EPJWV13PVTX3GT4TM","webgpu-threejs-tsl","Comprehensive guide for developing WebGPU-enabled Three.js applications using TSL (Three.js Shading Language). Covers WebGPU renderer setup, TSL syntax and node materials, compute shaders, post-processing effects, and WGSL integration. Use this skill when working with Three.js WebGPU, TSL shaders, node materials, or GPU compute in Three.js.","https:\u002F\u002Fgithub.com\u002FSriramGandhiS\u002FSkills\u002Fblob\u002Fmaster\u002Fwebgpu-threejs-tsl\u002Fskills\u002Fwebgpu-threejs-tsl\u002FSKILL.md",[],[],"2026-11-11 15:11:14",{"skillNo":55,"name":48,"nameZh":6,"description":49,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":56,"categories":57,"keywords":58,"publishedAt":53},"01M7325XM47AGWB6K6C4VXKE6B","https:\u002F\u002Fgithub.com\u002FSriramGandhiS\u002FSkills\u002Fblob\u002Fmaster\u002Fwebgpu-threejs-tsl\u002FSKILL.md",[],[],{"skillNo":60,"name":61,"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":62,"categories":63,"keywords":64,"publishedAt":53},"01M7325WP6DES69JKC840VMFEP","verification-loop","https:\u002F\u002Fgithub.com\u002FSriramGandhiS\u002FSkills\u002Fblob\u002Fmaster\u002Fweb-assets\u002Fdocs\u002Fzh-TW\u002Fskills\u002Fverification-loop\u002FSKILL.md",[],[],{"skillNo":66,"name":67,"nameZh":6,"description":68,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":53},"01M7325TFQF1DZTQ6J3WGQQ1VR","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\u002FSriramGandhiS\u002FSkills\u002Fblob\u002Fmaster\u002Fweb-assets\u002Fdocs\u002Fzh-TW\u002Fskills\u002Ftdd-workflow\u002FSKILL.md",[],[],{"skillNo":73,"name":74,"nameZh":6,"description":75,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":76,"categories":77,"keywords":78,"publishedAt":53},"01M7325RGV9AY9PK92D2V8KKPW","strategic-compact","Suggests manual context compaction at logical intervals to preserve context through task phases rather than arbitrary auto-compaction.","https:\u002F\u002Fgithub.com\u002FSriramGandhiS\u002FSkills\u002Fblob\u002Fmaster\u002Fweb-assets\u002Fdocs\u002Fzh-TW\u002Fskills\u002Fstrategic-compact\u002FSKILL.md",[],[],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":85,"publishedAt":53},"01M7325MZC28SE86E7NMCNEFS4","security-review","Use this skill when adding authentication, handling user input, working with secrets, creating API endpoints, or implementing payment\u002Fsensitive features. Provides comprehensive security checklist and patterns.","https:\u002F\u002Fgithub.com\u002FSriramGandhiS\u002FSkills\u002Fblob\u002Fmaster\u002Fweb-assets\u002Fdocs\u002Fzh-TW\u002Fskills\u002Fsecurity-review\u002FSKILL.md",[],[]]