{"id":"d66c1b15-0852-436e-9c16-db485730e2af","shortId":"KZzRD5","kind":"skill","title":"email-systems","tagline":"Email has the highest ROI of any marketing channel. $36 for every","description":"# Email Systems\n\nEmail has the highest ROI of any marketing channel. $36 for every $1 spent.\nYet most startups treat it as an afterthought - bulk blasts, no personalization,\nlanding in spam folders.\n\nThis skill covers transactional email that works, marketing automation that\nconverts, deliverability that reaches inboxes, and the infrastructure decisions\nthat scale.\n\n## Principles\n\n- Transactional vs Marketing separation | Description: Transactional emails (password reset, receipts) need 100% delivery.\nMarketing emails (newsletters, promos) have lower priority. Use separate\nIP addresses and providers to protect transactional deliverability. | Examples: Good: Password resets via Postmark, marketing via ConvertKit | Bad: All emails through one SendGrid account\n- Permission is everything | Description: Only email people who asked to hear from you. Double opt-in for marketing.\nEasy unsubscribe. Clean your list ruthlessly. Bad lists destroy deliverability. | Examples: Good: Confirmed subscription + one-click unsubscribe | Bad: Scraped email list, hidden unsubscribe, bought contacts\n- Deliverability is infrastructure | Description: SPF, DKIM, DMARC are not optional. Warm up new IPs. Monitor bounce rates.\nDeliverability is earned through technical setup and good behavior. | Examples: Good: All DNS records configured, dedicated IP warmed for 4 weeks | Bad: Using free tier shared IP, no authentication records\n- One email, one goal | Description: Each email should have exactly one purpose and one CTA. Multiple asks\nmeans nothing gets clicked. Clear single action. | Examples: Good: \"Click here to verify your email\" (one button) | Bad: \"Verify email, check out our blog, follow us on Twitter, refer a friend...\"\n- Timing and frequency matter | Description: Wrong time = low open rates. Too frequent = unsubscribes. Let users\nset preferences. Test send times. Respect inbox fatigue. | Examples: Good: Weekly digest on Tuesday 10am user's timezone, preference center | Bad: Daily emails at random times, no way to reduce frequency\n\n## Patterns\n\n### Transactional Email Queue\n\nQueue all transactional emails with retry logic and monitoring\n\n**When to use**: Sending any critical email (password reset, receipts, confirmations)\n\n// Don't block request on email send\nawait queue.add('email', {\n  template: 'password-reset',\n  to: user.email,\n  data: { resetToken, expiresAt }\n}, {\n  attempts: 3,\n  backoff: { type: 'exponential', delay: 2000 }\n});\n\n### Email Event Tracking\n\nTrack delivery, opens, clicks, bounces, and complaints\n\n**When to use**: Any email campaign or transactional flow\n\n# Track lifecycle:\n- Queued: Email entered system\n- Sent: Handed to provider\n- Delivered: Reached inbox\n- Opened: Recipient viewed\n- Clicked: Recipient engaged\n- Bounced: Permanent failure\n- Complained: Marked as spam\n\n### Template Versioning\n\nVersion email templates for rollback and A/B testing\n\n**When to use**: Changing production email templates\n\ntemplates/\n  password-reset/\n    v1.tsx (current)\n    v2.tsx (testing 10%)\n    v1-deprecated.tsx (archived)\n\n# Deploy new version gradually\n# Monitor metrics before full rollout\n\n### Bounce Handling State Machine\n\nAutomatically handle bounces to protect sender reputation\n\n**When to use**: Processing bounce and complaint webhooks\n\nswitch (bounceType) {\n  case 'hard':\n    await markEmailInvalid(email);\n    break;\n  case 'soft':\n    await incrementBounceCount(email);\n    if (count >= 3) await markEmailInvalid(email);\n    break;\n  case 'complaint':\n    await unsubscribeImmediately(email);\n    break;\n}\n\n### React Email Components\n\nBuild emails with reusable React components\n\n**When to use**: Creating email templates\n\nimport { Button, Html } from '@react-email/components';\n\nexport default function WelcomeEmail({ userName }) {\n  return (\n    <Html>\n      <h1>Welcome {userName}!</h1>\n      <Button href=\"https://app.com/start\">\n        Get Started\n      </Button>\n    </Html>\n  );\n}\n\n### Preference Center\n\nLet users control email frequency and topics\n\n**When to use**: Building marketing or notification systems\n\nPreferences:\n☑ Product updates (weekly)\n☑ New features (monthly)\n☐ Marketing promotions\n☑ Account notifications (always)\n\n# Respect preferences in all sends\n# Required for GDPR compliance\n\n## Sharp Edges\n\n### Missing SPF, DKIM, or DMARC records\n\nSeverity: CRITICAL\n\nSituation: Sending emails without authentication. Emails going to spam folder.\nLow open rates. No idea why. Turns out DNS records were never set up.\n\nSymptoms:\n- Emails going to spam\n- Low deliverability rates\n- mail-tester.com score below 8\n- No DMARC reports received\n\nWhy this breaks:\nEmail authentication (SPF, DKIM, DMARC) tells receiving servers you're\nlegit. Without them, you look like a spammer. Modern email providers\nincreasingly require all three.\n\nRecommended fix:\n\n# Required DNS records:\n\n## SPF (Sender Policy Framework)\nTXT record: v=spf1 include:_spf.google.com include:sendgrid.net ~all\n\n## DKIM (DomainKeys Identified Mail)\nTXT record provided by your email provider\nAdds cryptographic signature to emails\n\n## DMARC (Domain-based Message Authentication)\nTXT record: v=DMARC1; p=quarantine; rua=mailto:dmarc@yourdomain.com\n\n# Verify setup:\n- Send test email to mail-tester.com\n- Check MXToolbox for record validation\n- Monitor DMARC reports\n\n### Using shared IP for transactional email\n\nSeverity: HIGH\n\nSituation: Password resets going to spam. Using free tier of email provider.\nSome other customer on your shared IP got flagged for spam.\nYour reputation is ruined by association.\n\nSymptoms:\n- Transactional emails in spam\n- Inconsistent delivery\n- Using same provider for marketing and transactional\n\nWhy this breaks:\nShared IPs share reputation. One bad actor affects everyone. For\ncritical transactional email, you need your own IP or a provider\nwith strict shared IP policies.\n\nRecommended fix:\n\n# Transactional email strategy:\n\n## Option 1: Dedicated IP (high volume)\n- Get dedicated IP from your provider\n- Warm it up slowly (start with 100/day)\n- Maintain consistent volume\n\n## Option 2: Transactional-only provider\n- Postmark (very strict, great reputation)\n- Includes shared pool with high standards\n\n## Separate concerns:\n- Transactional: Postmark or Resend\n- Marketing: ConvertKit or Customer.io\n- Never mix marketing and transactional\n\n### Not processing bounce notifications\n\nSeverity: HIGH\n\nSituation: Emailing same dead addresses over and over. Bounce rate climbing.\nEmail provider threatening to suspend account. List is 40% dead.\n\nSymptoms:\n- Bounce rate above 2%\n- No webhook handlers for bounces\n- Same emails failing repeatedly\n\nWhy this breaks:\nBounces damage sender reputation. Email providers track bounce rates.\nAbove 2% and you start looking like a spammer. Dead addresses must\nbe removed immediately.\n\nRecommended fix:\n\n# Bounce handling requirements:\n\n## Hard bounces:\nRemove immediately on first occurrence\nInvalid address, domain doesn't exist\n\n## Soft bounces:\nRetry 3 times over 72 hours\nAfter 3 failures, treat as hard bounce\n\n## Implementation:\n```typescript\n// Webhook handler for bounces\napp.post('/webhooks/email', (req, res) => {\n  const event = req.body;\n  if (event.type === 'bounce') {\n    await markEmailInvalid(event.email);\n    await removeFromAllLists(event.email);\n  }\n});\n```\n\n## Monitor:\nTrack bounce rate by campaign\nAlert if bounce rate exceeds 1%\n\n### Missing or hidden unsubscribe link\n\nSeverity: CRITICAL\n\nSituation: Users marking as spam because they cannot unsubscribe. Spam complaints\nrising. CAN-SPAM violation. Email provider suspends account.\n\nSymptoms:\n- Hidden unsubscribe links\n- Multi-step unsubscribe process\n- No List-Unsubscribe header\n- High spam complaint rate\n\nWhy this breaks:\nUsers who cannot unsubscribe will mark as spam. Spam complaints hurt\nreputation more than unsubscribes. Also it is literally illegal.\nCAN-SPAM, GDPR all require clear unsubscribe.\n\nRecommended fix:\n\n# Unsubscribe requirements:\n\n## Visible:\n- Above the fold in email footer\n- Clear text, not hidden\n- Not styled to be invisible\n\n## One-click:\n- Link directly unsubscribes\n- No login required\n- No \"are you sure\" hoops\n\n## List-Unsubscribe header:\n```\nList-Unsubscribe: <mailto:unsubscribe@example.com>,\n  <https://example.com/unsubscribe?token=xxx>\nList-Unsubscribe-Post: List-Unsubscribe=One-Click\n```\n\n## Preference center:\nOption to reduce frequency instead of full unsubscribe\n\n### Sending HTML without plain text alternative\n\nSeverity: MEDIUM\n\nSituation: Some users see blank emails. Spam filters flagging emails. Accessibility\nissues for screen readers. Email clients that strip HTML show nothing.\n\nSymptoms:\n- No text/plain part in emails\n- Blank emails for some users\n- Lower engagement in some segments\n\nWhy this breaks:\nNot everyone can render HTML. Screen readers work better with plain text.\nSpam filters are suspicious of HTML-only. Multipart is the standard.\n\nRecommended fix:\n\n# Always send multipart:\n```typescript\nawait resend.emails.send({\n  from: 'you@example.com',\n  to: 'user@example.com',\n  subject: 'Welcome!',\n  html: '<h1>Welcome!</h1><p>Thanks for signing up.</p>',\n  text: 'Welcome!\\n\\nThanks for signing up.',\n});\n```\n\n# Auto-generate text from HTML:\nUse html-to-text library as fallback\nBut hand-crafted plain text is better\n\n# Plain text should be readable:\nNot just HTML stripped of tags\nActual formatted text content\n\n### Sending high volume from new IP immediately\n\nSeverity: HIGH\n\nSituation: Just switched providers. Started sending 50,000 emails/day immediately.\nMassive deliverability issues. New IP has no reputation. Looks like spam.\n\nSymptoms:\n- New IP/provider\n- Sending high volume immediately\n- Sudden deliverability drop\n\nWhy this breaks:\nNew IPs have no reputation. Sending high volume immediately looks\nlike a spammer who just spun up. You need to gradually build trust.\n\nRecommended fix:\n\n# IP warm-up schedule:\n\nWeek 1: 50-100 emails/day\nWeek 2: 200-500 emails/day\nWeek 3: 500-1000 emails/day\nWeek 4: 1000-5000 emails/day\nContinue doubling until at volume\n\n# Best practices:\n- Start with most engaged users\n- Send to Gmail/Microsoft first (they set reputation)\n- Maintain consistent volume\n- Don't spike and drop\n\n# During warm-up:\n- Monitor deliverability closely\n- Check feedback loops\n- Adjust pace if issues arise\n\n### Emailing people who did not opt in\n\nSeverity: CRITICAL\n\nSituation: Bought an email list. Scraped emails from LinkedIn. Added conference\ncontacts. Spam complaints through the roof. Provider suspends account.\nMaybe a lawsuit.\n\nSymptoms:\n- Purchased email lists\n- Scraped contacts\n- High unsubscribe rate on first send\n- Spam complaints above 0.1%\n\nWhy this breaks:\nPermission-based email is not optional. It is the law (CAN-SPAM, GDPR).\nIt is also effective - unwilling recipients hurt your metrics and\nreputation more than they help.\n\nRecommended fix:\n\n# Permission requirements:\n\n## Explicit opt-in:\n- User actively chooses to receive email\n- Not pre-checked boxes\n- Clear what they are signing up for\n\n## Double opt-in:\n- Confirmation email with link\n- Only add to list after confirmation\n- Best practice for marketing lists\n\n## What you cannot do:\n- Buy email lists\n- Scrape emails from websites\n- Add conference contacts without consent\n- Use partner/customer lists without consent\n\n## Transactional exception:\nPassword resets, receipts, account alerts\ndo not need marketing opt-in\n\n### Emails that are mostly or entirely images\n\nSeverity: MEDIUM\n\nSituation: Beautiful designed email that is one big image. Users with images\nblocked see nothing. Spam filters flag it. Mobile loading is slow.\nNo one can copy text.\n\nSymptoms:\n- Single image emails\n- No text content visible\n- Missing or generic alt text\n- Low engagement when images blocked\n\nWhy this breaks:\nImages are blocked by default in many clients. Spam filters are\nsuspicious of image-only emails. Accessibility suffers. Load times\nincrease.\n\nRecommended fix:\n\n# Balance images and text:\n\n## 60/40 rule:\n- At least 60% text content\n- Images for enhancement, not content\n\n## Always include:\n- Alt text on every image\n- Key message in text, not just image\n- Fallback for images-off view\n\n## Test:\n- Preview with images disabled\n- Should still be usable\n\n# Example:\n```html\n<img\n  src=\"hero.jpg\"\n  alt=\"Save 50% this week - use code SAVE50\"\n  style=\"max-width: 100%\"\n/>\n<p>Use code <strong>SAVE50</strong> to save 50% this week.</p>\n```\n\n### Missing or default preview text\n\nSeverity: MEDIUM\n\nSituation: Inbox shows \"View this email in browser\" or random HTML as preview.\nLower open rates. First impression wasted on boilerplate.\n\nSymptoms:\n- View in browser as preview\n- HTML code visible in preview\n- No preview component in template\n\nWhy this breaks:\nPreview text is prime real estate - appears right after subject line.\nDefault or missing preview text wastes this space. Good preview text\nincreases open rates 10-30%.\n\nRecommended fix:\n\n# Add explicit preview text:\n\n## In HTML:\n```html\n<div style=\"display:none;max-height:0;overflow:hidden;\">\n  Your preview text here. This appears in inbox preview.\n  <!-- Add whitespace to push footer text out -->\n  &nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;&zwnj;&nbsp;\n</div>\n```\n\n## With React Email:\n```tsx\n<Preview>\n  Your preview text here. This appears in inbox preview.\n</Preview>\n```\n\n## Best practices:\n- Complement the subject line\n- 40-100 characters optimal\n- Create curiosity or value\n- Different from first line of email\n\n### Not handling partial send failures\n\nSeverity: HIGH\n\nSituation: Sending to 10,000 users. API fails at 3,000. No tracking of what sent.\nEither double-send or lose 7,000. No way to know who got the email.\n\nSymptoms:\n- No per-recipient send logging\n- Cannot tell who received email\n- Double-sending issues\n- No retry mechanism\n\nWhy this breaks:\nBulk sends fail partially. APIs timeout. Rate limits hit. Without\ntracking individual send status, you cannot recover gracefully.\n\nRecommended fix:\n\n# Track each send individually:\n\n```typescript\nasync function sendCampaign(emails: string[]) {\n  const results = await Promise.allSettled(\n    emails.map(async (email) => {\n      try {\n        const result = await resend.emails.send({ to: email, ... });\n        await db.emailLog.create({\n          email,\n          status: 'sent',\n          messageId: result.id,\n        });\n        return result;\n      } catch (error) {\n        await db.emailLog.create({\n          email,\n          status: 'failed',\n          error: error.message,\n        });\n        throw error;\n      }\n    })\n  );\n\n  const failed = results.filter(r => r.status === 'rejected');\n  // Retry failed sends or alert\n}\n```\n\n# Best practices:\n- Log every send attempt\n- Include message ID for tracking\n- Build retry queue for failures\n- Monitor success rate per campaign\n\n## Validation Checks\n\n### Missing plain text email part\n\nSeverity: WARNING\n\nEmails should always include a plain text alternative\n\nMessage: Email being sent with HTML but no plain text part. Add 'text:' property for accessibility and deliverability.\n\n### Hardcoded from email address\n\nSeverity: WARNING\n\nFrom addresses should come from environment variables\n\nMessage: From email appears hardcoded. Use environment variable for flexibility.\n\n### Missing bounce webhook handler\n\nSeverity: WARNING\n\nEmail bounces should be handled to maintain list hygiene\n\nMessage: Email provider used but no bounce handling detected. Implement webhook handler for bounces.\n\n### Missing List-Unsubscribe header\n\nSeverity: INFO\n\nMarketing emails should include List-Unsubscribe header\n\nMessage: Marketing email detected without List-Unsubscribe header. Add header for better deliverability.\n\n### Synchronous email send in request handler\n\nSeverity: WARNING\n\nEmail sends should be queued, not blocking\n\nMessage: Email sent synchronously in request handler. Consider queuing for better reliability.\n\n### Email send without retry logic\n\nSeverity: INFO\n\nEmail sends should have retry mechanism for failures\n\nMessage: Email send without apparent retry logic. Add retry for transient failures.\n\n### Email API key in code\n\nSeverity: ERROR\n\nAPI keys should come from environment variables\n\nMessage: Email API key appears hardcoded in source code. Use environment variable.\n\n### Bulk email without rate limiting\n\nSeverity: WARNING\n\nBulk sends should respect provider rate limits\n\nMessage: Bulk email sending without apparent rate limiting. Add throttling to avoid hitting limits.\n\n### Email without preview text\n\nSeverity: INFO\n\nEmails should include preview/preheader text\n\nMessage: Email template without preview text. Add hidden preheader for inbox preview.\n\n### Email send without logging\n\nSeverity: WARNING\n\nEmail sends should be logged for debugging and auditing\n\nMessage: Email being sent without apparent logging. Log sends for debugging and compliance.\n\n## Collaboration\n\n### Delegation Triggers\n\n- copy|subject|messaging|content -> copywriting (Email needs copy)\n- design|template|visual|layout -> ui-design (Email needs design)\n- track|analytics|measure|metrics -> analytics-architecture (Email needs tracking)\n- infrastructure|deploy|server|queue -> devops (Email needs infrastructure)\n\n### Email Marketing Stack\n\nSkills: email-systems, copywriting, marketing, analytics-architecture\n\nWorkflow:\n\n```\n1. Infrastructure setup (email-systems)\n2. Template creation (email-systems)\n3. Copy writing (copywriting)\n4. Campaign launch (marketing)\n5. Performance tracking (analytics-architecture)\n```\n\n### Transactional Email\n\nSkills: email-systems, backend, devops\n\nWorkflow:\n\n```\n1. Provider setup (email-systems)\n2. Template coding (email-systems)\n3. Queue integration (backend)\n4. Monitoring (devops)\n```\n\n## When to Use\nUse this skill when the request clearly matches the capabilities and patterns described above.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["email","systems","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows"],"capabilities":["skill","source-sickn33","skill-email-systems","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/email-systems","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34831 github stars · SKILL.md body (18,051 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T06:51:07.219Z","embedding":null,"createdAt":"2026-04-18T21:36:31.397Z","updatedAt":"2026-04-24T06:51:07.219Z","lastSeenAt":"2026-04-24T06:51:07.219Z","tsv":"'-100':1321,1790 '-1000':1331 '-30':1751 '-500':1326 '-5000':1336 '/components':501 '/unsubscribe?token=xxx':1087 '/webhooks/email':939 '0.1':1427 '000':1261,1814,1820,1833 '1':30,778,965,1319,2287,2322 '10':422,1750,1813 '100':81 '100/day':795 '1000':1335 '10am':285 '2':800,862,885,1324,2293,2328 '200':1325 '2000':351 '3':346,468,920,926,1329,1819,2299,2334 '36':13,27 '4':197,1334,2303,2338 '40':856,1789 '5':2307 '50':1260,1320,1675 '500':1330 '60':1631 '60/40':1627 '7':1832 '72':923 '8':595 'a/b':405 'access':1126,1616,1992 'account':115,538,853,992,1408,1532 'action':231 'activ':1470 'actor':752 'actual':1241 'ad':1398 'add':657,1496,1517,1754,1988,2071,2125,2178,2201 'address':93,841,894,912,1998,2002 'adjust':1375 'affect':753 'afterthought':39 'alert':960,1533,1938 'also':1029,1448 'alt':1589,1641 'altern':1113,1976 'alway':540,1183,1639,1971 'analyt':2257,2261,2284,2311 'analytics-architectur':2260,2283,2310 'api':1816,1868,2131,2137,2146 'app.post':938 'appar':2122,2175,2227 'appear':1731,1766,1779,2011,2148 'architectur':2262,2285,2312 'archiv':424 'aris':1379 'ask':124,224,2391 'associ':728 'async':1889,1899 'attempt':345,1944 'audit':2221 'authent':206,564,604,667 'auto':1209 'auto-gener':1208 'autom':56 'automat':438 'avoid':2181 'await':333,457,463,469,475,948,951,1187,1896,1904,1908,1919 'backend':2319,2337 'backoff':347 'bad':109,141,153,199,242,291,751 'balanc':1623 'base':665,1433 'beauti':1551 'behavior':186 'best':1343,1501,1783,1939 'better':1165,1229,2074,2101 'big':1557 'blank':1120,1144 'blast':41 'block':328,1562,1595,1601,2090 'blog':248 'boilerpl':1705 'bought':159,1390 'bounc':176,359,390,434,440,449,833,845,859,867,875,882,901,905,918,931,937,947,956,962,2019,2025,2039,2046 'bouncetyp':454 'boundari':2399 'box':1479 'break':460,472,478,602,745,874,1013,1156,1287,1430,1598,1724,1863 'browser':1692,1709 'build':482,524,1309,1950 'bulk':40,1864,2156,2163,2171 'button':241,495 'buy':1510 'campaign':367,959,1959,2304 'can-spam':985,1034,1442 'cannot':980,1016,1508,1849,1879 'capabl':2353 'case':455,461,473 'catch':1917 'center':290,513,1099 'chang':410 'channel':12,26 'charact':1791 'check':245,684,1372,1478,1961 'choos':1471 'clarif':2393 'clean':137 'clear':229,1040,1053,1480,2350,2366 'click':151,228,234,358,387,1064,1097 'client':1132,1606 'climb':847 'close':1371 'code':1671,1713,2134,2152,2330 'collabor':2235 'come':2004,2140 'complain':393 'complaint':361,451,474,983,1009,1023,1402,1425 'complement':1785 'complianc':549,2234 'compon':481,487,1719 'concern':817 'confer':1399,1518 'configur':192 'confirm':147,325,1491,1500 'consent':1521,1526 'consid':2098 'consist':797,1358 'const':942,1894,1902,1928 'contact':160,1400,1417,1519 'content':1244,1584,1633,1638,2241 'continu':1338 'control':516 'convert':58 'convertkit':108,823 'copi':1576,2238,2245,2300 'copywrit':2242,2281,2302 'count':467 'cover':50 'craft':1225 'creat':491,1793 'creation':2295 'criteria':2402 'critic':320,559,756,972,1388 'cryptograph':658 'cta':222 'curios':1794 'current':419 'custom':714 'customer.io':825 'daili':292 'damag':876 'data':342 'db.emaillog.create':1909,1920 'dead':840,857,893 'debug':2219,2232 'decis':66 'dedic':193,779,784 'default':503,1603,1680,1736 'delay':350 'deleg':2236 'deliv':381 'deliver':59,99,144,161,178,590,1265,1283,1370,1994,2075 'deliveri':82,356,735 'deploy':425,2267 'describ':2356,2370 'descript':74,119,164,212,260 'design':1552,2246,2252,2255 'destroy':143 'detect':2041,2065 'devop':2270,2320,2340 'differ':1797 'digest':282 'direct':1066 'disabl':1663 'dkim':166,554,606,646 'dmarc':167,556,597,607,662,690 'dmarc1':671 'dmarc@yourdomain.com':676 'dns':190,578,631 'doesn':914 'domain':664,913 'domain-bas':663 'domainkey':647 'doubl':129,1339,1487,1828,1855 'double-send':1827,1854 'drop':1284,1364 'earn':180 'easi':135 'edg':551 'effect':1449 'either':1826 'email':2,4,16,18,52,76,84,111,121,155,209,214,239,244,293,304,309,321,331,335,352,366,374,400,412,459,465,471,477,480,483,492,500,517,562,565,585,603,622,655,661,681,697,710,731,758,775,838,848,869,879,989,1051,1121,1125,1131,1143,1145,1380,1392,1395,1414,1434,1474,1492,1511,1514,1541,1553,1581,1615,1690,1772,1802,1841,1853,1892,1900,1907,1910,1921,1965,1969,1978,1997,2010,2024,2034,2055,2064,2077,2084,2092,2103,2110,2119,2130,2145,2157,2172,2184,2190,2196,2207,2213,2223,2243,2253,2263,2271,2274,2279,2291,2297,2314,2317,2326,2332 'email-system':1,2278,2290,2296,2316,2325,2331 'emails.map':1898 'emails/day':1262,1322,1327,1332,1337 'engag':389,1150,1348,1592 'enhanc':1636 'enter':375 'entir':1546 'environ':2006,2014,2142,2154,2382 'environment-specif':2381 'error':1918,1924,1927,2136 'error.message':1925 'estat':1730 'event':353,943 'event.email':950,953 'event.type':946 'everi':15,29,1644,1942 'everyon':754,1158 'everyth':118 'exact':217 'exampl':100,145,187,232,279,1668 'example.com':1086 'example.com/unsubscribe?token=xxx':1085 'exceed':964 'except':1528 'exist':916 'expert':2387 'expiresat':344 'explicit':1465,1755 'exponenti':349 'export':502 'fail':870,1817,1866,1923,1929,1935 'failur':392,927,1807,1954,2117,2129 'fallback':1221,1653 'fatigu':278 'featur':534 'feedback':1373 'filter':1123,1170,1566,1608 'first':909,1353,1422,1701,1799 'fix':629,773,900,1043,1182,1312,1462,1622,1753,1883 'flag':720,1124,1567 'flexibl':2017 'flow':370 'fold':1049 'folder':47,569 'follow':249 'footer':1052 'format':1242 'framework':636 'free':201,707 'frequenc':258,301,518,1103 'frequent':267 'friend':255 'full':432,1106 'function':504,1890 'gdpr':548,1037,1445 'generat':1210 'generic':1588 'get':227,510,783 'gmail/microsoft':1352 'go':566,586,703 'goal':211 'good':101,146,185,188,233,280,1744 'got':719,1839 'grace':1881 'gradual':428,1308 'great':808 'hand':378,1224 'hand-craft':1223 'handl':435,439,902,1804,2028,2040 'handler':865,935,2021,2044,2081,2097 'hard':456,904,930 'hardcod':1995,2012,2149 'header':1006,1079,2051,2061,2070,2072 'hear':126 'help':1460 'hidden':157,968,994,1056,2202 'high':699,781,814,836,1007,1246,1253,1279,1294,1418,1809 'highest':7,21 'hit':1872,2182 'hoop':1075 'hour':924 'html':496,1109,1135,1161,1175,1195,1213,1216,1237,1669,1695,1712,1759,1760,1982 'html-on':1174 'html-to-text':1215 'hurt':1024,1452 'hygien':2032 'id':1947 'idea':574 'identifi':648 'illeg':1033 'imag':1547,1558,1561,1580,1594,1599,1613,1624,1634,1645,1652,1656,1662 'image-on':1612 'images-off':1655 'immedi':898,907,1251,1263,1281,1296 'implement':932,2042 'import':494 'impress':1702 'inbox':62,277,383,1686,1768,1781,2205 'includ':641,643,810,1640,1945,1972,2057,2192 'inconsist':734 'increas':624,1620,1747 'incrementbouncecount':464 'individu':1875,1887 'info':2053,2109,2189 'infrastructur':65,163,2266,2273,2288 'input':2396 'instead':1104 'integr':2336 'invalid':911 'invis':1061 'ip':92,174,194,204,694,718,747,763,770,780,785,1250,1268,1289,1313 'ip/provider':1277 'issu':1127,1266,1378,1857 'key':1646,2132,2138,2147 'know':1837 'land':44 'launch':2305 'law':1441 'lawsuit':1411 'layout':2249 'least':1630 'legit':613 'let':269,514 'librari':1219 'lifecycl':372 'like':618,890,1273,1298 'limit':1871,2160,2169,2177,2183,2358 'line':1735,1788,1800 'link':970,996,1065,1494 'linkedin':1397 'list':139,142,156,854,1004,1077,1081,1089,1093,1393,1415,1498,1505,1512,1524,2031,2049,2059,2068 'list-unsubscrib':1003,1076,1080,1092,2048,2058,2067 'list-unsubscribe-post':1088 'liter':1032 'load':1570,1618 'log':1848,1941,2210,2217,2228,2229 'logic':312,2107,2124 'login':1069 'look':617,889,1272,1297 'loop':1374 'lose':1831 'low':263,570,589,1591 'lower':88,1149,1698 'machin':437 'mail':649 'mail-tester.com':592,683 'mailto':675,1083 'maintain':796,1357,2030 'mani':1605 'mark':394,975,1019 'markemailinvalid':458,470,949 'market':11,25,55,72,83,106,134,525,536,740,822,828,1504,1537,2054,2063,2275,2282,2306 'massiv':1264 'match':2351,2367 'matter':259 'mayb':1409 'mean':225 'measur':2258 'mechan':1860,2115 'medium':1115,1549,1684 'messag':666,1647,1946,1977,2008,2033,2062,2091,2118,2144,2170,2195,2222,2240 'messageid':1913 'metric':430,1454,2259 'miss':552,966,1586,1678,1738,1962,2018,2047,2404 'mix':827 'mobil':1569 'modern':621 'monitor':175,314,429,689,954,1369,1955,2339 'month':535 'most':1544 'multi':998 'multi-step':997 'multipart':1177,1185 'multipl':223 'must':895 'mxtoolbox':685 'n':1203 'need':80,760,1306,1536,2244,2254,2264,2272 'never':581,826 'new':173,426,533,1249,1267,1276,1288 'newslett':85 'noth':226,1137,1564 'notif':527,539,834 'nthank':1204 'occurr':910 'one':113,150,208,210,218,221,240,750,1063,1096,1556,1574 'one-click':149,1062,1095 'open':264,357,384,571,1699,1748 'opt':131,1385,1467,1489,1539 'opt-in':130,1466,1488,1538 'optim':1792 'option':170,777,799,1100,1437 'output':2376 'p':672 'pace':1376 'part':1141,1966,1987 'partial':1805,1867 'partner/customer':1523 'password':77,102,322,338,416,701,1529 'password-reset':337,415 'pattern':302,2355 'peopl':122,1381 'per':1845,1958 'per-recipi':1844 'perform':2308 'perman':391 'permiss':116,1432,1463,2397 'permission-bas':1431 'person':43 'plain':1111,1167,1226,1230,1963,1974,1985 'polici':635,771 'pool':812 'post':1091 'postmark':105,805,819 'practic':1344,1502,1784,1940 'pre':1477 'pre-check':1476 'prefer':272,289,512,529,542,1098 'prehead':2203 'preview':1660,1681,1697,1711,1716,1718,1725,1739,1745,1756,1762,1769,1775,1782,2186,2199,2206 'preview/preheader':2193 'prime':1728 'principl':69 'prioriti':89 'process':448,832,1001 'product':411,530 'promise.allsettled':1897 'promo':86 'promot':537 'properti':1990 'protect':97,442 'provid':95,380,623,652,656,711,738,766,788,804,849,880,990,1257,1406,2035,2167,2323 'purchas':1413 'purpos':219 'quarantin':673 'queu':373,2088,2099 'queue':305,306,1952,2269,2335 'queue.add':334 'r':1931 'r.status':1932 'random':295,1694 'rate':177,265,572,591,846,860,883,957,963,1010,1420,1700,1749,1870,1957,2159,2168,2176 're':612 'reach':61,382 'react':479,486,499,1771 'react-email':498 'readabl':1234 'reader':1130,1163 'real':1729 'receipt':79,324,1531 'receiv':599,609,1473,1852 'recipi':385,388,1451,1846 'recommend':628,772,899,1042,1181,1311,1461,1621,1752,1882 'record':191,207,557,579,632,638,651,669,687 'recov':1880 'reduc':300,1102 'refer':253 'reject':1933 'reliabl':2102 'remov':897,906 'removefromalllist':952 'render':1160 'repeat':871 'report':598,691 'reput':444,724,749,809,878,1025,1271,1292,1356,1456 'req':940 'req.body':944 'request':329,2080,2096,2349 'requir':546,625,630,903,1039,1045,1070,1464,2395 'res':941 'resend':821 'resend.emails.send':1188,1905 'reset':78,103,323,339,417,702,1530 'resettoken':343 'respect':276,541,2166 'result':1895,1903,1916 'result.id':1914 'results.filter':1930 'retri':311,919,1859,1934,1951,2106,2114,2123,2126 'return':507,1915 'reusabl':485 'review':2388 'right':1732 'rise':984 'roi':8,22 'rollback':403 'rollout':433 'roof':1405 'rua':674 'ruin':726 'rule':1628 'ruthless':140 'safeti':2398 'save':1674 'save50':1672 'scale':68 'schedul':1317 'scope':2369 'score':593 'scrape':154,1394,1416,1513 'screen':1129,1162 'see':1119,1563 'segment':1153 'send':274,318,332,545,561,679,1108,1184,1245,1259,1278,1293,1350,1423,1806,1811,1829,1847,1856,1865,1876,1886,1936,1943,2078,2085,2104,2111,2120,2164,2173,2208,2214,2230 'sendcampaign':1891 'sender':443,634,877 'sendgrid':114 'sendgrid.net':644 'sent':377,1825,1912,1980,2093,2225 'separ':73,91,816 'server':610,2268 'set':271,582,1355 'setup':183,678,2289,2324 'sever':558,698,835,971,1114,1252,1387,1548,1683,1808,1967,1999,2022,2052,2082,2108,2135,2161,2188,2211 'share':203,693,717,746,748,769,811 'sharp':550 'show':1136,1687 'sign':1199,1206,1484 'signatur':659 'singl':230,1579 'situat':560,700,837,973,1116,1254,1389,1550,1685,1810 'skill':49,2277,2315,2346,2361 'skill-email-systems' 'slow':1572 'slowli':792 'soft':462,917 'sourc':2151 'source-sickn33' 'space':1743 'spam':46,396,568,588,705,722,733,977,982,987,1008,1021,1022,1036,1122,1169,1274,1401,1424,1444,1565,1607 'spammer':620,892,1300 'specif':2383 'spent':31 'spf':165,553,605,633 'spf.google.com':642 'spf1':640 'spike':1362 'spun':1303 'stack':2276 'standard':815,1180 'start':511,793,888,1258,1345 'startup':34 'state':436 'status':1877,1911,1922 'step':999 'still':1665 'stop':2389 'strategi':776 'strict':768,807 'string':1893 'strip':1134,1238 'style':1058 'subject':1193,1734,1787,2239 'subscript':148 'substitut':2379 'success':1956,2401 'sudden':1282 'suffer':1617 'sure':1074 'suspend':852,991,1407 'suspici':1172,1610 'switch':453,1256 'symptom':584,729,858,993,1138,1275,1412,1578,1706,1842 'synchron':2076,2094 'system':3,17,376,528,2280,2292,2298,2318,2327,2333 'tag':1240 'task':2365 'technic':182 'tell':608,1850 'templat':336,397,401,413,414,493,1721,2197,2247,2294,2329 'test':273,406,421,680,1659,2385 'text':1054,1112,1168,1201,1211,1218,1227,1231,1243,1577,1583,1590,1626,1632,1642,1649,1682,1726,1740,1746,1757,1763,1776,1964,1975,1986,1989,2187,2194,2200 'text/plain':1140 'thank':1197 'threaten':850 'three':627 'throttl':2179 'throw':1926 'tier':202,708 'time':256,262,275,296,921,1619 'timeout':1869 'timezon':288 'topic':520 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'track':354,355,371,881,955,1822,1874,1884,1949,2256,2265,2309 'transact':51,70,75,98,303,308,369,696,730,742,757,774,802,818,830,1527,2313 'transactional-on':801 'transient':2128 'treat':35,928,2374 'tri':1901 'trigger':2237 'trust':1310 'tsx':1773 'tuesday':284 'turn':576 'twitter':252 'txt':637,650,668 'type':348 'typescript':933,1186,1888 'ui':2251 'ui-design':2250 'unsubscrib':136,152,158,268,969,981,995,1000,1005,1017,1028,1041,1044,1067,1078,1082,1090,1094,1107,1419,2050,2060,2069 'unsubscribe@example.com':1084 'unsubscribeimmedi':476 'unwil':1450 'updat':531 'us':250 'usabl':1667 'use':90,200,317,364,409,447,490,523,692,706,736,1214,1522,1670,2013,2036,2153,2343,2344,2359 'user':270,286,515,974,1014,1118,1148,1349,1469,1559,1815 'user.email':341 'user@example.com':1192 'usernam':506,509 'v':639,670 'v1-deprecated.tsx':423 'v1.tsx':418 'v2.tsx':420 'valid':688,1960,2384 'valu':1796 'variabl':2007,2015,2143,2155 'verifi':237,243,677 'version':398,399,427 'via':104,107 'view':386,1658,1688,1707 'violat':988 'visibl':1046,1585,1714 'visual':2248 'volum':782,798,1247,1280,1295,1342,1359 'vs':71 'warm':171,195,789,1315,1367 'warm-up':1314,1366 'warn':1968,2000,2023,2083,2162,2212 'wast':1703,1741 'way':298,1835 'webhook':452,864,934,2020,2043 'websit':1516 'week':198,281,532,1318,1323,1328,1333,1677 'welcom':508,1194,1196,1202 'welcomeemail':505 'without':563,614,1110,1520,1525,1873,2066,2105,2121,2158,2174,2185,2198,2209,2226 'work':54,1164 'workflow':2286,2321 'write':2301 'wrong':261 'yet':32 'you@example.com':1190","prices":[{"id":"c8156a02-6659-4be2-bd57-cba3b97222f9","listingId":"d66c1b15-0852-436e-9c16-db485730e2af","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:36:31.397Z"}],"sources":[{"listingId":"d66c1b15-0852-436e-9c16-db485730e2af","source":"github","sourceId":"sickn33/antigravity-awesome-skills/email-systems","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/email-systems","isPrimary":false,"firstSeenAt":"2026-04-18T21:36:31.397Z","lastSeenAt":"2026-04-24T06:51:07.219Z"}],"details":{"listingId":"d66c1b15-0852-436e-9c16-db485730e2af","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"email-systems","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34831,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-24T06:41:17Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"7415fd99363afe58d995457c3eaad5644034dd70","skill_md_path":"skills/email-systems/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/email-systems"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"email-systems","description":"Email has the highest ROI of any marketing channel. $36 for every"},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/email-systems"},"updatedAt":"2026-04-24T06:51:07.219Z"}}