From utopia-studio-cobuild-brand
Design social media assets with Efecto — Instagram posts, carousels, stories, YouTube thumbnails, TikTok covers, Twitter/X images, LinkedIn slides, Pinterest pins, and Facebook graphics. Use when asked to "design a post", "create a carousel", "make a thumbnail", "design social media", or any social content task. Requires Efecto MCP server.
How this skill is triggered — by the user, by Claude, or both
Slash command
/utopia-studio-cobuild-brand:efecto-social-mediaThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Design social media assets — Instagram, YouTube, TikTok, Twitter/X, LinkedIn, Pinterest, Facebook — using the Efecto design tool. Proper sizing, bold typography, and platform-specific best practices.
Design social media assets — Instagram, YouTube, TikTok, Twitter/X, LinkedIn, Pinterest, Facebook — using the Efecto design tool. Proper sizing, bold typography, and platform-specific best practices.
This skill requires the Efecto MCP server. Check if it's available by looking for tools like create_session, add_section, or get_document in your tool list.
If Efecto tools are NOT available, install the MCP server:
claude mcp add efecto -- npx -y @efectoapp/mcp
Add to .cursor/mcp.json:
{
"mcpServers": {
"efecto": {
"command": "npx",
"args": ["-y", "@efectoapp/mcp"]
}
}
}
{
"mcpServers": {
"efecto": {
"command": "npx",
"args": ["-y", "@efectoapp/mcp"]
}
}
}
Once installed, you'll have access to 46 design tools plus a standalone image search tool. The MCP server connects your agent to the Efecto design canvas at efecto.app.
create_session)Every design starts with a session:
create_session label: "Instagram Carousel"
Returns { sessionId, designUrl }. Tell the user to open the URL, then poll session_status until browserConnected: true.
The primary workflow is: create artboard → add sections with JSX → refine with updates.
# 1. Create an artboard (Instagram post example)
create_artboard name: "Slide 1" width: 1080 height: 1080 backgroundColor: "#111827" className: "flex flex-col"
# 2. Add content with JSX
add_section parentId: "<artboard-id>" jsx: '<section className="flex flex-col items-center justify-center gap-8 p-16 w-full h-full">
<h1 className="text-7xl font-extrabold text-white text-center leading-none">Stop designing like it's 2020</h1>
<p className="text-xl text-gray-400 font-medium">Swipe for 5 rules -></p>
</section>'
# 3. Duplicate artboard for carousel slides
duplicate_artboard artboardId: "<artboard-id>" newName: "Slide 2"
# 4. Read state and batch-update the duplicate
get_document
batch_update updates: [
{ nodeId: "abc", textContent: "01" },
{ nodeId: "def", textContent: "White space is not wasted space" }
]
| Category | Tools |
|---|---|
| Session | create_session, wait_for_connection, session_status, close_session |
| Reading | get_document, get_selection, get_node_tree, list_artboards, find_nodes |
| Creating | create_artboard, add_section, add_node |
| Modifying | update_node, update_class, update_artboard, batch_update, replace_section |
| Organizing | move_node, duplicate_node, duplicate_artboard, group_nodes, ungroup_node, reorder_node |
| Selection | select_nodes, deselect_all, set_visibility, delete_nodes, delete_artboard |
| Alignment | align_nodes, distribute_nodes |
| Fill & Export | set_fill, export_image |
| Viewport | zoom_to_artboard, zoom_to_fit, set_viewport, move_artboard |
| Document | rename_document, new_document |
| History | undo, redo |
| Theme | get_theme, set_theme, set_theme_mode, reset_theme |
| Quality | audit_design, repair_design |
add_sectionWrite standard HTML tags with Tailwind className. The tag determines the node type:
<div>/<section>/<nav> → frame <img> → image
<h1>-<h6>/<p>/<span> → text <button> → button
<a> → link <svg> → icon
<input> → input <video> → video
Icons: <svg icon="arrow-right" className="w-5 h-5 text-gray-600" />
className must include flex flex-col — without it, children overlap at (0,0)backgroundColor is a property, NOT a className — use backgroundColor: "#111827", not className: "bg-gray-900"bg-[#f9f9f9] silently fails. Use named colors (bg-gray-50) or inline stylegrow instead of flex-1 — flex-1 doesn't work in Efecto<span> + <svg> insteadw-full on direct children of artboardsduplicate_artboard to create slides, then batch_update to change content per slideUse search_images to find free, high-quality stock photos from Lummi. No session required — call it anytime.
search_images
query: "team celebration"
orientation: "square"
luminance: "bright"
limit: 4
Then apply images to your designs:
add_node with type: "image", src: "<url>", alt: "...", className: "w-full h-full object-cover"set_fill with fill: { type: "image", url: "<url>", size: "cover" }<img src="<url>" alt="..." className="w-full h-full object-cover" />Tips for social media: Match orientation to the platform format — square for Instagram/LinkedIn posts, vertical for Stories/Reels/TikTok, horizontal for YouTube thumbnails/Twitter. Use luminance: "dark" for dramatic social content. Real photos make social media content feel authentic — avoid empty placeholder boxes.
Make social media content stand out with shader nodes. Use add_node with type: "shader".
Eye-catching backgrounds without images — perfect for quote cards, carousels, and story slides:
add_node
parentId: "<artboard-id>"
type: "shader"
shaderType: "meshGradient"
className: "w-full h-full"
Shader types: meshGradient (organic), liquidMetal (premium), chrome (bold), pulsar (energy), particles (ambient), fireworks (celebration).
Process images with ASCII, dither, halftone, or glitch effects for scroll-stopping visuals:
search_images query: "team photo" orientation: "square" limit: 1
add_node
parentId: "<artboard-id>"
type: "shader"
inputType: "image"
mediaInput: { mediaUrl: "<url>", mediaType: "image", objectFit: "cover" }
effectId: "ascii-standard"
effectEnabled: true
className: "w-full h-full"
Best effects for social: ascii-standard (tech/dev content), dither-atkinson (retro), halftone-mono (print/zine), glitch-vhs (nostalgic), art-kuwahara (painterly), glitch-digital (edgy).
Add film grain, vignette, or scanlines for texture:
postProcesses: [
{ type: "grain", enabled: true, settings: { intensity: 0.3 } },
{ type: "scanlines", enabled: true, settings: { intensity: 0.2 } }
]
When you design a website, you're writing for someone who stopped scrolling and is reading. On social media, you have 1-2 seconds to communicate before they scroll past. This changes everything:
text-base paragraph that's perfectly legible on a website becomes unreadable squished into an Instagram card. Default to text-xl or text-2xl where you'd normally use text-base.Choose font sizes based on the role, not a formula. The canvas is large (1080px+) but the content is consumed small — so sizes need to be generous.
| Role | Size | Weight | Example |
|---|---|---|---|
| Hero / Impact | text-7xl to text-8xl | font-extrabold or font-black | A single punchy statement |
| Slide headline | text-4xl to text-5xl | font-bold or font-extrabold | The main point of each slide |
| Supporting text | text-2xl to text-3xl | font-medium or font-normal | One sentence of context |
| Labels / tags | text-lg to text-xl | font-semibold | Category labels, @handles |
| Smallest allowed | text-lg | any | Nothing smaller than this. Ever. |
Key insight: Where you'd use text-base on a website, use text-xl on social. Where you'd use text-2xl for a web heading, use text-4xl to text-5xl on social. It's not scaling — it's choosing the right size for a medium that gets consumed at 1/3 the designed resolution.
Social media copy is NOT web copy. Write like a creative director at a streetwear brand, not a SaaS marketing team.
Rules:
Bad (website brain):
"Our comprehensive platform provides teams with everything they need to design, build, and deploy modern web applications efficiently."
Good (social media brain):
"Design. Build. Ship."
| Format | Width | Height | Use Case |
|---|---|---|---|
| Post (Square) | 1080 | 1080 | Feed posts, single images |
| Portrait Post | 1080 | 1350 | Feed posts (more screen real estate) |
| Story / Reel | 1080 | 1920 | Stories, Reels, vertical video covers |
| Carousel Slide | 1080 | 1080 | Each slide in a carousel |
| Carousel (Portrait) | 1080 | 1350 | Carousel, portrait format |
// Slide 1 — Hook (bold, minimal, scroll-stopping)
<section className="flex flex-col items-center justify-center gap-8 p-16 bg-gray-900 w-full h-full">
<h1 className="text-7xl font-extrabold text-white text-center leading-none tracking-tight">Stop designing like it's 2020</h1>
<p className="text-xl text-gray-400 font-medium">Swipe for 5 rules -></p>
</section>
// Slide 2-N — Content (one idea, big number, short text)
<section className="flex flex-col justify-center gap-8 p-16 bg-gray-900 w-full h-full">
<span className="text-8xl font-black text-blue-400">01</span>
<h2 className="text-4xl font-bold text-white leading-snug">White space is not wasted space</h2>
<p className="text-2xl text-gray-400 leading-relaxed">Let your design breathe. Cramped layouts feel amateur.</p>
</section>
// Last Slide — CTA (simple, direct)
<section className="flex flex-col items-center justify-center gap-6 p-16 bg-gray-900 w-full h-full">
<h2 className="text-5xl font-extrabold text-white text-center">Found this useful?</h2>
<p className="text-3xl text-blue-400 font-bold text-center">Save it. Share it.</p>
<p className="text-xl text-gray-500 font-medium">@yourbrand</p>
</section>
<section className="flex flex-col items-center justify-center gap-10 px-12 py-24 bg-gray-900 w-full h-full">
<span className="text-xl font-semibold text-blue-400 uppercase tracking-widest">New drop</span>
<h1 className="text-5xl font-extrabold text-white text-center leading-tight">Your bold statement here</h1>
<p className="text-2xl text-gray-400 text-center leading-relaxed max-w-[900px]">One short sentence of context.</p>
<button className="px-10 py-5 text-xl font-bold text-gray-900 bg-white rounded-2xl">See more</button>
</section>
| Format | Width | Height | Use Case |
|---|---|---|---|
| Thumbnail | 1280 | 720 | Video thumbnail (16:9) |
| Channel Banner | 2560 | 1440 | Channel art (safe area: 1546x423 center) |
| End Screen | 1280 | 720 | End screen overlay |
| Community Post | 1080 | 1080 | Community tab image |
YouTube thumbnails are the most competitive visual format on the internet. They render at ~200px wide in sidebar suggestions and ~360px in search results.
text-6xl to text-8xl font-black. If you can't read it at 200px wide, it's too small.font-bold or heavier. Thin type disappears.<section className="flex items-center gap-8 p-12 bg-blue-600 w-full h-full">
<div className="flex flex-col gap-4 grow">
<h1 className="text-7xl font-black text-white leading-none uppercase">Stop doing this</h1>
<p className="text-3xl font-bold text-blue-200">5 design mistakes</p>
</div>
<div className="w-[400px] h-[400px] bg-blue-800 rounded-3xl"></div>
</section>
// Safe area is center 1546x423 — keep all important content there
<section className="flex flex-col items-center justify-center gap-4 p-16 bg-gray-900 w-full h-full">
<h1 className="text-6xl font-extrabold text-white tracking-tight">Your Channel Name</h1>
<p className="text-2xl text-gray-400 font-medium">Design tips every week</p>
</section>
| Format | Width | Height | Use Case |
|---|---|---|---|
| Video Cover | 1080 | 1920 | Video thumbnail / cover image |
| Profile Photo | 200 | 200 | Account avatar |
text-5xl to text-7xl for headlines, nothing below text-xl<section className="flex flex-col items-center justify-center gap-8 px-12 py-48 bg-gray-900 w-full h-full">
<span className="px-6 py-2 text-lg font-bold text-white bg-red-500 rounded-full uppercase">Part 3</span>
<h1 className="text-5xl font-extrabold text-white text-center leading-tight">The trick nobody talks about</h1>
<p className="text-2xl text-gray-400 text-center">Watch till the end</p>
</section>
| Format | Width | Height | Use Case |
|---|---|---|---|
| Standard Pin | 1000 | 1500 | Standard pin (2:3 ratio) |
| Long Pin | 1000 | 2100 | Infographic / tall pin |
| Square Pin | 1000 | 1000 | Square format |
| Board Cover | 600 | 600 | Board thumbnail |
<section className="flex flex-col items-center justify-between gap-8 px-12 py-16 bg-amber-50 w-full h-full">
<div className="flex flex-col items-center gap-6">
<span className="text-lg font-bold text-amber-700 uppercase tracking-widest">Free Guide</span>
<h1 className="text-5xl font-extrabold text-gray-900 text-center leading-tight">10 Design Rules Every Beginner Needs</h1>
<p className="text-2xl text-gray-600 text-center">Save this pin for later</p>
</div>
<div className="w-full h-[500px] bg-amber-100 rounded-3xl"></div>
<p className="text-xl font-semibold text-amber-700">yourdomain.com</p>
</section>
| Format | Width | Height | Use Case |
|---|---|---|---|
| Post Image | 1200 | 630 | Shared image / link preview |
| Cover Photo | 1640 | 856 | Page cover (safe: center 820x312) |
| Event Cover | 1920 | 1005 | Event banner |
| Story | 1080 | 1920 | Facebook Story |
| Ad (Square) | 1080 | 1080 | Feed ad |
| Ad (Landscape) | 1200 | 628 | Feed ad, landscape |
<section className="flex items-center gap-12 p-16 bg-white w-full h-full">
<div className="flex flex-col gap-4 grow">
<span className="text-xl font-semibold text-blue-600 uppercase tracking-wide">Announcement</span>
<h1 className="text-5xl font-extrabold text-gray-900 leading-tight">We just launched something big</h1>
<p className="text-2xl text-gray-500">Link in comments</p>
</div>
<div className="w-[350px] h-[350px] bg-blue-100 rounded-3xl"></div>
</section>
| Format | Width | Height | Use Case |
|---|---|---|---|
| Image post | 1200 | 675 | Standard tweet image (16:9) |
| Card image | 1200 | 628 | Link preview card |
| Banner | 1500 | 500 | Profile banner |
| Two-image post | 700 | 800 | Each image in 2-image tweet |
| Thread graphic | 1200 | 675 | Consistent visual for threads |
text-5xl to text-7xl font-extraboldtext-2xl to text-3xl max<section className="flex flex-col items-center justify-center gap-6 p-16 bg-gray-900 w-full h-full">
<h1 className="text-6xl font-extrabold text-white text-center leading-tight">Hot take incoming</h1>
<p className="text-2xl text-gray-400 text-center">Your bold opinion in one sentence.</p>
<p className="text-xl text-blue-400 font-semibold">@yourhandle</p>
</section>
| Format | Width | Height | Use Case |
|---|---|---|---|
| Post | 1200 | 1200 | Square feed post |
| Portrait post | 1080 | 1350 | Takes more feed space |
| Carousel slide | 1080 | 1080 | Document carousel |
| Banner | 1584 | 396 | Profile/company banner |
| Article cover | 1200 | 644 | Newsletter header |
// Cover slide
<section className="flex flex-col items-center justify-center gap-8 p-16 bg-white w-full h-full border-2 border-gray-100">
<span className="text-xl font-semibold text-blue-600">Your Name | Topic</span>
<h1 className="text-5xl font-extrabold text-gray-900 text-center leading-tight">7 lessons from building a design system</h1>
<p className="text-2xl text-gray-500 text-center">A thread. Slide -></p>
</section>
// Content slide
<section className="flex flex-col justify-center gap-8 p-16 bg-white w-full h-full border-2 border-gray-100">
<span className="text-7xl font-black text-blue-600">01</span>
<h2 className="text-4xl font-bold text-gray-900 leading-snug">Start with your constraints, not your aspirations</h2>
<p className="text-2xl text-gray-500 leading-relaxed">A design system for 3 engineers looks nothing like one for 300.</p>
<p className="text-lg text-gray-400 font-medium">Your Name</p>
</section>
p-12 to p-16 minimum — don't crowd the edgesjustify-center on slides — content should sit in the middle, not hang from the topw-full h-full on top-level sections to fill the artboard completely| Platform | Best Format | Text Style | Vibe |
|---|---|---|---|
| 1080x1350 portrait | Bold, centered | Visual-first, aesthetic | |
| YouTube | 1280x720 thumbnail | Massive, high-contrast | Clickbait energy, faces |
| TikTok | 1080x1920 vertical | Bold with safe zones | Fast, punchy, trending |
| 1000x1500 tall | Warm, clear overlay | Aspirational, search-driven | |
| 1200x630 landscape | Clean, readable | Broad audience, shareable | |
| Twitter/X | 1200x675 landscape | One-liner, bold | Opinionated, minimal |
| 1080x1080 square | Professional-bold | Thought leadership, clean |
npx claudepluginhub the-utopia-studio/skills --plugin utopia-studio-cobuild-brandProvides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.