> plunk
Send transactional and marketing emails with Plunk. Use when a user asks to send emails from an app, set up email automation, create drip campaigns, or use a simple open-source email platform.
curl "https://skillshub.wtf/TerminalSkills/skills/plunk?format=md"Plunk
Overview
Plunk is an open-source email platform for transactional emails (welcome, password reset, receipts) and marketing campaigns (newsletters, drip sequences). Self-hostable or use the cloud version. Simple API, React email templates.
Instructions
Step 1: Send Transactional Email
// lib/email.ts — Send emails via Plunk API
const PLUNK_API_KEY = process.env.PLUNK_API_KEY!
export async function sendEmail(to: string, subject: string, body: string) {
await fetch('https://api.useplunk.com/v1/send', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${PLUNK_API_KEY}`,
},
body: JSON.stringify({ to, subject, body }),
})
}
// Usage
await sendEmail('user@example.com', 'Welcome!', '<h1>Welcome to our app</h1>')
Step 2: Track Events (for Automations)
// Track user events to trigger automated emails
await fetch('https://api.useplunk.com/v1/track', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Bearer ${PLUNK_API_KEY}`,
},
body: JSON.stringify({
event: 'user-signed-up',
email: 'user@example.com',
data: { name: 'John', plan: 'free' },
}),
})
// Configure automation in Plunk dashboard:
// When "user-signed-up" → send welcome email → wait 3 days → send onboarding tips
Guidelines
- Free tier: 100 emails/month. Self-hosted: unlimited.
- Use events + automations for drip campaigns instead of manual sends.
- For higher volume, consider Resend or SendGrid.
- Self-host with Docker for full control and unlimited emails.
> related_skills --same-repo
> zustand
You are an expert in Zustand, the small, fast, and scalable state management library for React. You help developers manage global state without boilerplate using Zustand's hook-based stores, selectors for performance, middleware (persist, devtools, immer), computed values, and async actions — replacing Redux complexity with a simple, un-opinionated API in under 1KB.
> zod
You are an expert in Zod, the TypeScript-first schema declaration and validation library. You help developers define schemas that validate data at runtime AND infer TypeScript types at compile time — eliminating the need to write types and validators separately. Used for API input validation, form validation, environment variables, config files, and any data boundary.
> xero-accounting
Integrate with the Xero accounting API to sync invoices, expenses, bank transactions, and contacts — and generate financial reports like P&L and balance sheet. Use when: connecting apps to Xero, automating bookkeeping workflows, syncing accounting data, or pulling financial reports programmatically.
> windsurf-rules
Configure Windsurf AI coding assistant with .windsurfrules and workspace rules. Use when: customizing Windsurf for a project, setting AI coding standards, creating team-shared Windsurf configurations, or tuning Cascade AI behavior.