moda-social-ads
PREREQUISITE — load moda-core once per session (step-0, write contract,
free/metered map). Already loaded? Skip ahead. If you cannot load it, the
non-negotiables: run moda doctor --json before anything; moda brand list
before creating; writes that pin a revision use your last read's — on
stale_revision, re-read and retry once (it heals); send the canvas link the
moment it exists; stuck or failed? moda ask "<question>" — free and fast,
never guess.
Sizes and defaults
The IAB core set (--category web-ads), plus any size the user names:
| Size |
Role |
Notes |
| 300×250 |
medium rectangle |
the workhorse — design the MASTER here |
| 728×90 |
leaderboard |
hostile: one line, logo, CTA — nothing else |
| 160×600 |
skyscraper |
vertical stack, CTA at the bottom |
| 300×600 |
half page |
the roomy one; the master usually scales here first |
| 320×50 |
mobile banner |
hostile: type only, 4–6px off every edge |
| 970×250 |
billboard |
the only size with room for imagery |
Platform-native single ads (--category web-ads or social): IG story ad
1080×1920 (bottom reserved from y 1400 for CTA chrome), Facebook feed ad
1200×628, IG feed ad 1080×1080 or 1080×1350.
Craft, in one pass: the Rule of One — one audience, one promise, one ask.
Hierarchy is hook → brand → CTA, with brand and CTA both visible; the CTA is
button-shaped and the highest-contrast element ("See the demo", never "Learn
more"). Keep type and CTA 8–10px off every edge — networks add a border at
serve time. Photography rarely survives these sizes: prefer solid colour,
gradients, shapes, type, and generated patterns.
Recipe — the size set (master first)
moda canvas create --name "[Campaign] — ads" --intent "[the one promise]" --size 300x250 --category web-ads --brand [KIT] — send the link immediately.
- Design and APPROVE the master on page 1:
moda canvas markup [CANVAS_REF] --file - --page [PAGE_ID], then moda canvas screenshot [CANVAS_REF]. Do not adapt anything until the master is right.
moda canvas add-pages [CANVAS_REF] --count 1 --size 728x90 — one page per size, repeated for each size in the set.
- Re-COMPOSE each size (never squash): one markup apply per page, serial on the
one canvas — the same message, re-laid for the shape. Check the two hostile
sizes (728×90, 320×50) first; they break layouts before the others do.
moda canvas screenshot [CANVAS_REF] in ≤3-page batches; judge the set for
one voice, one CTA, one brand presence.
moda export [CANVAS_REF] --format png --pixel-ratio 2 -o [campaign]-ads.zip
— multi-page png arrives as a zip: the set ships together, one file for the
trafficker.
Recipe — one platform-native ad
moda canvas create --name "[Campaign] — [placement]" --intent "[the one promise]" --size [WxH] --category web-ads --brand [KIT] — link immediately.
- Write the idea in one sentence first: "For [audience], [brand] is the
[category] that [single claim]." Kill every secondary message.
- Author in ONE apply; keep the CTA inside the placement's chrome-free zone.
moda canvas screenshot [CANVAS_REF] — squint test: blurred, does it still
show what it is for and where the eye lands? Fix, re-screenshot.
moda export [CANVAS_REF] --format png --pixel-ratio 2 -o [campaign]-[size].png.
Examples
- "banner ads in the standard sizes" → size-set recipe, IAB core, one zip.
- "an Instagram ad for the spring sale" → platform-native recipe at 1080×1350.
- "just a 728×90 and a 300×250" → size-set recipe with those two pages only.
- "an animated banner ad" → not this skill: load moda-video (motion wins).
Errors
Any typed error → load moda-core and read its recovery reference.
canvas_busy is likeliest here (many pages, many applies): applies to one
canvas stay SERIAL — they serialize on the server anyway, so fanning them out
buys nothing and can come back busy.
Make it recurring
A campaign refresh on a cadence → moda-automate; the approved size-set skeleton
→ moda-templates, so the next campaign starts at step 4.
See also: moda-social — organic posts, carousels, one-off graphics ·
moda-core — the contract, recovery, everything Moda can do.
References
| Doc |
Load when |
| references/ads.md |
depth: IAB set, per-size composition patterns, CTA and stopping power |
| references/markup.md |
before any markup apply |
| references/export.md |
zip semantics, pixel ratio, warnings |
| references/no-brand-design.md |
no kit is active — inventing the identity: palette law, type, imagery, layout system |
1---2name: moda-social-ads3description: Static ads: platform-native single ads and multi-size display banner sets (IAB) — one message across sizes, exported together.4---56# moda-social-ads78<!-- moda:banner -->9**PREREQUISITE — load `moda-core` once per session** (step-0, write contract,10free/metered map). Already loaded? Skip ahead. If you cannot load it, the11non-negotiables: run `moda doctor --json` before anything; `moda brand list`12before creating; writes that pin a revision use your last read's — on13`stale_revision`, re-read and retry once (it heals); send the canvas link the14moment it exists; stuck or failed? `moda ask "<question>"` — free and fast,15never guess.16<!-- /moda:banner -->1718## Sizes and defaults1920The IAB core set (`--category web-ads`), plus any size the user names:2122| Size | Role | Notes |23|---|---|---|24| 300×250 | medium rectangle | the workhorse — design the MASTER here |25| 728×90 | leaderboard | hostile: one line, logo, CTA — nothing else |26| 160×600 | skyscraper | vertical stack, CTA at the bottom |27| 300×600 | half page | the roomy one; the master usually scales here first |28| 320×50 | mobile banner | hostile: type only, 4–6px off every edge |29| 970×250 | billboard | the only size with room for imagery |3031Platform-native single ads (`--category web-ads` or `social`): IG story ad321080×1920 (bottom reserved from y 1400 for CTA chrome), Facebook feed ad331200×628, IG feed ad 1080×1080 or 1080×1350.3435Craft, in one pass: the Rule of One — one audience, one promise, one ask.36Hierarchy is hook → brand → CTA, with brand and CTA both visible; the CTA is37button-shaped and the highest-contrast element ("See the demo", never "Learn38more"). Keep type and CTA 8–10px off every edge — networks add a border at39serve time. Photography rarely survives these sizes: prefer solid colour,40gradients, shapes, type, and generated patterns.4142## Recipe — the size set (master first)43441. `moda canvas create --name "[Campaign] — ads" --intent "[the one promise]" --size 300x250 --category web-ads --brand [KIT]` — send the link immediately.452. Design and APPROVE the master on page 1: `moda canvas markup [CANVAS_REF] --file - --page [PAGE_ID]`, then `moda canvas screenshot [CANVAS_REF]`. Do not adapt anything until the master is right.463. `moda canvas add-pages [CANVAS_REF] --count 1 --size 728x90` — one page per size, repeated for each size in the set.474. Re-COMPOSE each size (never squash): one markup apply per page, serial on the48 one canvas — the same message, re-laid for the shape. Check the two hostile49 sizes (728×90, 320×50) first; they break layouts before the others do.505. `moda canvas screenshot [CANVAS_REF]` in ≤3-page batches; judge the set for51 one voice, one CTA, one brand presence.526. `moda export [CANVAS_REF] --format png --pixel-ratio 2 -o [campaign]-ads.zip`53 — multi-page png arrives as a zip: the set ships together, one file for the54 trafficker.5556## Recipe — one platform-native ad57581. `moda canvas create --name "[Campaign] — [placement]" --intent "[the one promise]" --size [WxH] --category web-ads --brand [KIT]` — link immediately.592. Write the idea in one sentence first: "For [audience], [brand] is the60 [category] that [single claim]." Kill every secondary message.613. Author in ONE apply; keep the CTA inside the placement's chrome-free zone.624. `moda canvas screenshot [CANVAS_REF]` — squint test: blurred, does it still63 show what it is for and where the eye lands? Fix, re-screenshot.645. `moda export [CANVAS_REF] --format png --pixel-ratio 2 -o [campaign]-[size].png`.6566## Examples6768- "banner ads in the standard sizes" → size-set recipe, IAB core, one zip.69- "an Instagram ad for the spring sale" → platform-native recipe at 1080×1350.70- "just a 728×90 and a 300×250" → size-set recipe with those two pages only.71- "an animated banner ad" → not this skill: load moda-video (motion wins).7273## Errors7475Any typed error → load moda-core and read its recovery reference.76`canvas_busy` is likeliest here (many pages, many applies): applies to one77canvas stay SERIAL — they serialize on the server anyway, so fanning them out78buys nothing and can come back busy.7980## Make it recurring8182A campaign refresh on a cadence → moda-automate; the approved size-set skeleton83→ moda-templates, so the next campaign starts at step 4.8485See also: moda-social — organic posts, carousels, one-off graphics ·86moda-core — the contract, recovery, everything Moda can do.8788## References8990| Doc | Load when |91|---|---|92| references/ads.md | depth: IAB set, per-size composition patterns, CTA and stopping power |93| references/markup.md | before any markup apply |94| references/export.md | zip semantics, pixel ratio, warnings |95| references/no-brand-design.md | no kit is active — inventing the identity: palette law, type, imagery, layout system |