[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6J8BNHMBPGG6BSP6PC3KCT2":3,"skill-same:01M6J8BNHMBPGG6BSP6PC3KCT2":76},{"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":18,"publishedAt":37,"linkOnly":38,"markdownContent":39,"markdownBody":40,"frontMatter":41,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":6,"ownerHtmlUrl":47,"ownerBlogUrl":48,"ownerDescription":49,"updatedAt":50,"install":51,"resources":64},"01M6J8BNHMBPGG6BSP6PC3KCT2","ig-carousel",null,"Build an Instagram carousel - the cover that earns the swipe, slide-by-slide copy, and the 1080x1350 files to upload. Use when the user says \"carousel\", \"slides\", \"swipe post\", \"turn this into a carousel\", or has a list-shaped or step-shaped idea that would die as a single image.","sgomez-dev\u002Fclaude-skills","sgomez-dev","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F81492002?v=4","01M6J7TFP3PR3PTGBAG3N9Z007","Santiago Gómez de la Torre Romero","01M6J7TFT704JY40NG1YE3V5JQ",1,"MIT","https:\u002F\u002Fgithub.com\u002Fsgomez-dev\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fexternal\u002Fig-carousel\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36],"ig carousel","carousel","ig","upload","cover","swipe","copy","post","as","image","idea","build","files","use","user","list","instagram","slides","2026-11-10 10:12:30",false,"---\nname: ig-carousel\ndescription: >-\n  Build an Instagram carousel - the cover that earns the swipe, slide-by-slide\n  copy, and the 1080x1350 files to upload. Use when the user says \"carousel\",\n  \"slides\", \"swipe post\", \"turn this into a carousel\", or has a list-shaped or\n  step-shaped idea that would die as a single image.\n---\n\n# ig-carousel\n\nCarousels are the highest-dwell format on the grid, because a swipe is an\ninteraction and a scroll is not. They also get a second chance: Instagram can\nshow a carousel again starting from a later slide to someone who did not engage\nthe first time, so slide two has to stand on its own as well.\n\nThe format rewards one idea broken into steps. It punishes a caption cut into\npieces.\n\n## When to use it instead of a Reel\n\nUse a carousel when the idea has **sequence and needs to be re-read**: steps, a\nframework with parts, a before and after, a list worth screenshotting. Use a\nReel when the idea has motion, a face, or a payoff that has to be seen\nhappening.\n\nIf the idea is one claim, it is neither. Hand it to `\u002Fig-reel` and say so.\n\n## Structure\n\n6 to 10 slides. The cap is 20 and 20 is almost always a book nobody finishes.\nUnder 5 and the swipe never starts.\n\n```\n1         COVER     the hook. 6 words or fewer, at a size that is legible in\n                    the grid at thumbnail. One line of promise under it.\n2         THE STAKE why this matters, in one sentence. This slide is also a\n                    second cover, so it cannot be setup.\n3 to N    ONE IDEA PER SLIDE. A headline of 3 to 7 words, at most 25 words\n                    under it. If a slide needs a paragraph, it is two slides.\nN+1       RECAP     the whole thing as a list. This is the screenshot slide.\nLAST      CTA       one action. Save, comment a keyword, or follow. One.\n```\n\n## Slide copy rules\n\n- **The cover is 80% of the result.** Six words. Big. Nothing on the deck saves\n  a cover nobody swipes.\n- **Design for the grid crop.** The profile grid crops to a portrait rectangle\n  that is taller than it is wide, and the exact ratio has moved more than once.\n  Build at 1080x1350 and keep the cover text well inside the middle, clear of\n  the outer 120 pixels on every side, and the crop stops mattering.\n- **Number the slides** (3\u002F8). Completion goes up when people can see the end.\n- **No slide is a paragraph.** If it cannot be said in 25 words, split it.\n- **The recap slide is the one people screenshot and send.** Sends are the\n  strongest signal you can earn. Make it standalone and readable with no\n  context.\n- **The handle on every slide**, small, bottom corner. Screenshots travel\n  without you.\n- **Alt text on the cover at minimum.** It is read by screen readers and by\n  Instagram.\n\n## Building the files\n\nInstagram wants 1080x1350 (4:5), JPEG or PNG, up to 20 items. Build it as HTML\nand print each slide:\n\n```bash\n# one \u003Csection> per slide, 1080x1350, page-break-after: always\n# then Chrome headless --print-to-pdf, or any HTML-to-image you already use\n```\n\nWrite the HTML with `width:1080px; height:1350px`, a single accent colour, and\ntype no smaller than 32px, because this is read on a phone at a third of its\nreal size. If the project has a brand skill or a design system, use it and do\nnot invent a palette.\n\n## Output\n\nThe slide-by-slide copy first, as a numbered list the user can read in ten\nseconds and edit before anything is rendered. Then the **caption**, which for a\ncarousel is Job B in `\u002Fig-caption`: the caption is doing work here, because the\ncover has already used its six words.\n\nRun both through `\u002Fig-human`. Build the files only after the user approves the\ncopy.\n\n```\nCAROUSEL  ·  8 slides\n\n1  COVER   THE $18,000 CLAUSE\n           One line I now put in every contract.\n2  STAKE   I approved the work. They asked for the money back nine days later.\n3          WHAT IT SAYS\n           Payment on delivery, not on approval.\n...\n7  RECAP   All four lines, in order.\n8  CTA     Comment CONTRACT and I will send the full clause.\n\nCaption: Job B, hook in line 1, one ask, 3 tags.\n```\n\nNothing is uploaded. The user posts it.\n","# ig-carousel\n\nCarousels are the highest-dwell format on the grid, because a swipe is an\ninteraction and a scroll is not. They also get a second chance: Instagram can\nshow a carousel again starting from a later slide to someone who did not engage\nthe first time, so slide two has to stand on its own as well.\n\nThe format rewards one idea broken into steps. It punishes a caption cut into\npieces.\n\n## When to use it instead of a Reel\n\nUse a carousel when the idea has **sequence and needs to be re-read**: steps, a\nframework with parts, a before and after, a list worth screenshotting. Use a\nReel when the idea has motion, a face, or a payoff that has to be seen\nhappening.\n\nIf the idea is one claim, it is neither. Hand it to `\u002Fig-reel` and say so.\n\n## Structure\n\n6 to 10 slides. The cap is 20 and 20 is almost always a book nobody finishes.\nUnder 5 and the swipe never starts.\n\n```\n1         COVER     the hook. 6 words or fewer, at a size that is legible in\n                    the grid at thumbnail. One line of promise under it.\n2         THE STAKE why this matters, in one sentence. This slide is also a\n                    second cover, so it cannot be setup.\n3 to N    ONE IDEA PER SLIDE. A headline of 3 to 7 words, at most 25 words\n                    under it. If a slide needs a paragraph, it is two slides.\nN+1       RECAP     the whole thing as a list. This is the screenshot slide.\nLAST      CTA       one action. Save, comment a keyword, or follow. One.\n```\n\n## Slide copy rules\n\n- **The cover is 80% of the result.** Six words. Big. Nothing on the deck saves\n  a cover nobody swipes.\n- **Design for the grid crop.** The profile grid crops to a portrait rectangle\n  that is taller than it is wide, and the exact ratio has moved more than once.\n  Build at 1080x1350 and keep the cover text well inside the middle, clear of\n  the outer 120 pixels on every side, and the crop stops mattering.\n- **Number the slides** (3\u002F8). Completion goes up when people can see the end.\n- **No slide is a paragraph.** If it cannot be said in 25 words, split it.\n- **The recap slide is the one people screenshot and send.** Sends are the\n  strongest signal you can earn. Make it standalone and readable with no\n  context.\n- **The handle on every slide**, small, bottom corner. Screenshots travel\n  without you.\n- **Alt text on the cover at minimum.** It is read by screen readers and by\n  Instagram.\n\n## Building the files\n\nInstagram wants 1080x1350 (4:5), JPEG or PNG, up to 20 items. Build it as HTML\nand print each slide:\n\n```bash\n# one \u003Csection> per slide, 1080x1350, page-break-after: always\n# then Chrome headless --print-to-pdf, or any HTML-to-image you already use\n```\n\nWrite the HTML with `width:1080px; height:1350px`, a single accent colour, and\ntype no smaller than 32px, because this is read on a phone at a third of its\nreal size. If the project has a brand skill or a design system, use it and do\nnot invent a palette.\n\n## Output\n\nThe slide-by-slide copy first, as a numbered list the user can read in ten\nseconds and edit before anything is rendered. Then the **caption**, which for a\ncarousel is Job B in `\u002Fig-caption`: the caption is doing work here, because the\ncover has already used its six words.\n\nRun both through `\u002Fig-human`. Build the files only after the user approves the\ncopy.\n\n```\nCAROUSEL  ·  8 slides\n\n1  COVER   THE $18,000 CLAUSE\n           One line I now put in every contract.\n2  STAKE   I approved the work. They asked for the money back nine days later.\n3          WHAT IT SAYS\n           Payment on delivery, not on approval.\n...\n7  RECAP   All four lines, in order.\n8  CTA     Comment CONTRACT and I will send the full clause.\n\nCaption: Job B, hook in line 1, one ask, 3 tags.\n```\n\nNothing is uploaded. The user posts it.\n",{"name":5,"description":7},"main","563fd9d0d01a7240bf22073090c9484e9070e8e8","external\u002Fig-carousel",0,"https:\u002F\u002Fgithub.com\u002Fsgomez-dev\u002Fclaude-skills","https:\u002F\u002Fgithub.com\u002Fsgomez-dev","https:\u002F\u002Fsgomez.dev","\"Volnuratus non victus\"","2026-10-01 18:25:47",{"source":8,"skillName":5,"commands":52,"prompt":62,"zipAvailable":63},[53,56,59],{"tool":54,"command":55},"npx","npx skills add sgomez-dev\u002Fclaude-skills --skill ig-carousel",{"tool":57,"command":58},"bunx","bunx skills add sgomez-dev\u002Fclaude-skills --skill ig-carousel",{"tool":60,"command":61},"pnpm","pnpm dlx skills add sgomez-dev\u002Fclaude-skills --skill ig-carousel","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsgomez-dev\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fexternal\u002Fig-carousel\u002FSKILL.md",true,[65,70],{"path":66,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":69},"LICENSE","许可证",1073,"https:\u002F\u002Fgithub.com\u002Fsgomez-dev\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fexternal\u002Fig-carousel\u002FLICENSE",{"path":71,"resourceType":72,"resourceTypeDesc":73,"sizeBytes":74,"sourceHtmlUrl":75},"UPSTREAM.md","REFERENCE","参考文档",803,"https:\u002F\u002Fgithub.com\u002Fsgomez-dev\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fexternal\u002Fig-carousel\u002FUPSTREAM.md",[77,88,96,108,122,131],{"skillNo":78,"name":79,"nameZh":6,"description":80,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":83,"publishedAt":37},"01M6J8Q0WEP76PV381RJDTRTV4","template","YOUR_DESCRIPTION_HERE (shown in command palette, keep under 80 chars)","https:\u002F\u002Fgithub.com\u002Fsgomez-dev\u002Fclaude-skills\u002Fblob\u002Fmain\u002Ftemplate\u002FSKILL.md",[],[79,84,85,86,87],"command palette","command","palette","keep",{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":94,"publishedAt":37},"01M6J8PY4KNE7SQP5BD2X1YMHJ","multi","Line one continues here.   Second sentence.","https:\u002F\u002Fgithub.com\u002Fsgomez-dev\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fsite\u002Ftests\u002Ffixtures\u002Frepo\u002Fexternal\u002Fmulti\u002FSKILL.md",[],[90,95],"line",{"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":37},"01M6J8PVS7AY0AWP36JRQ7T8S6","ffmpeg","FFmpeg recipes for video production.","https:\u002F\u002Fgithub.com\u002Fsgomez-dev\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fsite\u002Ftests\u002Ffixtures\u002Frepo\u002Fexternal\u002Fffmpeg\u002FSKILL.md",[],[98,103,104,105,106,107],"Production","Video","video production","recipes","for",{"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":119,"publishedAt":37},"01M6J8PS6NDT2VY6Y72QW3NGGH","secret-skill","Private, never published.","https:\u002F\u002Fgithub.com\u002Fsgomez-dev\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fsite\u002Ftests\u002Ffixtures\u002Frepo\u002Fexternal\u002F.local\u002Fsecret-skill\u002FSKILL.md",[114],{"categoryNo":115,"categoryName":116,"taxonomyType":117,"taxonomyTypeDesc":118},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[120,121],"secret skill","never",{"skillNo":123,"name":124,"nameZh":6,"description":125,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":126,"categories":127,"keywords":128,"publishedAt":37},"01M6J8PQETD1FW6BWPPSWXFH5N","external-no-license","Has no license.","https:\u002F\u002Fgithub.com\u002Fsgomez-dev\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fsite\u002Ftests\u002Ffixtures\u002Frepo\u002Fbroken\u002Fexternal-no-license\u002FSKILL.md",[],[129,130],"license","external no license",{"skillNo":132,"name":133,"nameZh":6,"description":134,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":135,"categories":136,"keywords":148,"publishedAt":37},"01M6J8PJ5XGMZZZZGECEDHN13J","write-swift","How to write modern Swift well — modeling with value types, Swift 6 data-race safety and approachable concurrency (@concurrent, main-actor-by-default, actors, task groups), protocols and generics (some vs any), API design, performance and ARC, Swift Testing, macros, and the modern language features agents don't know about yet. Use when writing, reviewing, or migrating Swift, or when a concurrency error, a hang, a data race, a retain cycle, or a performance problem needs fixing.","https:\u002F\u002Fgithub.com\u002Fsgomez-dev\u002Fclaude-skills\u002Fblob\u002Fmain\u002Fexternal\u002Fwrite-swift\u002FSKILL.md",[137,140,143],{"categoryNo":138,"categoryName":139,"taxonomyType":117,"taxonomyTypeDesc":118},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":141,"categoryName":142,"taxonomyType":117,"taxonomyTypeDesc":118},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":144,"categoryName":145,"taxonomyType":146,"taxonomyTypeDesc":147},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[149,150,151,152,153,154,155,156,157,158,159,160,42,161,162,163,164,165,166,167],"swift","write","write swift","features","retain","testing","types","error","how to","problem","modeling","cycle","default","how","api","concurrency","performance","writing","design"]