resend-email
Enforces project Resend email conventions when implementing email sending, templates, batch operations, and newsletter broadcasts. This skill ensures consistent patterns for email service methods, error handling, retry logic, and Sentry integration.
$ インストール
git clone https://github.com/JasonPaff/head-shakers /tmp/head-shakers && cp -r /tmp/head-shakers/.claude/skills/resend-email ~/.claude/skills/head-shakers// tip: Run this command in your terminal to install the skill
SKILL.md
name: resend-email description: Enforces project Resend email conventions when implementing email sending, templates, batch operations, and newsletter broadcasts. This skill ensures consistent patterns for email service methods, error handling, retry logic, and Sentry integration.
Resend Email Skill
Purpose
This skill enforces the project Resend email conventions automatically during email implementation. It ensures consistent patterns for service architecture, email sending operations, template management, broadcast handling, error handling, and Sentry integration.
Activation
This skill activates when:
- Creating or modifying
src/lib/services/resend*.tsfiles - Working with email template files in
src/lib/email-templates/ - Implementing email sending operations via Resend
- Creating broadcast or newsletter functionality
- Any code that imports from
resendpackage - Files containing email-related operations (send, batch, broadcast)
Workflow
- Detect Resend email work (imports from
resendor uses ResendService patterns) - Load
references/Resend-Email-Conventions.md - Generate/modify code following all conventions
- Scan for violations of email patterns
- Auto-fix all violations (no permission needed)
- Report fixes applied
Key Patterns
Service Architecture
- Use
ResendServicestatic class pattern - Methods must have
Asyncsuffix for async operations - Apply circuit breaker protection via
circuitBreakers.externalService() - Implement retry logic via
withDatabaseRetry() - Add Sentry breadcrumbs on success, capture exceptions on failure
Email Sending
| Operation | Method | Limit |
|---|---|---|
| Single email | resend.emails.send() | 1 per call |
| Batch emails | resend.batch.send() | Up to 100 per call |
| Broadcast | resend.broadcasts.create() + send() | Audience-based |
Template Patterns
| Type | Use Case | Location |
|---|---|---|
| Inline HTML | Simple confirmations, notifications | Private static methods |
| React Email | Complex newsletters, rich content | src/lib/email-templates/ |
| Resend API Templates | Variable-based templates | Resend dashboard/API |
Error Handling
- Return
{ failedEmails, sentCount }for bulk operations - Return
booleanfor single operations - Use
level: 'warning'for non-critical failures - Never fail entire operation for partial failures
Broadcasts & Audiences
- Always include
{{{RESEND_UNSUBSCRIBE_URL}}}in broadcasts - Use variable syntax:
{{{VARIABLE|fallback}}} - Support scheduled sending via
scheduledAtparameter
Anti-Patterns to Avoid
- Never include PII in Sentry context
- Never skip circuit breaker protection
- Never exceed 100 emails per batch call
- Never hardcode email addresses
- Never send broadcasts without unsubscribe link
- Never use external CSS in email templates (inline only)
- Never skip retry logic for email operations
Usage Pattern Reference
| Use Case | Method | Skills Needed |
|---|---|---|
| Waitlist confirmation | sendWaitlistConfirmationAsync | resend-email |
| Welcome email | sendNewsletterWelcomeAsync | resend-email |
| Bulk notifications | sendLaunchNotificationsAsync | resend-email |
| Newsletter broadcast | sendBroadcastAsync | resend-email, sentry-monitoring |
| React template email | sendWithTemplateAsync | resend-email |
References
references/Resend-Email-Conventions.md- Complete Resend email conventions
Repository

JasonPaff
Author
JasonPaff/head-shakers/.claude/skills/resend-email
1
Stars
0
Forks
Updated15h ago
Added1w ago