[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EF2SBAZYCEA7DCE9ZPGP35":3,"skill-same:01M6EF2SBAZYCEA7DCE9ZPGP35":63},{"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":27,"ownerHtmlUrl":28,"ownerBlogUrl":6,"ownerDescription":29,"updatedAt":30,"install":31,"resources":44},"01M6EF2SBAZYCEA7DCE9ZPGP35","ghost",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\u002FTerminalSkills\u002Fskills\u002Fghost\u002FSKILL.md",[],[5],"2026-11-10 10:12:30",false,"# Ghost — Professional Publishing Platform\n\nYou are an expert in Ghost, the open-source publishing platform for blogs, newsletters, and membership sites. You help developers and creators set up Ghost as a headless CMS with its Content API for custom frontends, integrate the Members\u002FSubscriptions system for paid newsletters, and build custom themes — turning Ghost into a full publishing business with built-in payments, email newsletters, and SEO.\n\n## Core Capabilities\n\n### Content API (Headless)\n\n```typescript\n\u002F\u002F src\u002Flib\u002Fghost.ts — Ghost Content API client\nimport GhostContentAPI from \"@tryghost\u002Fcontent-api\";\n\nconst ghost = new GhostContentAPI({\n  url: process.env.GHOST_URL!,            \u002F\u002F https:\u002F\u002Fyour-ghost.com\n  key: process.env.GHOST_CONTENT_API_KEY!,\n  version: \"v5.0\",\n});\n\n\u002F\u002F Fetch posts with pagination\nasync function getPosts(page = 1, limit = 10) {\n  return ghost.posts.browse({\n    limit,\n    page,\n    include: [\"tags\", \"authors\"],\n    fields: [\"id\", \"title\", \"slug\", \"excerpt\", \"feature_image\", \"published_at\", \"reading_time\"],\n    order: \"published_at DESC\",\n  });\n}\n\n\u002F\u002F Single post by slug\nasync function getPostBySlug(slug: string) {\n  return ghost.posts.read({ slug }, {\n    include: [\"tags\", \"authors\"],\n    formats: [\"html\"],                    \u002F\u002F or \"mobiledoc\" for raw\n  });\n}\n\n\u002F\u002F All tags\nasync function getTags() {\n  return ghost.tags.browse({\n    limit: \"all\",\n    include: [\"count.posts\"],\n    order: \"count.posts DESC\",\n  });\n}\n\n\u002F\u002F Posts by tag\nasync function getPostsByTag(tagSlug: string) {\n  return ghost.posts.browse({\n    filter: `tag:${tagSlug}`,\n    include: [\"tags\", \"authors\"],\n    limit: 20,\n  });\n}\n```\n\n### Next.js Integration\n\n```tsx\n\u002F\u002F app\u002Fblog\u002F[slug]\u002Fpage.tsx — Ghost-powered blog with Next.js\nimport { getPostBySlug, getPosts } from \"@\u002Flib\u002Fghost\";\nimport { notFound } from \"next\u002Fnavigation\";\n\nexport async function generateStaticParams() {\n  const posts = await getPosts(1, 100);\n  return posts.map((post) => ({ slug: post.slug }));\n}\n\nexport async function generateMetadata({ params }: { params: { slug: string } }) {\n  const post = await getPostBySlug(params.slug);\n  if (!post) return {};\n  return {\n    title: post.meta_title || post.title,\n    description: post.meta_description || post.excerpt,\n    openGraph: {\n      title: post.og_title || post.title,\n      description: post.og_description || post.excerpt,\n      images: post.og_image ? [post.og_image] : post.feature_image ? [post.feature_image] : [],\n    },\n  };\n}\n\nexport default async function BlogPost({ params }: { params: { slug: string } }) {\n  const post = await getPostBySlug(params.slug);\n  if (!post) notFound();\n\n  return (\n    \u003Carticle className=\"prose lg:prose-xl mx-auto py-12 px-4\">\n      {post.feature_image && (\n        \u003Cimg src={post.feature_image} alt={post.title} className=\"rounded-xl\" \u002F>\n      )}\n      \u003Ch1>{post.title}\u003C\u002Fh1>\n      \u003Cdiv className=\"flex items-center gap-3 text-gray-500\">\n        \u003Cspan>{post.primary_author?.name}\u003C\u002Fspan>\n        \u003Cspan>·\u003C\u002Fspan>\n        \u003Ctime>{new Date(post.published_at!).toLocaleDateString()}\u003C\u002Ftime>\n        \u003Cspan>·\u003C\u002Fspan>\n        \u003Cspan>{post.reading_time} min read\u003C\u002Fspan>\n      \u003C\u002Fdiv>\n      \u003Cdiv dangerouslySetInnerHTML={{ __html: post.html! }} \u002F>\n    \u003C\u002Farticle>\n  );\n}\n\nexport const revalidate = 60;             \u002F\u002F ISR: revalidate every 60s\n```\n\n### Members & Subscriptions\n\n```markdown\n## Ghost Membership System\n\nGhost has built-in:\n- Free member signup (email collection)\n- Paid subscriptions via Stripe\n- Tiered access (Free \u002F Monthly $5 \u002F Annual $50)\n- Email newsletter delivery to members\n- Content gating (public \u002F members-only \u002F paid-only)\n\n## Admin API for member management\nPOST \u002Fghost\u002Fapi\u002Fadmin\u002Fmembers\u002F — Create member\nPUT  \u002Fghost\u002Fapi\u002Fadmin\u002Fmembers\u002F:id\u002F — Update member\nGET  \u002Fghost\u002Fapi\u002Fadmin\u002Fmembers\u002F?filter=status:paid — List paid members\n```\n\n## Installation\n\n```bash\n# Self-hosted (Docker)\ndocker run -d --name ghost \\\n  -p 2368:2368 \\\n  -e url=https:\u002F\u002Fblog.example.com \\\n  -e database__client=mysql \\\n  -e database__connection__host=db \\\n  -v ghost-content:\u002Fvar\u002Flib\u002Fghost\u002Fcontent \\\n  ghost:5\n\n# Or Ghost(Pro) managed hosting: https:\u002F\u002Fghost.org\u002Fpricing\u002F\n# Or npm: npm install ghost-cli -g && ghost install\n```\n\n## Best Practices\n\n1. **Headless with Next.js** — Use Ghost as CMS backend + Next.js for custom frontend; editors get Ghost's editor, developers get full control\n2. **Content API for reads** — Use Content API (key-based, cacheable) for all public content; Admin API only for writes\n3. **Static generation** — Use `generateStaticParams` for all blog posts; revalidate with ISR for near-instant updates\n4. **SEO built-in** — Ghost auto-generates meta tags, canonical URLs, structured data; override per-post in editor\n5. **Newsletter as growth tool** — Enable email newsletters; every blog post can be sent as email to subscribers\n6. **Webhooks for builds** — Configure webhooks in Ghost settings to trigger site rebuilds on publish\n7. **Custom integrations** — Use Ghost's integration system for API keys; separate keys for different frontends\u002Fservices\n8. **Membership tiers** — Use free tier to build email list, paid tier for premium content; Ghost handles Stripe billing\n",{},"main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002FTerminalSkills\u002Fskills\u002Fghost",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":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill ghost",{"tool":37,"command":38},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill ghost",{"tool":40,"command":41},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill ghost","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002FTerminalSkills\u002Fskills\u002Fghost\u002FSKILL.md",true,[45,51,55,59],{"path":46,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":49,"sourceHtmlUrl":50},"references\u002Fdpo-variants.md","REFERENCE","参考文档",4297,"https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002FWORM_V2_SOVEREIGN\u002Fblob\u002Fmain\u002Fcore\u002Fhermes_sovereign_data\u002Fskills\u002Fmlops\u002Ftraining\u002Ftrl-fine-tuning\u002Freferences\u002Fdpo-variants.md",{"path":52,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":53,"sourceHtmlUrl":54},"references\u002Fonline-rl.md",1971,"https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002FWORM_V2_SOVEREIGN\u002Fblob\u002Fmain\u002Fcore\u002Fhermes_sovereign_data\u002Fskills\u002Fmlops\u002Ftraining\u002Ftrl-fine-tuning\u002Freferences\u002Fonline-rl.md",{"path":56,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":57,"sourceHtmlUrl":58},"references\u002Freward-modeling.md",2597,"https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002FWORM_V2_SOVEREIGN\u002Fblob\u002Fmain\u002Fcore\u002Fhermes_sovereign_data\u002Fskills\u002Fmlops\u002Ftraining\u002Ftrl-fine-tuning\u002Freferences\u002Freward-modeling.md",{"path":60,"resourceType":47,"resourceTypeDesc":48,"sizeBytes":61,"sourceHtmlUrl":62},"references\u002Fsft-training.md",3237,"https:\u002F\u002Fgithub.com\u002Fgjbvsjjvgm-sketch\u002FWORM_V2_SOVEREIGN\u002Fblob\u002Fmain\u002Fcore\u002Fhermes_sovereign_data\u002Fskills\u002Fmlops\u002Ftraining\u002Ftrl-fine-tuning\u002Freferences\u002Fsft-training.md",[64,78,88,97,103,110],{"skillNo":65,"name":66,"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":67,"categories":68,"keywords":74,"publishedAt":18},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[69],{"categoryNo":70,"categoryName":71,"taxonomyType":72,"taxonomyTypeDesc":73},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[75,76,77],"model","model hierarchy","model hierarchy skill",{"skillNo":79,"name":80,"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":81,"categories":82,"keywords":84,"publishedAt":18},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[83],{"categoryNo":70,"categoryName":71,"taxonomyType":72,"taxonomyTypeDesc":73},[85,86,87],"MCP","zoom","zoom mcp",{"skillNo":89,"name":90,"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":91,"categories":92,"keywords":93,"publishedAt":18},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[94,95,96,86],"sdk","zoom apps sdk","apps",{"skillNo":98,"name":99,"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":100,"categories":101,"keywords":102,"publishedAt":18},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[99],{"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":109,"publishedAt":18},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[108],{"categoryNo":70,"categoryName":71,"taxonomyType":72,"taxonomyTypeDesc":73},[105],{"skillNo":111,"name":112,"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":113,"categories":114,"keywords":115,"publishedAt":18},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[112]]