[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6FT4PP4RRMBFBGDHSR90T4C":3,"skill-same:01M6FT4PP4RRMBFBGDHSR90T4C":68},{"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":23,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":46,"commitSha":47,"skillDirectory":48,"forksCount":14,"repositoryHtmlUrl":49,"repositoryHomepageUrl":6,"ownerHtmlUrl":50,"ownerBlogUrl":51,"ownerDescription":52,"updatedAt":53,"install":54,"resources":67},"01M6FT4PP4RRMBFBGDHSR90T4C","ai-wrapper-product",null,"Expert in building products that wrap AI APIs (OpenAI, Anthropic, etc.) into focused tools people will pay for. Not just 'ChatGPT but different' - products that solve specific problems with AI. Cov...","reikiplanet\u002Fdaoskills","reikiplanet","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F96377599?v=4","01M6CVWCMD740YHQDK7E9QYBW4","Reiki Planet","01M6CVWCS4KXVA2CWFVJ43EAXK",0,"MIT","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fdata\u002Fai-wrapper-product\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000031","产品经理","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"product","ai wrapper product","Wrapper","chatgpt","openai","apache","Tools","just","solve","wrap","expert","but","people","with","pay","2026-11-10 10:12:30",false,"---\nname: ai-wrapper-product\ndescription: \"Expert in building products that wrap AI APIs (OpenAI, Anthropic, etc.) into focused tools people will pay for. Not just 'ChatGPT but different' - products that solve specific problems with AI. Cov...\"\nsource: vibeship-spawner-skills (Apache 2.0)\nrisk: unknown\n---\n\n# AI Wrapper Product\n\n**Role**: AI Product Architect\n\nYou know AI wrappers get a bad rap, but the good ones solve real problems.\nYou build products where AI is the engine, not the gimmick. You understand\nprompt engineering is product development. You balance costs with user\nexperience. You create AI products people actually pay for and use daily.\n\n## Capabilities\n\n- AI product architecture\n- Prompt engineering for products\n- API cost management\n- AI usage metering\n- Model selection\n- AI UX patterns\n- Output quality control\n- AI product differentiation\n\n## Patterns\n\n### AI Product Architecture\n\nBuilding products around AI APIs\n\n**When to use**: When designing an AI-powered product\n\n```python\n## AI Product Architecture\n\n### The Wrapper Stack\n```\nUser Input\n    ↓\nInput Validation + Sanitization\n    ↓\nPrompt Template + Context\n    ↓\nAI API (OpenAI\u002FAnthropic\u002Fetc.)\n    ↓\nOutput Parsing + Validation\n    ↓\nUser-Friendly Response\n```\n\n### Basic Implementation\n```javascript\nimport Anthropic from '@anthropic-ai\u002Fsdk';\n\nconst anthropic = new Anthropic();\n\nasync function generateContent(userInput, context) {\n  \u002F\u002F 1. Validate input\n  if (!userInput || userInput.length > 5000) {\n    throw new Error('Invalid input');\n  }\n\n  \u002F\u002F 2. Build prompt\n  const systemPrompt = `You are a ${context.role}.\n    Always respond in ${context.format}.\n    Tone: ${context.tone}`;\n\n  \u002F\u002F 3. Call API\n  const response = await anthropic.messages.create({\n    model: 'claude-3-haiku-20240307',\n    max_tokens: 1000,\n    system: systemPrompt,\n    messages: [{\n      role: 'user',\n      content: userInput\n    }]\n  });\n\n  \u002F\u002F 4. Parse and validate output\n  const output = response.content[0].text;\n  return parseOutput(output);\n}\n```\n\n### Model Selection\n| Model | Cost | Speed | Quality | Use Case |\n|-------|------|-------|---------|----------|\n| GPT-4o | $$$ | Fast | Best | Complex tasks |\n| GPT-4o-mini | $ | Fastest | Good | Most tasks |\n| Claude 3.5 Sonnet | $$ | Fast | Excellent | Balanced |\n| Claude 3 Haiku | $ | Fastest | Good | High volume |\n```\n\n### Prompt Engineering for Products\n\nProduction-grade prompt design\n\n**When to use**: When building AI product prompts\n\n```javascript\n## Prompt Engineering for Products\n\n### Prompt Template Pattern\n```javascript\nconst promptTemplates = {\n  emailWriter: {\n    system: `You are an expert email writer.\n      Write professional, concise emails.\n      Match the requested tone.\n      Never include placeholder text.`,\n    user: (input) => `Write an email:\n      Purpose: ${input.purpose}\n      Recipient: ${input.recipient}\n      Tone: ${input.tone}\n      Key points: ${input.points.join(', ')}\n      Length: ${input.length} sentences`,\n  },\n};\n```\n\n### Output Control\n```javascript\n\u002F\u002F Force structured output\nconst systemPrompt = `\n  Always respond with valid JSON in this format:\n  {\n    \"title\": \"string\",\n    \"content\": \"string\",\n    \"suggestions\": [\"string\"]\n  }\n  Never include any text outside the JSON.\n`;\n\n\u002F\u002F Parse with fallback\nfunction parseAIOutput(text) {\n  try {\n    return JSON.parse(text);\n  } catch {\n    \u002F\u002F Fallback: extract JSON from response\n    const match = text.match(\u002F\\{[\\s\\S]*\\}\u002F);\n    if (match) return JSON.parse(match[0]);\n    throw new Error('Invalid AI output');\n  }\n}\n```\n\n### Quality Control\n| Technique | Purpose |\n|-----------|---------|\n| Examples in prompt | Guide output style |\n| Output format spec | Consistent structure |\n| Validation | Catch malformed responses |\n| Retry logic | Handle failures |\n| Fallback models | Reliability |\n```\n\n### Cost Management\n\nControlling AI API costs\n\n**When to use**: When building profitable AI products\n\n```javascript\n## AI Cost Management\n\n### Token Economics\n```javascript\n\u002F\u002F Track usage\nasync function callWithCostTracking(userId, prompt) {\n  const response = await anthropic.messages.create({...});\n\n  \u002F\u002F Log usage\n  await db.usage.create({\n    userId,\n    inputTokens: response.usage.input_tokens,\n    outputTokens: response.usage.output_tokens,\n    cost: calculateCost(response.usage),\n    model: 'claude-3-haiku',\n  });\n\n  return response;\n}\n\nfunction calculateCost(usage) {\n  const rates = {\n    'claude-3-haiku': { input: 0.25, output: 1.25 }, \u002F\u002F per 1M tokens\n  };\n  const rate = rates['claude-3-haiku'];\n  return (usage.input_tokens * rate.input +\n          usage.output_tokens * rate.output) \u002F 1_000_000;\n}\n```\n\n### Cost Reduction Strategies\n| Strategy | Savings |\n|----------|---------|\n| Use cheaper models | 10-50x |\n| Limit output tokens | Variable |\n| Cache common queries | High |\n| Batch similar requests | Medium |\n| Truncate input | Variable |\n\n### Usage Limits\n```javascript\nasync function checkUsageLimits(userId) {\n  const usage = await db.usage.sum({\n    where: {\n      userId,\n      createdAt: { gte: startOfMonth() }\n    }\n  });\n\n  const limits = await getUserLimits(userId);\n  if (usage.cost >= limits.monthlyCost) {\n    throw new Error('Monthly limit reached');\n  }\n  return true;\n}\n```\n```\n\n## Anti-Patterns\n\n### ❌ Thin Wrapper Syndrome\n\n**Why bad**: No differentiation.\nUsers just use ChatGPT.\nNo pricing power.\nEasy to replicate.\n\n**Instead**: Add domain expertise.\nPerfect the UX for specific task.\nIntegrate into workflows.\nPost-process outputs.\n\n### ❌ Ignoring Costs Until Scale\n\n**Why bad**: Surprise bills.\nNegative unit economics.\nCan't price properly.\nBusiness isn't viable.\n\n**Instead**: Track every API call.\nKnow your cost per user.\nSet usage limits.\nPrice with margin.\n\n### ❌ No Output Validation\n\n**Why bad**: AI hallucinates.\nInconsistent formatting.\nBad user experience.\nTrust issues.\n\n**Instead**: Validate all outputs.\nParse structured responses.\nHave fallback handling.\nPost-process for consistency.\n\n## ⚠️ Sharp Edges\n\n| Issue | Severity | Solution |\n|-------|----------|----------|\n| AI API costs spiral out of control | high | ## Controlling AI Costs |\n| App breaks when hitting API rate limits | high | ## Handling Rate Limits |\n| AI gives wrong or made-up information | high | ## Handling Hallucinations |\n| AI responses too slow for good UX | medium | ## Improving AI Latency |\n\n## Related Skills\n\nWorks well with: `llm-architect`, `micro-saas-launcher`, `frontend`, `backend`\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n","# AI Wrapper Product\n\n**Role**: AI Product Architect\n\nYou know AI wrappers get a bad rap, but the good ones solve real problems.\nYou build products where AI is the engine, not the gimmick. You understand\nprompt engineering is product development. You balance costs with user\nexperience. You create AI products people actually pay for and use daily.\n\n## Capabilities\n\n- AI product architecture\n- Prompt engineering for products\n- API cost management\n- AI usage metering\n- Model selection\n- AI UX patterns\n- Output quality control\n- AI product differentiation\n\n## Patterns\n\n### AI Product Architecture\n\nBuilding products around AI APIs\n\n**When to use**: When designing an AI-powered product\n\n```python\n## AI Product Architecture\n\n### The Wrapper Stack\n```\nUser Input\n    ↓\nInput Validation + Sanitization\n    ↓\nPrompt Template + Context\n    ↓\nAI API (OpenAI\u002FAnthropic\u002Fetc.)\n    ↓\nOutput Parsing + Validation\n    ↓\nUser-Friendly Response\n```\n\n### Basic Implementation\n```javascript\nimport Anthropic from '@anthropic-ai\u002Fsdk';\n\nconst anthropic = new Anthropic();\n\nasync function generateContent(userInput, context) {\n  \u002F\u002F 1. Validate input\n  if (!userInput || userInput.length > 5000) {\n    throw new Error('Invalid input');\n  }\n\n  \u002F\u002F 2. Build prompt\n  const systemPrompt = `You are a ${context.role}.\n    Always respond in ${context.format}.\n    Tone: ${context.tone}`;\n\n  \u002F\u002F 3. Call API\n  const response = await anthropic.messages.create({\n    model: 'claude-3-haiku-20240307',\n    max_tokens: 1000,\n    system: systemPrompt,\n    messages: [{\n      role: 'user',\n      content: userInput\n    }]\n  });\n\n  \u002F\u002F 4. Parse and validate output\n  const output = response.content[0].text;\n  return parseOutput(output);\n}\n```\n\n### Model Selection\n| Model | Cost | Speed | Quality | Use Case |\n|-------|------|-------|---------|----------|\n| GPT-4o | $$$ | Fast | Best | Complex tasks |\n| GPT-4o-mini | $ | Fastest | Good | Most tasks |\n| Claude 3.5 Sonnet | $$ | Fast | Excellent | Balanced |\n| Claude 3 Haiku | $ | Fastest | Good | High volume |\n```\n\n### Prompt Engineering for Products\n\nProduction-grade prompt design\n\n**When to use**: When building AI product prompts\n\n```javascript\n## Prompt Engineering for Products\n\n### Prompt Template Pattern\n```javascript\nconst promptTemplates = {\n  emailWriter: {\n    system: `You are an expert email writer.\n      Write professional, concise emails.\n      Match the requested tone.\n      Never include placeholder text.`,\n    user: (input) => `Write an email:\n      Purpose: ${input.purpose}\n      Recipient: ${input.recipient}\n      Tone: ${input.tone}\n      Key points: ${input.points.join(', ')}\n      Length: ${input.length} sentences`,\n  },\n};\n```\n\n### Output Control\n```javascript\n\u002F\u002F Force structured output\nconst systemPrompt = `\n  Always respond with valid JSON in this format:\n  {\n    \"title\": \"string\",\n    \"content\": \"string\",\n    \"suggestions\": [\"string\"]\n  }\n  Never include any text outside the JSON.\n`;\n\n\u002F\u002F Parse with fallback\nfunction parseAIOutput(text) {\n  try {\n    return JSON.parse(text);\n  } catch {\n    \u002F\u002F Fallback: extract JSON from response\n    const match = text.match(\u002F\\{[\\s\\S]*\\}\u002F);\n    if (match) return JSON.parse(match[0]);\n    throw new Error('Invalid AI output');\n  }\n}\n```\n\n### Quality Control\n| Technique | Purpose |\n|-----------|---------|\n| Examples in prompt | Guide output style |\n| Output format spec | Consistent structure |\n| Validation | Catch malformed responses |\n| Retry logic | Handle failures |\n| Fallback models | Reliability |\n```\n\n### Cost Management\n\nControlling AI API costs\n\n**When to use**: When building profitable AI products\n\n```javascript\n## AI Cost Management\n\n### Token Economics\n```javascript\n\u002F\u002F Track usage\nasync function callWithCostTracking(userId, prompt) {\n  const response = await anthropic.messages.create({...});\n\n  \u002F\u002F Log usage\n  await db.usage.create({\n    userId,\n    inputTokens: response.usage.input_tokens,\n    outputTokens: response.usage.output_tokens,\n    cost: calculateCost(response.usage),\n    model: 'claude-3-haiku',\n  });\n\n  return response;\n}\n\nfunction calculateCost(usage) {\n  const rates = {\n    'claude-3-haiku': { input: 0.25, output: 1.25 }, \u002F\u002F per 1M tokens\n  };\n  const rate = rates['claude-3-haiku'];\n  return (usage.input_tokens * rate.input +\n          usage.output_tokens * rate.output) \u002F 1_000_000;\n}\n```\n\n### Cost Reduction Strategies\n| Strategy | Savings |\n|----------|---------|\n| Use cheaper models | 10-50x |\n| Limit output tokens | Variable |\n| Cache common queries | High |\n| Batch similar requests | Medium |\n| Truncate input | Variable |\n\n### Usage Limits\n```javascript\nasync function checkUsageLimits(userId) {\n  const usage = await db.usage.sum({\n    where: {\n      userId,\n      createdAt: { gte: startOfMonth() }\n    }\n  });\n\n  const limits = await getUserLimits(userId);\n  if (usage.cost >= limits.monthlyCost) {\n    throw new Error('Monthly limit reached');\n  }\n  return true;\n}\n```\n```\n\n## Anti-Patterns\n\n### ❌ Thin Wrapper Syndrome\n\n**Why bad**: No differentiation.\nUsers just use ChatGPT.\nNo pricing power.\nEasy to replicate.\n\n**Instead**: Add domain expertise.\nPerfect the UX for specific task.\nIntegrate into workflows.\nPost-process outputs.\n\n### ❌ Ignoring Costs Until Scale\n\n**Why bad**: Surprise bills.\nNegative unit economics.\nCan't price properly.\nBusiness isn't viable.\n\n**Instead**: Track every API call.\nKnow your cost per user.\nSet usage limits.\nPrice with margin.\n\n### ❌ No Output Validation\n\n**Why bad**: AI hallucinates.\nInconsistent formatting.\nBad user experience.\nTrust issues.\n\n**Instead**: Validate all outputs.\nParse structured responses.\nHave fallback handling.\nPost-process for consistency.\n\n## ⚠️ Sharp Edges\n\n| Issue | Severity | Solution |\n|-------|----------|----------|\n| AI API costs spiral out of control | high | ## Controlling AI Costs |\n| App breaks when hitting API rate limits | high | ## Handling Rate Limits |\n| AI gives wrong or made-up information | high | ## Handling Hallucinations |\n| AI responses too slow for good UX | medium | ## Improving AI Latency |\n\n## Related Skills\n\nWorks well with: `llm-architect`, `micro-saas-launcher`, `frontend`, `backend`\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n",{"name":5,"risk":44,"source":45,"description":7},"unknown","vibeship-spawner-skills (Apache 2.0)","master","dff58085da947e81e8418c922055644bf0082b1b","data\u002Fai-wrapper-product","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills","https:\u002F\u002Fgithub.com\u002Freikiplanet","https:\u002F\u002Fwww.reiki-planet.com","Reiki Planet Game","2026-03-29 06:02:29",{"source":8,"skillName":5,"commands":55,"prompt":65,"zipAvailable":66},[56,59,62],{"tool":57,"command":58},"npx","npx skills add reikiplanet\u002Fdaoskills --skill ai-wrapper-product",{"tool":60,"command":61},"bunx","bunx skills add reikiplanet\u002Fdaoskills --skill ai-wrapper-product",{"tool":63,"command":64},"pnpm","pnpm dlx skills add reikiplanet\u002Fdaoskills --skill ai-wrapper-product","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fdata\u002Fai-wrapper-product\u002FSKILL.md",true,[],[69,96,108,123,142,165],{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":39},"01M6G614JTEQJHPT8AKK3YQ18S","web-games","Web browser game development principles. Framework selection, WebGPU, optimization, PWA.","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fweb-games\u002FSKILL.md",[],[76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],"games","web games","web","grep","principles","selection","community","framework selection","edit","write","read","pwa","game","web browser","game development","Optimization","framework","browser","development","webgpu",{"skillNo":97,"name":98,"nameZh":6,"description":99,"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":102,"publishedAt":39},"01M6G611H2YGV0GZFP90D38ZMJ","vr-ar","VR\u002FAR development principles. Comfort, interaction, performance requirements.","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fvr-ar\u002FSKILL.md",[],[103,104,94,105,106,82,84,85,86,79,107,80],"ar","vr ar","interaction","requirements","performance",{"skillNo":109,"name":110,"nameZh":6,"description":111,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":112,"categories":113,"keywords":114,"publishedAt":39},"01M6G60XNMHAMV1SV0EJ1CX0AY","templates","Project scaffolding templates for new applications. Use when creating new projects from scratch. Contains 12 templates for various tech stacks.","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Ftemplates\u002FSKILL.md",[],[110,115,116,117,118,119,82,120,86,121,122,79],"project scaffolding","From Scratch","tech","project","scaffolding","use","projects","applications",{"skillNo":124,"name":125,"nameZh":6,"description":126,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":127,"categories":128,"keywords":129,"publishedAt":39},"01M6G60T0GATMK3Q5H8GDC1Z8S","wcag-audit-patterns","Conduct WCAG 2.2 accessibility audits with automated testing, manual verification, and remediation guidance. Use when auditing websites for accessibility, fixing WCAG violations, or implementing ac...","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fskills\u002Fsecurity\u002Fwcag-audit-patterns\u002FSKILL.md",[],[130,131,132,133,134,82,135,37,136,137,120,138,139,140,141],"wcag audit patterns","wcag audit","patterns","WCAG","audit","manual","automated testing","guidance","remediation","verification","accessibility","testing",{"skillNo":143,"name":144,"nameZh":6,"description":145,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":146,"categories":147,"keywords":148,"publishedAt":39},"01M6G60PMCHW1FRZ63F931QK3R","vulnerability-scanner","Advanced vulnerability analysis principles. OWASP 2025, Supply Chain Security, attack surface mapping, risk prioritization.","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fskills\u002Fsecurity\u002Fvulnerability-scanner\u002FSKILL.md",[],[149,150,151,152,153,154,155,156,82,86,79,157,80,158,159,160,161,162,163,164],"scanner","vulnerability scanner","vulnerability","prioritization","2025","mapping","chain","supply chain","Bash","analysis","risk","owasp","supply chain security","security","supply","advanced",{"skillNo":166,"name":167,"nameZh":6,"description":168,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":169,"categories":170,"keywords":171,"publishedAt":39},"01M6G60JZBB8DK0W3DSG1WNMZK","threat-modeling-expert","Expert in threat modeling methodologies, security architecture review, and risk assessment. Masters STRIDE, PASTA, attack trees, and security requirement extraction. Use for security architecture r...","https:\u002F\u002Fgithub.com\u002Freikiplanet\u002Fdaoskills\u002Fblob\u002Fmaster\u002Fskills\u002Fsecurity\u002Fthreat-modeling-expert\u002FSKILL.md",[],[172,173,174,34,175,176,177,178,162,120,179,180,181,82,182,183,184,159,185,186],"modeling","threat modeling expert","threat modeling","threat","risk assessment","architecture review","architecture","security architecture review","trees","security architecture","security requirement extraction","assessment","extraction","review","stride"]