Install the belt CLI skill: npx skills add belt-sh/cli
Email Design
Design high-converting marketing emails with AI-generated visuals via inference.sh CLI.
Quick Start
Requires inference.sh CLI (belt). Install instructions
belt login
# Generate email header banner
belt app run infsh/html-to-image --input '{
"html": "<div style=\"width:600px;height:250px;background:linear-gradient(135deg,#667eea,#764ba2);display:flex;align-items:center;justify-content:center;font-family:system-ui;color:white;text-align:center\"><div><h1 style=\"font-size:36px;margin:0\">Spring Sale — 30% Off</h1><p style=\"font-size:18px;opacity:0.9\">This weekend only</p></div></div>"
}'
Email Width & Layout
| Constraint |
Value |
Why |
| Max width |
600px |
Gmail, Outlook rendering standard |
| Mobile width |
320-414px |
Responsive fallback |
| Single column |
Preferred |
Better mobile rendering |
| Two column |
Use sparingly |
Breaks on many clients |
| Image width |
600px max, 300px for 2-col |
Retina: provide 2x (1200px) |
| Font size (body) |
14-16px |
Below 14px is hard to read on mobile |
| Font size (heading) |
22-28px |
Must be scannable |
| Line height |
1.5 |
Readability on all devices |
The Inverted Pyramid Layout
The most effective email layout funnels attention to a single CTA:
┌──────────────────────────────────┐
│ HEADER IMAGE │ ← Brand/visual hook
│ (600 x 200-300) │
├──────────────────────────────────┤
│ │
│ Headline (one line) │ ← What's this about
│ │
│ 2-3 sentences of body copy │ ← Why should I care
│ explaining the value. │
│ │
│ ┌──────────────┐ │
│ │ CTA BUTTON │ │ ← One clear action
│ └──────────────┘ │
│ │
├──────────────────────────────────┤
│ Footer: Unsubscribe link │
└──────────────────────────────────┘
Subject Lines
Formulas That Work
| Formula |
Example |
Open Rate Impact |
| Number + benefit |
"5 ways to cut your build time in half" |
High |
| Question |
"Are you still deploying on Fridays?" |
High |
| How-to |
"How to automate your reports in 3 steps" |
Medium-High |
| Urgency (genuine) |
"Last day: 30% off annual plans" |
High (if real) |
| Personalized |
"[Name], your weekly report is ready" |
Very High |
| Curiosity gap |
"The one feature our users can't stop talking about" |
Medium-High |
Rules
| Rule |
Value |
| Length |
30-50 characters (mobile truncates at ~35) |
| Preview text |
First 40-100 chars after subject — design this intentionally |
| Emoji |
Max 1, at start or end, test with your audience |
| ALL CAPS |
Never — triggers spam filters |
| Spam trigger words |
Avoid: "free", "act now", "limited time", "click here" in subject |
| Personalization |
[First name] in subject lifts open rates 20%+ |
Preview Text
The preview text appears after the subject line in the inbox. Don't waste it.
❌ "View this email in your browser" (default, wasted space)
❌ "Having trouble viewing this?" (no one cares)
✅ Subject: "5 ways to cut build time"
Preview: "Number 3 saved us 6 hours per week"
✅ Subject: "Your monthly report is ready"
Preview: "Revenue up 23% — here's what drove it"
Email Types
Welcome Email (Automated, Day 0)
| Element |
Content |
| Subject |
"Welcome to [Product] — here's what's next" |
| Header |
Brand image or product screenshot |
| Body |
3-4 sentences: what they signed up for, what to expect, one quick win |
| CTA |
"Complete your setup" or "Try your first [action]" |
| Timing |
Immediately after signup |
Promotional / Campaign
| Element |
Content |
| Subject |
Benefit-focused, urgency if real |
| Header |
Hero image showing the offer/outcome |
| Body |
Problem → solution → offer → deadline |
| CTA |
"Get 30% Off" or "Start Free Trial" |
| Urgency |
Real deadline, not fake scarcity |
Product Update / Changelog
| Element |
Content |
| Subject |
"New: [Feature name] is here" |
| Header |
Screenshot or visual of the feature |
| Body |
What's new, why it matters, how to use it |
| CTA |
"Try [feature]" |
Transactional (Receipts, Confirmations)
| Rule |
Why |
| Clear purpose in subject |
"Your order #1234 is confirmed" |
| Minimal design |
Don't confuse with marketing |
| Key info above the fold |
Order number, amount, date |
| No promotional content (mostly) |
CAN-SPAM allows some, but keep minimal |
Header Image Design
# Welcome email header
belt app run infsh/html-to-image --input '{
"html": "<div style=\"width:600px;height:250px;background:linear-gradient(135deg,#2d3436,#636e72);display:flex;align-items:center;padding:40px;font-family:system-ui;color:white\"><div><p style=\"font-size:14px;text-transform:uppercase;letter-spacing:2px;opacity:0.7;margin:0\">Welcome to</p><h1 style=\"font-size:42px;margin:8px 0 0;font-weight:800\">DataFlow</h1><p style=\"font-size:18px;opacity:0.8;margin-top:4px\">Your data, automated</p></div></div>"
}'
# Sale / promotional header
belt app run infsh/html-to-image --input '{
"html": "<div style=\"width:600px;height:300px;background:linear-gradient(135deg,#e74c3c,#c0392b);display:flex;align-items:center;justify-content:center;font-family:system-ui;color:white;text-align:center\"><div><p style=\"font-size:20px;opacity:0.9;margin:0\">This Weekend Only</p><h1 style=\"font-size:72px;margin:8px 0;font-weight:900\">30% OFF</h1><p style=\"font-size:18px;opacity:0.8\">All annual plans. Ends Sunday.</p></div></div>"
}'
# Feature announcement header with AI visual
belt app run falai/flux-dev-lora --input '{
"prompt": "clean modern email header banner, abstract flowing data visualization, dark blue gradient background, subtle glowing nodes and connections, tech aesthetic, minimal, no text, 600x250 equivalent",
"width": 1200,
"height": 500
}'
CTA Buttons
| Rule |
Value |
| Width |
200-300px, not full width |
| Height |
44-50px minimum (tap target) |
| Color |
High contrast with background |
| Text |
Action verb + outcome: "Start Free Trial" |
| Shape |
Rounded corners (4-8px border-radius) |
| Placement |
Above the fold, repeated at bottom for long emails |
| Quantity |
ONE primary CTA per email |
Bulletproof Buttons
HTML buttons render differently across email clients. Use the "bulletproof button" technique (VML for Outlook, HTML/CSS for everything else):
<!-- Bulletproof button (works everywhere including Outlook) -->
<table cellpadding="0" cellspacing="0" border="0">
<tr>
<td align="center" bgcolor="#22c55e" style="border-radius:6px;">
<a href="https://yoursite.com/action" target="_blank"
style="font-size:16px;font-family:sans-serif;color:#ffffff;
text-decoration:none;padding:12px 24px;display:inline-block;
font-weight:bold;">
Start Free Trial
</a>
</td>
</tr>
</table>
Mobile Optimization
| Rule |
Why |
| Single column layout |
Multi-column breaks on mobile |
| Font minimum 14px |
Smaller is unreadable |
| CTA button minimum 44px tall |
Apple/Android tap target |
| Images scale to 100% width |
Prevent horizontal scroll |
| Stack elements vertically |
Side-by-side breaks on narrow screens |
| Test on Gmail app, Apple Mail, Outlook |
The big 3 email clients |
60%+ of emails are opened on mobile. Design mobile-first.
Deliverability Checklist
| Factor |
Rule |
| Image-to-text ratio |
Max 40% images, 60% text (spam filters flag image-heavy emails) |
| Alt text on images |
Always — images blocked by default in many clients |
| Unsubscribe link |
Required by law (CAN-SPAM, GDPR) — make it easy to find |
| From name |
Recognizable person or brand name |
| Reply-to |
Real address, not no-reply@ (hurts deliverability) |
| List hygiene |
Remove bounces, clean inactive subscribers quarterly |
| SPF/DKIM/DMARC |
Technical authentication — set up once, critical for inbox |
Common Mistakes
| Mistake |
Problem |
Fix |
| No preview text |
Shows "View in browser" or random code |
Set preview text intentionally |
| Image-only emails |
Blocked images = blank email + spam risk |
60%+ text, alt text on images |
| Multiple CTAs |
Decision paralysis, lower click rate |
One primary CTA per email |
| Tiny text |
Unreadable on mobile |
Minimum 14px body, 22px headings |
| no-reply@ sender |
Hurts deliverability, feels impersonal |
Use real reply address |
| No mobile testing |
Broken layout for 60%+ of readers |
Test on Gmail app + Apple Mail |
| Missing unsubscribe |
Illegal (CAN-SPAM) + spam complaints |
Clear unsubscribe link in footer |
| Over-designing |
Email clients render CSS inconsistently |
Simple layouts, inline styles |
| Fake urgency |
Erodes trust, trains users to ignore |
Only use real deadlines |
Related Skills
npx skills add inference-sh/skills@landing-page-design
npx skills add inference-sh/skills@ai-image-generation
npx skills add inference-sh/skills@prompt-engineering
Browse all apps: belt app list
1---2name: email-design3description: Email marketing design with layout patterns, subject line formulas, and deliverability rules. Covers welcome sequences, promotional emails, transactional templates, and mobile optimization. Use for: email marketing, newsletter design, drip campaigns, email templates, transactional emails. Triggers: email design, email template, email marketing, newsletter design, email layout, email campaign, drip campaign, welcome email, promotional email, transactional email, email subject line, email header image, email banner4---56> **Install the belt CLI skill:** `npx skills add belt-sh/cli`78# Email Design910Design high-converting marketing emails with AI-generated visuals via [inference.sh](https://inference.sh) CLI.1112## Quick Start1314> Requires inference.sh CLI (`belt`). [Install instructions](https://raw.githubusercontent.com/inference-sh/skills/refs/heads/main/cli-install.md)1516```bash17belt login1819# Generate email header banner20belt app run infsh/html-to-image --input '{21 "html": "<div style=\"width:600px;height:250px;background:linear-gradient(135deg,#667eea,#764ba2);display:flex;align-items:center;justify-content:center;font-family:system-ui;color:white;text-align:center\"><div><h1 style=\"font-size:36px;margin:0\">Spring Sale — 30% Off</h1><p style=\"font-size:18px;opacity:0.9\">This weekend only</p></div></div>"22}'23```242526## Email Width & Layout2728| Constraint | Value | Why |29|-----------|-------|-----|30| **Max width** | 600px | Gmail, Outlook rendering standard |31| **Mobile width** | 320-414px | Responsive fallback |32| **Single column** | Preferred | Better mobile rendering |33| **Two column** | Use sparingly | Breaks on many clients |34| **Image width** | 600px max, 300px for 2-col | Retina: provide 2x (1200px) |35| **Font size (body)** | 14-16px | Below 14px is hard to read on mobile |36| **Font size (heading)** | 22-28px | Must be scannable |37| **Line height** | 1.5 | Readability on all devices |3839### The Inverted Pyramid Layout4041The most effective email layout funnels attention to a single CTA:4243```44┌──────────────────────────────────┐45│ HEADER IMAGE │ ← Brand/visual hook46│ (600 x 200-300) │47├──────────────────────────────────┤48│ │49│ Headline (one line) │ ← What's this about50│ │51│ 2-3 sentences of body copy │ ← Why should I care52│ explaining the value. │53│ │54│ ┌──────────────┐ │55│ │ CTA BUTTON │ │ ← One clear action56│ └──────────────┘ │57│ │58├──────────────────────────────────┤59│ Footer: Unsubscribe link │60└──────────────────────────────────┘61```6263## Subject Lines6465### Formulas That Work6667| Formula | Example | Open Rate Impact |68|---------|---------|-----------------|69| Number + benefit | "5 ways to cut your build time in half" | High |70| Question | "Are you still deploying on Fridays?" | High |71| How-to | "How to automate your reports in 3 steps" | Medium-High |72| Urgency (genuine) | "Last day: 30% off annual plans" | High (if real) |73| Personalized | "[Name], your weekly report is ready" | Very High |74| Curiosity gap | "The one feature our users can't stop talking about" | Medium-High |7576### Rules7778| Rule | Value |79|------|-------|80| **Length** | 30-50 characters (mobile truncates at ~35) |81| **Preview text** | First 40-100 chars after subject — design this intentionally |82| **Emoji** | Max 1, at start or end, test with your audience |83| **ALL CAPS** | Never — triggers spam filters |84| **Spam trigger words** | Avoid: "free", "act now", "limited time", "click here" in subject |85| **Personalization** | [First name] in subject lifts open rates 20%+ |8687### Preview Text8889The preview text appears after the subject line in the inbox. Don't waste it.9091```92❌ "View this email in your browser" (default, wasted space)93❌ "Having trouble viewing this?" (no one cares)9495✅ Subject: "5 ways to cut build time"96 Preview: "Number 3 saved us 6 hours per week"9798✅ Subject: "Your monthly report is ready"99 Preview: "Revenue up 23% — here's what drove it"100```101102## Email Types103104### Welcome Email (Automated, Day 0)105106| Element | Content |107|---------|---------|108| Subject | "Welcome to [Product] — here's what's next" |109| Header | Brand image or product screenshot |110| Body | 3-4 sentences: what they signed up for, what to expect, one quick win |111| CTA | "Complete your setup" or "Try your first [action]" |112| Timing | Immediately after signup |113114### Promotional / Campaign115116| Element | Content |117|---------|---------|118| Subject | Benefit-focused, urgency if real |119| Header | Hero image showing the offer/outcome |120| Body | Problem → solution → offer → deadline |121| CTA | "Get 30% Off" or "Start Free Trial" |122| Urgency | Real deadline, not fake scarcity |123124### Product Update / Changelog125126| Element | Content |127|---------|---------|128| Subject | "New: [Feature name] is here" |129| Header | Screenshot or visual of the feature |130| Body | What's new, why it matters, how to use it |131| CTA | "Try [feature]" |132133### Transactional (Receipts, Confirmations)134135| Rule | Why |136|------|-----|137| Clear purpose in subject | "Your order #1234 is confirmed" |138| Minimal design | Don't confuse with marketing |139| Key info above the fold | Order number, amount, date |140| No promotional content (mostly) | CAN-SPAM allows some, but keep minimal |141142## Header Image Design143144```bash145# Welcome email header146belt app run infsh/html-to-image --input '{147 "html": "<div style=\"width:600px;height:250px;background:linear-gradient(135deg,#2d3436,#636e72);display:flex;align-items:center;padding:40px;font-family:system-ui;color:white\"><div><p style=\"font-size:14px;text-transform:uppercase;letter-spacing:2px;opacity:0.7;margin:0\">Welcome to</p><h1 style=\"font-size:42px;margin:8px 0 0;font-weight:800\">DataFlow</h1><p style=\"font-size:18px;opacity:0.8;margin-top:4px\">Your data, automated</p></div></div>"148}'149150# Sale / promotional header151belt app run infsh/html-to-image --input '{152 "html": "<div style=\"width:600px;height:300px;background:linear-gradient(135deg,#e74c3c,#c0392b);display:flex;align-items:center;justify-content:center;font-family:system-ui;color:white;text-align:center\"><div><p style=\"font-size:20px;opacity:0.9;margin:0\">This Weekend Only</p><h1 style=\"font-size:72px;margin:8px 0;font-weight:900\">30% OFF</h1><p style=\"font-size:18px;opacity:0.8\">All annual plans. Ends Sunday.</p></div></div>"153}'154155# Feature announcement header with AI visual156belt app run falai/flux-dev-lora --input '{157 "prompt": "clean modern email header banner, abstract flowing data visualization, dark blue gradient background, subtle glowing nodes and connections, tech aesthetic, minimal, no text, 600x250 equivalent",158 "width": 1200,159 "height": 500160}'161```162163## CTA Buttons164165| Rule | Value |166|------|-------|167| **Width** | 200-300px, not full width |168| **Height** | 44-50px minimum (tap target) |169| **Color** | High contrast with background |170| **Text** | Action verb + outcome: "Start Free Trial" |171| **Shape** | Rounded corners (4-8px border-radius) |172| **Placement** | Above the fold, repeated at bottom for long emails |173| **Quantity** | ONE primary CTA per email |174175### Bulletproof Buttons176177HTML buttons render differently across email clients. Use the "bulletproof button" technique (VML for Outlook, HTML/CSS for everything else):178179```html180<!-- Bulletproof button (works everywhere including Outlook) -->181<table cellpadding="0" cellspacing="0" border="0">182 <tr>183 <td align="center" bgcolor="#22c55e" style="border-radius:6px;">184 <a href="https://yoursite.com/action" target="_blank"185 style="font-size:16px;font-family:sans-serif;color:#ffffff;186 text-decoration:none;padding:12px 24px;display:inline-block;187 font-weight:bold;">188 Start Free Trial189 </a>190 </td>191 </tr>192</table>193```194195## Mobile Optimization196197| Rule | Why |198|------|-----|199| Single column layout | Multi-column breaks on mobile |200| Font minimum 14px | Smaller is unreadable |201| CTA button minimum 44px tall | Apple/Android tap target |202| Images scale to 100% width | Prevent horizontal scroll |203| Stack elements vertically | Side-by-side breaks on narrow screens |204| Test on Gmail app, Apple Mail, Outlook | The big 3 email clients |205206**60%+ of emails are opened on mobile.** Design mobile-first.207208## Deliverability Checklist209210| Factor | Rule |211|--------|------|212| Image-to-text ratio | Max 40% images, 60% text (spam filters flag image-heavy emails) |213| Alt text on images | Always — images blocked by default in many clients |214| Unsubscribe link | Required by law (CAN-SPAM, GDPR) — make it easy to find |215| From name | Recognizable person or brand name |216| Reply-to | Real address, not no-reply@ (hurts deliverability) |217| List hygiene | Remove bounces, clean inactive subscribers quarterly |218| SPF/DKIM/DMARC | Technical authentication — set up once, critical for inbox |219220## Common Mistakes221222| Mistake | Problem | Fix |223|---------|---------|-----|224| No preview text | Shows "View in browser" or random code | Set preview text intentionally |225| Image-only emails | Blocked images = blank email + spam risk | 60%+ text, alt text on images |226| Multiple CTAs | Decision paralysis, lower click rate | One primary CTA per email |227| Tiny text | Unreadable on mobile | Minimum 14px body, 22px headings |228| no-reply@ sender | Hurts deliverability, feels impersonal | Use real reply address |229| No mobile testing | Broken layout for 60%+ of readers | Test on Gmail app + Apple Mail |230| Missing unsubscribe | Illegal (CAN-SPAM) + spam complaints | Clear unsubscribe link in footer |231| Over-designing | Email clients render CSS inconsistently | Simple layouts, inline styles |232| Fake urgency | Erodes trust, trains users to ignore | Only use real deadlines |233234## Related Skills235236```bash237npx skills add inference-sh/skills@landing-page-design238npx skills add inference-sh/skills@ai-image-generation239npx skills add inference-sh/skills@prompt-engineering240```241242Browse all apps: `belt app list`243