Source: Ira Bodnar Email Campaigns Claude 2026 05 08 (github.com/irinabuht12-oss/email-campaigns-claude)
A single-purpose Claude Code skill (one SKILL.md, no scripts) that codifies a complete pattern for building and sending HTML marketing emails via Resend. Author Ira Bodnar (Ryze AI, San Francisco) bundles asset hosting, a copy-paste design system (frost-glass cards, video blocks with blurred backgrounds, dark CTA pills), an ffmpeg GIF optimization pipeline, and the Resend send/batch/drip pipeline. MIT, 147★ in 24 days, ships with a real production example (the Ryze AI × Claude Connector launch email, 23KB of MSO-safe HTML). One-file install: cp SKILL.md ~/.claude/skills/email-campaigns/SKILL.md.
Key Takeaways
-
Single-file skill — no scripts, no MCP, no allowed-tools beyond Bash/Read/Write/Edit/Grep/Glob. The whole skill is the SKILL.md prose itself: 297 lines, 11.6KB. The author’s contribution is the pattern, not the code. This is the same shape as Corey Haines’ marketing-skills bundle but narrower (one workflow vs 36+) and deeper (worked example vs prompt-only). Compare against Charlie Hills’ social-media-skills which is also single-author but ships 16 separate SKILL.md files.
-
“Use your own site as a CDN” is the load-bearing decision. Instead of Cloudinary or S3, the skill tells Claude to drop image assets into the existing project’s
public/email-assets/<campaign-name>/folder — anything inpublic/is served athttps://yourdomain.com/email-assets/...on Vercel/Netlify deployment. Commit + push = instant CDN, zero ops, zero cost. Asset rules baked in: lowercase-dash naming, JPGs/PNGs ≤ 1MB at max 600px wide, GIFs ≤ 1.5MB at 720px / 12-15fps / ≤8s, never<video>tags (Gmail/Outlook block), version filenames instead of overwriting (clients cache aggressively). -
The design tokens are tight and intentionally outdated-feeling avoidance. Card: 4px radius (not 8px+), layered soft shadows (
0 2px 8px ..., 0 8px 24px ...), 560px max width, sky-blue gradient + 6% SVG noise texture, no border. Typography: 26 / 15 / 13 / 14 — exactly three sizes, no more. Black bullets•not green check pills (the skill explicitly calls green checks “dated”). Black pill CTA#18181b,4pxradius,14px 24pxpadding, repeated twice (mid-email + bottom). One opinionated visual signature, copy-paste from one campaign to the next. -
Frost-glass video blocks via ffmpeg pre-blur. The visual hero of the skill is a “video card” with a blurred-background bed + frost-glass overlay. Apple Mail / iOS render real
backdrop-filter: blur(12px); Gmail and Outlook fall back to the pre-blurred image underneath. The pre-blur step is a one-liner:ffmpeg -y -i header.png -vf "boxblur=luma_radius=30:luma_power=3" header_blur.png. The skill ships the full nested-table HTML with both rendering paths handled. -
GIF optimization workflow is the most reusable section. One ffmpeg command does everything:
setpts=0.5*PTS,fps=15,scale=720:-1:flags=lanczos,split[s0][s1];[s0]palettegen=max_colors=256[p];[s1][p]paletteuse=dither=sierra2_4a— 2× speed, 15fps, 720px wide, palette-aware Lanczos resize with sierra2_4a dither. Targets ≤ 1.5MB; if too big, drop to 12fps / 600px / trim 5-6s / 128 colors withdither=bayer:bayer_scale=5. This is reusable across any AI video pipeline that needs email-safe GIFs (HeyGen, Higgsfield clips compressed to email-deliverable artifacts). -
Resend is the entire send-side. No SES, no Mailgun, no Sendgrid abstraction layer. The skill assumes Resend specifically:
npm install resend,RESEND_API_KEY=re_..., verify sending domain (DNS ~15min propagation), single-send viaresend.emails.send(), batch up to 100 per call viaresend.batch.send(), drip sequences via Resend webhooks (email.delivered,email.opened,email.clicked) triggering the next email instead of fixed timers. Rate limits: 10 req/sec free / 100 req/sec paid. Pseudocode included for cron + Postgres/Supabase sent-state table. -
Pre-send checklist is the gate. Ten items the skill instructs Claude to verify before sending — absolute URLs swap, preheader hidden div set, subject sanity, alt text on every image,
target="_blank"on every link, GIFs ≤ 2MB / total ≤ 5MB, tested in Gmail web/mobile + Apple Mail + Outlook, unsubscribe in footer (CAN-SPAM / GDPR), test sent to self with every link clicked,fromon verified domain. Compliance-aware (CAN-SPAM/GDPR named explicitly), not just rendering. -
Conversion advice is opinionated and concrete. ONE primary CTA repeated twice. Video first, text second. Specificity wins — “Connect in 1 click” beats “Get started”, “30-second setup” beats “Easy”. Claim + proof: every claim near a visual. Low-friction reply CTA (“Reply ‘Guide’ and I’ll send you X”). Send Tue-Thu 9-11am recipient-local — avoid Mon (full inboxes) and weekends. These match the Brandon Storey lead-magnet patterns for direct-response email.
-
Authorship is verifiable, not the suspicious-looking
-ossusername pattern. GitHubirinabuht12-ossresolves toIra Bodnar, companyRyze AI, blogget-ryze.ai, Twitter@irabukht, San Francisco. Commits includeCo-Authored-By: Claude Opus 4.6 (1M context)— the skill was built using the tool it targets. The-osssuffix is just an OSS-account naming convention for a real founder, not a supply-chain stub. Worth flagging because the Skills at Depth onboarding module specifically warns about single-username-with-no-history accounts; this one has surface-level signals matching the warning but resolves clean on inspection. -
The example is a real production launch email.
examples/claude-connector.htmlis 23KB of the actual Ryze AI × Claude Connector for Google/Meta Ads launch — full MSO conditionals, mobile media queries on.email-container/.fluid/.mobile-padding/.video-cell, hosted logo grid (Meta / Google Ads / Claude / Google Analytics) at 72×72 frost-glass cards fromhttps://get-ryze.ai/icons/. Open it in a browser to see the rendered result. Provides the missing ingredient most “build emails with Claude” tutorials lack: a fully-worked example you can fork.
Where this fits in the Karpathy wiki
- Marketing automation surface. Pairs with marketing automation use cases (which has an email-marketing section but no end-to-end recipe) and 2026 Claude Code AIOS Pattern (Resend + Postgres + cron + webhooks is a vendor-direct stack matching the ElevenLabs vendor-direct / Meta Ads CLI pattern).
- Skills curation. Joins the gallery of single-author Claude skills indexed in claude-ai: social-media-skills (Charlie Hills), marketing-skills (Corey Haines), birdclaw, AI Recipe Vault (Eliot Prince). Different from the framework-style skills like Superpowers — this is closer to the recipe pattern.
- Email-side gap-filler. The wiki had nothing connecting Claude Code → email send pipeline before this article. Closest neighbors were Brandon Storey lead-magnet course (uses Beehiiv + Kajabi + Zapier — no Resend mention) and the email-sequence subskill in Corey Haines’ bundle (prompt-only, no Resend code). This article adds the missing infra piece.
Try It
# 1) Clone
git clone https://github.com/irinabuht12-oss/email-campaigns-claude.git
# 2) Install as a skill
mkdir -p ~/.claude/skills/email-campaigns
cp email-campaigns-claude/SKILL.md ~/.claude/skills/email-campaigns/SKILL.md
# 3) Set up Resend
npm install resend
export RESEND_API_KEY=re_... # get from resend.com dashboard
# Verify your sending domain in resend.com → Domains (DNS records take ~15 min)
# 4) In any Claude Code session
/email-campaigns
# Then describe the campaign:
# "Build a launch email for [feature] using the design system in this skill.
# Brand colors: ... Hero image at: ... Two GIFs at: ... Resend from: ..."For WEO Marketly: pair with the ElevenLabs voice-agents pattern for outbound + email follow-up sequences. The examples/claude-connector.html is a useful reference layout for any “we just launched X” announcement — the four-logo frost-glass row above the hero image is a strong visual signature for partnership / integration launches specifically.
Open Questions
- Does the skill handle plain-text fallbacks beyond the trivial
text:field onresend.emails.send()? The pre-send checklist mentions tested clients but not text-only deliverability scoring. - The drip sequence section is pseudo-code (
// Pseudo). Would benefit from a worked example pairing it with a concrete cron runner (Vercel Cron, Cloudflare Workers Cron) — currently a leave-it-to-the-reader gap. - No mention of SOC 2 / HIPAA constraints on Resend usage. For dental-marketing-side WEO contexts where PHI might leak via email content, Resend’s compliance posture would matter — not addressed in the skill.