email-notifications
Email template and notification patterns using Resend
Best use case
email-notifications is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Email template and notification patterns using Resend
Teams using email-notifications should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/email-notifications/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How email-notifications Compares
| Feature / Agent | email-notifications | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Email template and notification patterns using Resend
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# Email Notifications Skill
Guide for email templates and notifications in Splits Network.
## Purpose
- **Email Templates**: Professional HTML templates with branding
- **Resend Integration**: Sending transactional emails
- **Event-Driven**: Email triggered by domain events
- **Template Variables**: Dynamic content in emails
## When to Use
- Creating new email templates
- Sending transactional emails
- Processing domain events for notifications
- Testing email delivery
## Core Patterns
### 1. Email Template Structure
```typescript
export function applicationCreatedEmail(data: {
candidateName: string;
jobTitle: string;
companyName: string;
applicationUrl: string;
}) {
return {
subject: `Application Received: ${data.jobTitle}`,
html: `
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
body { font-family: Arial, sans-serif; line-height: 1.6; }
.container { max-width: 600px; margin: 0 auto; padding: 20px; }
.button { background: #0066cc; color: white; padding: 12px 24px; text-decoration: none; }
</style>
</head>
<body>
<div class="container">
<h1>Application Received</h1>
<p>Hi ${data.candidateName},</p>
<p>We've received your application for <strong>${data.jobTitle}</strong> at ${data.companyName}.</p>
<p>We'll review your application and get back to you soon.</p>
<a href="${data.applicationUrl}" class="button">View Application</a>
</div>
</body>
</html>
`
};
}
```
### 2. Resend Integration
```typescript
import { Resend } from 'resend';
const resend = new Resend(process.env.RESEND_API_KEY);
export async function sendEmail(
to: string,
subject: string,
html: string
) {
try {
const { data, error } = await resend.emails.send({
from: 'Splits Network <notifications@splits.network>',
to,
subject,
html
});
if (error) {
console.error('Failed to send email:', error);
throw error;
}
return data;
} catch (error) {
console.error('Email error:', error);
throw error;
}
}
```
### 3. Event-Driven Email
```typescript
// Consumer listens for events
export class ApplicationEventsConsumer {
async handleApplicationCreated(payload: any) {
const { applicationId, candidateId, jobId } = payload;
// Fetch data for email
const application = await this.fetchApplication(applicationId);
const candidate = await this.fetchCandidate(candidateId);
const job = await this.fetchJob(jobId);
// Generate email
const email = applicationCreatedEmail({
candidateName: candidate.name,
jobTitle: job.title,
companyName: job.company.name,
applicationUrl: `${process.env.APP_URL}/applications/${applicationId}`
});
// Send email
await sendEmail(candidate.email, email.subject, email.html);
}
}
```
### 4. Email Types
```typescript
// Application emails
applicationCreatedEmail()
applicationStageChangedEmail()
applicationAcceptedEmail()
// Placement emails
placementCreatedEmail()
placementActivatedEmail()
// Recruiter emails
recruiterInvitedEmail()
candidateSubmittedEmail()
// Collaboration emails
recruiterAssignedEmail()
teamMemberInvitedEmail()
```
### 5. Template Testing
```typescript
// Generate preview HTML
export function previewEmail() {
const html = applicationCreatedEmail({
candidateName: 'John Doe',
jobTitle: 'Senior Engineer',
companyName: 'Acme Corp',
applicationUrl: 'https://app.splits.network/applications/123'
});
return html;
}
// Test email sending
async function testEmail() {
await sendEmail(
'test@example.com',
'Test Email',
previewEmail().html
);
}
```
See [examples/](./examples/) and [references/](./references/).Related Skills
email-triage-draft-replies
Review unread email, categorize it, and draft replies (no sending without approval)
email-extractor
Expert in email content extraction and analysis. **Use whenever the user mentions .eml files, email messages, says "Extract email information", "Using the email information", or requests to extract, parse, analyze, or process email files.** Handles email thread parsing, attachment extraction, and converting emails to structured markdown format for AI processing. (project, gitignored)
verifiedemail-automation
Automate Verifiedemail tasks via Rube MCP (Composio). Always search tools first for current schemas.
jikime-marketing-email
Email marketing and automation specialist for creating email sequences, drip campaigns, lifecycle emails, and nurture flows.
google-email
Manage Gmail email sync, triage, and analysis workflows. Use when user wants to sync emails, triage inbox, check email analysis results, view email statistics, manage the email processing pipeline, find newsletters, check pending emails, or understand email workflow status. Triggers on phrases like "sync my emails", "triage inbox", "email status", "check newsletters", "email analysis", "what emails do I have", "pending emails", "unsubscribe from newsletters".
enginemailer-automation
Automate Enginemailer tasks via Rube MCP (Composio). Always search tools first for current schemas.
emailoctopus-automation
Automate Emailoctopus tasks via Rube MCP (Composio). Always search tools first for current schemas.
emaillistverify-automation
Automate Emaillistverify tasks via Rube MCP (Composio). Always search tools first for current schemas.
emailable-automation
Automate Emailable tasks via Rube MCP (Composio). Always search tools first for current schemas.
email-systems
Email has the highest ROI of any marketing channel. $36 for every $1 spent. Yet most startups treat it as an afterthought - bulk blasts, no personalization, landing in spam folders. This skill covers transactional email that works, marketing automation that converts, deliverability that reaches inboxes, and the infrastructure decisions that scale. Use when: keywords, file_patterns, code_patterns.
email-sequence
When the user wants to create or optimize an email sequence, drip campaign, automated email flow, or lifecycle email program. Also use when the user mentions "email sequence," "drip campaign," "nurture sequence," "onboarding emails," "welcome sequence," "re-engagement emails," "email automation," or "lifecycle emails." For in-app onboarding, see onboarding-cro.
email-copilot
Manages inbox by learning preferences, cleaning noise, and prioritizing important work. Use when user asks about emails or inbox management.