{"id":56038,"plugin_id":"plugin_asdk_app_6ada7bec545881919206a8cf89db59f8","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-26T18:06:28.387Z","digest":"786329776ff40cbb32707a5935d7f378b131b4857300a65da06ad951acda8cc8","against":null,"payload":{"description":"Static ads: platform-native single ads and multi-size display banner sets (IAB) — one message across sizes, exported together.","included_files":[{"relative_path":"references/ads.md","size_in_bytes":6686},{"relative_path":"references/charts.md","size_in_bytes":5659},{"relative_path":"references/design-quality.md","size_in_bytes":22265},{"relative_path":"references/edit-code.md","size_in_bytes":16488},{"relative_path":"references/export.md","size_in_bytes":7949},{"relative_path":"references/gotchas.md","size_in_bytes":8693},{"relative_path":"references/markup.md","size_in_bytes":23958},{"relative_path":"references/multi-unit-workflow.md","size_in_bytes":13300},{"relative_path":"references/no-brand-design.md","size_in_bytes":14257},{"relative_path":"references/omni-and-media.md","size_in_bytes":7338},{"relative_path":"references/social-craft.md","size_in_bytes":12086}],"name":"moda-social-ads","skill_md_contents":"---\nname: moda-social-ads\ndescription: >-\n  Static ads: platform-native single ads and multi-size display banner sets\n  (IAB) — one message across sizes, exported together.\n---\n\n# moda-social-ads\n\n**PREREQUISITE — `load_skill(\"moda-core\")` once per session** (step-0, write\ncontract, free/metered map). Already loaded? Skip ahead. If you cannot load\nit, the non-negotiables: call `moda_bootstrap` before anything; `brand_list`\nbefore creating; revision-guarded writes use `expected_revision` from your last read.\n`canvas_edit_image` captures its own target state and has no revision argument.\nOn `stale_revision`, re-read and retry once; send the canvas link\nthe moment it exists; stuck or failed? `ask_expert(\"<question>\")` — free and\nfast, never guess.\n\n## Sizes and defaults\n\nThe IAB core set (`category='web-ads'`), plus any size the user names:\n\n| Size | Role | Notes |\n|---|---|---|\n| 300×250 | medium rectangle | the workhorse — design the MASTER here |\n| 728×90 | leaderboard | hostile: one line, logo, CTA — nothing else |\n| 160×600 | skyscraper | vertical stack, CTA at the bottom |\n| 300×600 | half page | the roomy one; the master usually scales here first |\n| 320×50 | mobile banner | hostile: type only, 4–6px off every edge |\n| 970×250 | billboard | the only size with room for imagery |\n\nPlatform-native single ads (`category='web-ads'` or `'social'`): IG story ad\n1080×1920 (bottom reserved from y 1400 for CTA chrome), Facebook feed ad\n1200×628, IG feed ad 1080×1080 or 1080×1350.\n\nCraft, in one pass: the Rule of One — one audience, one promise, one ask.\nHierarchy is hook → brand → CTA, with brand and CTA both visible; the CTA is\nbutton-shaped and the highest-contrast element (\"See the demo\", never \"Learn\nmore\"). Keep type and CTA 8–10px off every edge — networks add a border at\nserve time. Photography rarely survives these sizes: prefer solid colour,\ngradients, shapes, type, and generated patterns.\n\n## Recipe — the size set (master first)\n\n1. `canvas_create(name='[Campaign] — ads', intent='[the one promise]', width=300, height=250, category='web-ads', brand_kit_id='[KIT]')` — send the link immediately.\n2. Design and APPROVE the master on page 1: `canvas_apply_markup(canvas_ref, page, markup, screenshot=true)`, then at most one repair write. Do not adapt anything until the master is right.\n3. Add one page per size in `canvas_edit` code (`create('page', { width: 728, height: 90 })`), repeated for each size in the set, then re-read for the fresh page ids.\n4. Re-COMPOSE each size (never squash): one markup apply per page, serial on the\n   one canvas — the same message, re-laid for the shape. Check the two hostile\n   sizes (728×90, 320×50) first; they break layouts before the others do.\n5. `canvas_screenshot(canvas_ref, pages=[IDS])` in ≤3-page batches; judge the set\n   for one voice, one CTA, one brand presence. ONE repair round, then export.\n6. `export(canvas_ref, format='png', pixel_ratio=2)` — a multi-page png export\n   arrives as one zip: the set ships together, one download for the trafficker.\n\n## Recipe — one platform-native ad\n\n1. `canvas_create(name='[Campaign] — [placement]', intent='[the one promise]', width=[W], height=[H], category='web-ads', brand_kit_id='[KIT]')` — link immediately.\n2. Write the idea in one sentence first: \"For [audience], [brand] is the\n   [category] that [single claim].\" Kill every secondary message.\n3. Author in ONE apply; keep the CTA inside the placement's chrome-free zone.\n4. `canvas_screenshot(canvas_ref)` — squint test: blurred, does it still\n   show what it is for and where the eye lands? Fix what fails in at most ONE repair write, captured the same way, then ship.\n5. `export(canvas_ref, format='png', pixel_ratio=2)` — hand over the link.\n\n## Examples\n\n- \"banner ads in the standard sizes\" → size-set recipe, IAB core, one zip.\n- \"an Instagram ad for the spring sale\" → platform-native recipe at 1080×1350.\n- \"just a 728×90 and a 300×250\" → size-set recipe with those two pages only.\n- \"an animated banner ad\" → not this skill: load moda-video (motion wins).\n\n## Errors\n\nAny typed error → load moda-core and read its recovery reference.\n`canvas_busy` is likeliest here (many pages, many applies): applies to one\ncanvas stay SERIAL — they serialize on the server anyway, so fanning them out\nbuys nothing and can come back busy.\n\n## Make it recurring\n\nA campaign refresh on a cadence → moda-automate; the approved size-set skeleton\n→ moda-templates, so the next campaign starts at step 4.\n\nSee also: moda-social — organic posts, carousels, one-off graphics ·\nmoda-core — the contract, recovery, everything Moda can do.\n\n## References\n\n| Doc | Load when |\n|---|---|\n| references/ads.md | depth: IAB set, per-size composition patterns, CTA and stopping power |\n| references/markup.md | before any markup apply |\n| references/export.md | zip semantics, pixel ratio, warnings |\n| references/no-brand-design.md | no kit is active — inventing the identity: palette law, type, imagery, layout system |\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}