[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FHS9X6A97FMRF14RKX0ZYY":3,"skill-same:01M6FHS9X6A97FMRF14RKX0ZYY":58},{"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":25,"publishedAt":31,"linkOnly":32,"markdownContent":33,"markdownBody":33,"frontMatter":34,"refName":35,"commitSha":36,"skillDirectory":37,"forksCount":38,"repositoryHtmlUrl":39,"repositoryHomepageUrl":40,"ownerHtmlUrl":41,"ownerBlogUrl":6,"ownerDescription":42,"updatedAt":43,"install":44,"resources":57},"01M6FHS9X6A97FMRF14RKX0ZYY","backend-to-frontend-handoff-docs",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\u002Fsoftaworks\u002Fagent-toolkit\u002Fbackend-to-frontend-handoff-docs\u002FSKILL.md",[17,22],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000009","前端开发","SCENARIO","使用场景",{"categoryNo":23,"categoryName":24,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口",[26,27,28,29,30],"frontend","handoff","docs","backend to frontend handoff docs","backend","2026-11-10 10:12:30",false,"# API Handoff Mode\n\n> **No Chat Output**: Produce the handoff document only. No discussion, no explanation—just the markdown block saved to the handoff file.\n\nYou are a backend developer completing API work. Your task is to produce a structured handoff document that gives frontend developers (or their AI) full business and technical context to build integration\u002FUI without needing to ask backend questions.\n\n> **When to use**: After completing backend API work—endpoints, DTOs, validation, business logic—run this mode to generate handoff documentation.\n\n> **Simple API shortcut**: If the API is straightforward (CRUD, no complex business logic, obvious validation), skip the full template—just provide the endpoint, method, and example request\u002Fresponse JSON. Frontend can infer the rest.\n\n## Goal\nProduce a copy-paste-ready handoff document with all context a frontend AI needs to build UI\u002Fintegration correctly and confidently.\n\n## Inputs\n- Completed API code (endpoints, controllers, services, DTOs, validation).\n- Related business context from the task\u002Fuser story.\n- Any constraints, edge cases, or gotchas discovered during implementation.\n\n## Workflow\n\n1. **Collect context** — confirm feature name, relevant endpoints, DTOs, auth rules, and edge cases.\n2. **Create\u002Fupdate handoff file** — write the document to `.claude\u002Fdocs\u002Fai\u002F\u003Cfeature-name>\u002Fapi-handoff.md`. Increment the iteration suffix (`-v2`, `-v3`, …) if rerunning after feedback.\n3. **Paste template** — fill every section below with concrete data. Omit subsections only when truly not applicable (note why).\n4. **Double-check** — ensure payloads match actual API behavior, auth scopes are accurate, and enums\u002Fvalidation reflect backend logic.\n\n## Output Format\n\nProduce a single markdown block structured as follows. Keep it dense—no fluff, no repetition.\n\n---\n\n```markdown\n# API Handoff: [Feature Name]\n\n## Business Context\n[2-4 sentences: What problem does this solve? Who uses it? Why does it matter? Include any domain terms the frontend needs to understand.]\n\n## Endpoints\n\n### [METHOD] \u002Fpath\u002Fto\u002Fendpoint\n- **Purpose**: [1 line: what it does]\n- **Auth**: [required role\u002Fpermission, or \"public\"]\n- **Request**:\n  ```json\n  {\n    \"field\": \"type — description, constraints\"\n  }\n  ```\n- **Response** (success):\n  ```json\n  {\n    \"field\": \"type — description\"\n  }\n  ```\n- **Response** (error): [HTTP codes and shapes, e.g., 422 validation, 404 not found]\n- **Notes**: [edge cases, rate limits, pagination, sorting, anything non-obvious]\n\n[Repeat for each endpoint]\n\n## Data Models \u002F DTOs\n[List key models\u002FDTOs the frontend will receive or send. Include field types, nullability, enums, and business meaning.]\n\n```typescript\n\u002F\u002F Example shape for frontend typing\ninterface ExampleDto {\n  id: number;\n  status: 'pending' | 'approved' | 'rejected';\n  createdAt: string; \u002F\u002F ISO 8601\n}\n```\n\n## Enums & Constants\n[List any enums, status codes, or magic values the frontend needs to know. Include display labels if relevant.]\n\n| Value | Meaning | Display Label |\n|-------|---------|---------------|\n| `pending` | Awaiting review | Pending |\n\n## Validation Rules\n[Summarize key validation rules the frontend should mirror for UX—required fields, min\u002Fmax, formats, conditional rules.]\n\n## Business Logic & Edge Cases\n- [Bullet each non-obvious behavior, constraint, or gotcha]\n- [e.g., \"User can only submit once per day\", \"Soft-deleted items excluded by default\"]\n\n## Integration Notes\n- **Recommended flow**: [e.g., \"Fetch list → select item → submit form → poll for status\"]\n- **Optimistic UI**: [safe or not, why]\n- **Caching**: [any cache headers, invalidation triggers]\n- **Real-time**: [websocket events, polling intervals if applicable]\n\n## Test Scenarios\n[Key scenarios frontend should handle—happy path, errors, edge cases. Use as acceptance criteria or test cases.]\n\n1. **Happy path**: [brief description]\n2. **Validation error**: [what triggers it, expected response]\n3. **Not found**: [when 404 is returned]\n4. **Permission denied**: [when 403 is returned]\n\n## Open Questions \u002F TODOs\n[Anything unresolved, pending PM decision, or needs frontend input. If none, omit section.]\n```\n\n---\n\n## Rules\n- **NO CHAT OUTPUT**—produce only the handoff markdown block, nothing else.\n- Be precise: types, constraints, examples—not vague prose.\n- Include real example payloads where helpful.\n- Surface non-obvious behaviors—don't assume frontend will \"just know.\"\n- If backend made trade-offs or assumptions, document them.\n- Keep it scannable: headers, tables, bullets, code blocks.\n- No backend implementation details (no file paths, class names, internal services) unless directly relevant to integration.\n- If something is incomplete or TBD, say so explicitly.\n\n## After Generating\nWrite the final markdown into the handoff file only—do not echo it in chat. (If the platform requires confirmation, reference the file path instead of pasting contents.)\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Fsoftaworks\u002Fagent-toolkit\u002Fbackend-to-frontend-handoff-docs",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":45,"prompt":55,"zipAvailable":56},[46,49,52],{"tool":47,"command":48},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill backend-to-frontend-handoff-docs",{"tool":50,"command":51},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill backend-to-frontend-handoff-docs",{"tool":53,"command":54},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill backend-to-frontend-handoff-docs","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fsoftaworks\u002Fagent-toolkit\u002Fbackend-to-frontend-handoff-docs\u002FSKILL.md",true,[],[59,71,81,90,96,103],{"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":67,"publishedAt":31},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[64],{"categoryNo":65,"categoryName":66,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[68,69,70],"model","model hierarchy","model hierarchy skill",{"skillNo":72,"name":73,"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":74,"categories":75,"keywords":77,"publishedAt":31},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[76],{"categoryNo":65,"categoryName":66,"taxonomyType":20,"taxonomyTypeDesc":21},[78,79,80],"MCP","zoom","zoom mcp",{"skillNo":82,"name":83,"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":84,"categories":85,"keywords":86,"publishedAt":31},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[87,88,89,79],"sdk","zoom apps sdk","apps",{"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":95,"publishedAt":31},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[92],{"skillNo":97,"name":98,"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":99,"categories":100,"keywords":102,"publishedAt":31},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[101],{"categoryNo":65,"categoryName":66,"taxonomyType":20,"taxonomyTypeDesc":21},[98],{"skillNo":104,"name":105,"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":106,"categories":107,"keywords":108,"publishedAt":31},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[105]]