[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6K5B7KRVXZ9KB84SPJDVYJK":3,"skill-same:01M6K5B7KRVXZ9KB84SPJDVYJK":73},{"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":43,"linkOnly":44,"markdownContent":45,"markdownBody":46,"frontMatter":47,"refName":51,"commitSha":52,"skillDirectory":53,"forksCount":54,"repositoryHtmlUrl":55,"repositoryHomepageUrl":56,"ownerHtmlUrl":57,"ownerBlogUrl":56,"ownerDescription":58,"updatedAt":59,"install":60,"resources":72},"01M6K5B7KRVXZ9KB84SPJDVYJK","build-review-gallery",null,"Build the shareable HTML review gallery of every generated post for team or client. \"make me a gallery page\"","indranilbanerjee\u002Fsocialforge","indranilbanerjee","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F1857369?v=4","01M6K5AJ210R87KXT6WF07RC4T","Indranil Banerjee","01M6K5AJ6FXW6Y1CDESBGX191P",44,"MIT","https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge\u002Fblob\u002Fmain\u002Fskills\u002Fbuild-review-gallery\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"build review gallery","gallery","build","review","name","inline","for","true","mm","make","post","client","me","html","generated","brand","page","team","Video","2026-11-10 10:12:30",false,"---\nname: build-review-gallery\ndescription: \"Build the shareable HTML review gallery of every generated post for team or client. \\\"make me a gallery page\\\"\"\nargument-hint: \"--brand \u003Cname> --month \u003CYYYY-MM> [--no-inline-video]\"\neffort: medium\nuser-invocable: true\n---\n\n# \u002Fsocialforge:build-review-gallery — Review Gallery Builder\n\nBuild a self-contained HTML gallery showing every post in the month with its generated visual, metadata, and a copy excerpt.\n\n## Process\n1. Load calendar-data.json and status-tracker.json for the brand + month\n2. For each post, locate the generated image, video (plus any alternative cut), and copy file\n3. Build the gallery HTML — `build_gallery.py` generates the markup inline; it does not read a template file\n4. Embed images and videos as base64 data URIs so the file is self-contained\n5. Save to `${CLAUDE_PLUGIN_DATA}\u002Fsocialforge\u002Foutput\u002F{brand}\u002F{month}\u002Freview\u002Fgallery.html` (falls back to `~\u002Fsocialforge-workspace\u002Foutput\u002F...` when `${CLAUDE_PLUGIN_DATA}` is unset)\n\n## Step 6 (optional) — Offer a hosted copy for review\n\nThe local `gallery.html` is built first, always. It is the fallback and the source of truth; nothing below replaces it.\n\n`build_gallery.py` reports `size_bytes`, `size_mb` and `publishable_as_page` (true only when the file is 15 MB or smaller, a conservative ceiling for a hosted page). After the local file exists:\n\n1. If this session has a tool that publishes an HTML page (for example an artifact or page-publishing tool) and `publishable_as_page` is true, **offer** to publish the gallery as a private page for review. Say in the offer that publishing uploads the month's creative and copy to a hosted service. Publish only on the user's explicit yes, and publish the file at `output`, unchanged.\n2. Choose the private option wherever the tool has one. Never say or imply the page is shared with anyone: sharing is a separate step that is the user's to take. Give them the link and stop there.\n3. If `publishable_as_page` is false, say so in one line and use the result's `note`: inlined video is what makes a gallery too large. Offer `build_gallery.py --brand \u003Cname> --month \u003CYYYY-MM> --no-inline-video`, which links videos by relative path and keeps the file small. A published copy of that build shows images and copy but **cannot play the linked videos** — say that before offering it.\n4. If no tool that publishes a page exists, say so in one line and give the local path. Do not suggest a hosting service.\n\n## What the Gallery Shows\n- Summary bar: total posts, images, videos, and counts per tier (HERO \u002F HUB \u002F HYGIENE)\n- Per-post card: visual (video preferred over image), post id, tier badge, status, title, date, platforms, content type, and the first 200 characters of the copy\n\nReview actions — approving, requesting revisions, adding notes — happen conversationally via `\u002Fsocialforge:manage-reviews`, not inside the gallery. The gallery is a read-only view.\n\n## Timeout & Fallback\n- Gallery build: 60-second timeout for 30 posts. Every video that exists is embedded as base64, however large — there is no size cutoff, and a missing or unreadable video file renders as a \"Video file missing or unreadable\" placeholder. A gallery with many large videos can therefore be very large: check `size_mb` in the result, and use `--no-inline-video` to link the videos instead.\n","# \u002Fsocialforge:build-review-gallery — Review Gallery Builder\n\nBuild a self-contained HTML gallery showing every post in the month with its generated visual, metadata, and a copy excerpt.\n\n## Process\n1. Load calendar-data.json and status-tracker.json for the brand + month\n2. For each post, locate the generated image, video (plus any alternative cut), and copy file\n3. Build the gallery HTML — `build_gallery.py` generates the markup inline; it does not read a template file\n4. Embed images and videos as base64 data URIs so the file is self-contained\n5. Save to `${CLAUDE_PLUGIN_DATA}\u002Fsocialforge\u002Foutput\u002F{brand}\u002F{month}\u002Freview\u002Fgallery.html` (falls back to `~\u002Fsocialforge-workspace\u002Foutput\u002F...` when `${CLAUDE_PLUGIN_DATA}` is unset)\n\n## Step 6 (optional) — Offer a hosted copy for review\n\nThe local `gallery.html` is built first, always. It is the fallback and the source of truth; nothing below replaces it.\n\n`build_gallery.py` reports `size_bytes`, `size_mb` and `publishable_as_page` (true only when the file is 15 MB or smaller, a conservative ceiling for a hosted page). After the local file exists:\n\n1. If this session has a tool that publishes an HTML page (for example an artifact or page-publishing tool) and `publishable_as_page` is true, **offer** to publish the gallery as a private page for review. Say in the offer that publishing uploads the month's creative and copy to a hosted service. Publish only on the user's explicit yes, and publish the file at `output`, unchanged.\n2. Choose the private option wherever the tool has one. Never say or imply the page is shared with anyone: sharing is a separate step that is the user's to take. Give them the link and stop there.\n3. If `publishable_as_page` is false, say so in one line and use the result's `note`: inlined video is what makes a gallery too large. Offer `build_gallery.py --brand \u003Cname> --month \u003CYYYY-MM> --no-inline-video`, which links videos by relative path and keeps the file small. A published copy of that build shows images and copy but **cannot play the linked videos** — say that before offering it.\n4. If no tool that publishes a page exists, say so in one line and give the local path. Do not suggest a hosting service.\n\n## What the Gallery Shows\n- Summary bar: total posts, images, videos, and counts per tier (HERO \u002F HUB \u002F HYGIENE)\n- Per-post card: visual (video preferred over image), post id, tier badge, status, title, date, platforms, content type, and the first 200 characters of the copy\n\nReview actions — approving, requesting revisions, adding notes — happen conversationally via `\u002Fsocialforge:manage-reviews`, not inside the gallery. The gallery is a read-only view.\n\n## Timeout & Fallback\n- Gallery build: 60-second timeout for 30 posts. Every video that exists is embedded as base64, however large — there is no size cutoff, and a missing or unreadable video file renders as a \"Video file missing or unreadable\" placeholder. A gallery with many large videos can therefore be very large: check `size_mb` in the result, and use `--no-inline-video` to link the videos instead.\n",{"name":5,"effort":48,"description":7,"argument-hint":49,"user-invocable":50},"medium","--brand \u003Cname> --month \u003CYYYY-MM> [--no-inline-video]",true,"main","552dba358f148de8439795c5e8becb57f9943ec8","skills\u002Fbuild-review-gallery",9,"https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge","https:\u002F\u002Findranil.in","https:\u002F\u002Fgithub.com\u002Findranilbanerjee","Builder across trustworthy AI, agentic systems, and marketing engineering. Security roots; focused on human capability amplified by software.","2026-11-08 01:03:55",{"source":8,"skillName":5,"commands":61,"prompt":71,"zipAvailable":50},[62,65,68],{"tool":63,"command":64},"npx","npx skills add indranilbanerjee\u002Fsocialforge --skill build-review-gallery",{"tool":66,"command":67},"bunx","bunx skills add indranilbanerjee\u002Fsocialforge --skill build-review-gallery",{"tool":69,"command":70},"pnpm","pnpm dlx skills add indranilbanerjee\u002Fsocialforge --skill build-review-gallery","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge\u002Fblob\u002Fmain\u002Fskills\u002Fbuild-review-gallery\u002FSKILL.md",[],[74,98,120,143,161,191],{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":81,"publishedAt":43},"01M6K5E21QEYHCT7Z2HA4AQ804","setup","One-time setup of image and video generation credentials, verified before use. \"set up my API keys\"","https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge\u002Fblob\u002Fmain\u002Fskills\u002Fsetup\u002FSKILL.md",[80],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[76,82,83,84,85,86,31,87,88,89,90,91,92,42,93,94,95,96,97],"video generation","api keys","verified","keys","my","reset","generation","time","fallback","up","use","api","credentials","SET","status","image",{"skillNo":99,"name":100,"nameZh":6,"description":101,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":107,"publishedAt":43},"01M6K5DWRWPF1ZHZ93VE8Z1NB4","research-month","Turn supplied comment exports and competitor ads into a what's-working brief before planning a month. \"analyse these competitor ads and comments\"","https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge\u002Fblob\u002Fmain\u002Fskills\u002Fresearch-month\u002FSKILL.md",[104],{"categoryNo":105,"categoryName":106,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",[108,109,110,111,39,112,113,114,115,116,117,28,118,31,119,32],"research month","research","csv","export","text","ads","brief","planning","screenshots","comments","high","posts",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":129,"publishedAt":43},"01M6K5DQ47966ZG9N916VA7Y68","render-carousels","Render multi-slide carousels from HTML templates into platform-ready images or PDF. \"build the carousel slides\"","https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge\u002Fblob\u002Fmain\u002Fskills\u002Frender-carousels\u002FSKILL.md",[126],{"categoryNo":127,"categoryName":128,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000002","文档处理",[130,131,132,133,134,135,34,136,118,31,137,138,139,37,140,141,142,26],"render carousels","render","platform","type","id","carousel","multi","template","images","ready","slides","templates","PDF",{"skillNo":144,"name":145,"nameZh":6,"description":146,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":149,"publishedAt":43},"01M6K5DHDFMZAK4BN2QFEVM614","price-check","Price a generation run from live provider rates before any spend. \"how much will this cost\"","https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge\u002Fblob\u002Fmain\u002Fskills\u002Fprice-check\u002FSKILL.md",[],[150,151,152,153,31,154,28,134,88,155,156,157,158,159,160],"check","price","price check","live","compare","provider","cost","model","how","batch","run",{"skillNo":162,"name":163,"nameZh":6,"description":164,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":165,"categories":166,"keywords":176,"publishedAt":43},"01M6K5DDGBCGTN4SBEHZD5G9H8","parse-calendar","Parse a content calendar or plan from DOCX, XLSX, Notion or pasted text into structured posts. \"load this month's calendar\"","https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge\u002Fblob\u002Fmain\u002Fskills\u002Fparse-calendar\u002FSKILL.md",[167,168,171],{"categoryNo":127,"categoryName":128,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":169,"categoryName":170,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000004","电子表格",{"categoryNo":172,"categoryName":173,"taxonomyType":174,"taxonomyTypeDesc":175},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[177,178,119,179,180,181,112,182,183,184,185,186,187,188,189,190,31],"parse calendar","calendar","URL","structured","content calendar","plan","file","content","notion","xlsx","docx","paste","path","load",{"skillNo":192,"name":193,"nameZh":6,"description":194,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":195,"categories":196,"keywords":197,"publishedAt":43},"01M6K5D9NZ6QEP1F5M9P8EXM7E","model-check","Find the best current model for a capability from the live catalogue and record its source. \"which model should we use\"","https:\u002F\u002Fgithub.com\u002Findranilbanerjee\u002Fsocialforge\u002Fblob\u002Fmain\u002Fskills\u002Fmodel-check\u002FSKILL.md",[],[198,157,150,199,30,200,31,201,28,153,202,155,92,203],"model check","source","which","kind","record","find"]