vibes-plug 1.0.0 → 2.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (183) hide show
  1. package/.claude/rules/vibes-plug-core.md +32 -0
  2. package/.cursor/rules/vibes-plug-core.mdc +51 -0
  3. package/.cursorrules +42 -0
  4. package/AGENTS.md +96 -0
  5. package/BLUEPRINT.md +309 -125
  6. package/CHANGELOG.md +183 -1
  7. package/CLAUDE.md +70 -0
  8. package/LICENSE +1 -1
  9. package/README.md +641 -263
  10. package/index.js +19 -0
  11. package/package.json +61 -25
  12. package/plugin.json +24 -7
  13. package/scripts/generate_swarm_gif.py +295 -0
  14. package/scripts/install.js +201 -0
  15. package/skills/accessibility-testing-expert/SKILL.md +116 -0
  16. package/skills/ai-cost-token-optimizer/SKILL.md +82 -0
  17. package/skills/ai-evals-benchmark-expert/SKILL.md +188 -0
  18. package/skills/ai-llm-integration-expert/SKILL.md +147 -122
  19. package/skills/ai-media-generation-expert/SKILL.md +172 -0
  20. package/skills/ai-prompt-engineering-expert/SKILL.md +84 -0
  21. package/skills/angular-expert/SKILL.md +148 -0
  22. package/skills/api-design-expert/SKILL.md +316 -309
  23. package/skills/api-gateway-proxy-expert/SKILL.md +81 -0
  24. package/skills/app-analyzer-optimizer/SKILL.md +195 -188
  25. package/skills/apple-ecosystem-expert/SKILL.md +145 -0
  26. package/skills/{asisten_ramah → asisten-ramah}/SKILL.md +7 -1
  27. package/skills/astro-framework-expert/SKILL.md +200 -0
  28. package/skills/async-queue-temporal-expert/SKILL.md +240 -0
  29. package/skills/authentication-identity-expert/SKILL.md +279 -45
  30. package/skills/auto-doc-updater/SKILL.md +219 -203
  31. package/skills/autonomous-chaos-monkey/SKILL.md +63 -0
  32. package/skills/autonomous-red-teamer/SKILL.md +203 -0
  33. package/skills/autonomous-tdd-debugger/SKILL.md +71 -0
  34. package/skills/background-jobs-queue-expert/SKILL.md +235 -0
  35. package/skills/biome-linter-formatter-expert/SKILL.md +89 -0
  36. package/skills/blockchain-web3-expert/SKILL.md +115 -0
  37. package/skills/bootstrap-to-modern/SKILL.md +93 -86
  38. package/skills/brainstorming/SKILL.md +381 -353
  39. package/skills/browser-automation-expert/SKILL.md +222 -0
  40. package/skills/bun-runtime-expert/SKILL.md +7 -1
  41. package/skills/chatbot-messaging-expert/SKILL.md +114 -0
  42. package/skills/ci-cd-devops-architect/SKILL.md +81 -45
  43. package/skills/cloud-hosting-expert/SKILL.md +249 -243
  44. package/skills/coderabbit/SKILL.md +197 -191
  45. package/skills/compliance-gdpr-privacy-expert/SKILL.md +85 -0
  46. package/skills/cron-scheduler-expert/SKILL.md +304 -0
  47. package/skills/data-pipeline-etl-expert/SKILL.md +84 -0
  48. package/skills/data-telemetry-expert/SKILL.md +218 -212
  49. package/skills/data-visualization-expert/SKILL.md +154 -0
  50. package/skills/database-migration-versioning-expert/SKILL.md +90 -0
  51. package/skills/database-orm-expert/SKILL.md +303 -293
  52. package/skills/dependency-upgrade-migrator/SKILL.md +301 -0
  53. package/skills/design-system-architect/SKILL.md +278 -242
  54. package/skills/desktop-electron-expert/SKILL.md +128 -0
  55. package/skills/documentation-site-expert/SKILL.md +59 -0
  56. package/skills/doku-mcp-server/SKILL.md +257 -0
  57. package/skills/doku-payment-gateway/SKILL.md +233 -0
  58. package/skills/domain-driven-design-expert/SKILL.md +82 -0
  59. package/skills/e2e-testing-expert/SKILL.md +320 -314
  60. package/skills/ecommerce-expert/SKILL.md +87 -0
  61. package/skills/edge-serverless-db-expert/SKILL.md +99 -0
  62. package/skills/email-notification-expert/SKILL.md +368 -0
  63. package/skills/error-resilience-expert/SKILL.md +486 -0
  64. package/skills/event-driven-architect/SKILL.md +86 -80
  65. package/skills/feature-flag-analytics-expert/SKILL.md +66 -0
  66. package/skills/file-upload-media-expert/SKILL.md +437 -0
  67. package/skills/firebase-security-expert/SKILL.md +7 -1
  68. package/skills/form-validation-expert/SKILL.md +407 -0
  69. package/skills/fullstack-expert/SKILL.md +260 -201
  70. package/skills/fullstack-expert/references/api_design_guide.md +466 -466
  71. package/skills/fullstack-expert/references/multi_language_backend.md +528 -528
  72. package/skills/fullstack-expert/scripts/api_contract_validator.py +253 -253
  73. package/skills/fullstack-expert/scripts/architecture_analyzer.py +326 -326
  74. package/skills/gemini-agent-booster/SKILL.md +142 -104
  75. package/skills/geospatial-maps-expert/SKILL.md +80 -0
  76. package/skills/global-a11y-i18n-expert/SKILL.md +86 -80
  77. package/skills/glsl-shader-expert/SKILL.md +107 -0
  78. package/skills/go-programming-expert/SKILL.md +300 -294
  79. package/skills/graph-rag-knowledge-expert/SKILL.md +159 -0
  80. package/skills/graphql-apollo-expert/SKILL.md +114 -0
  81. package/skills/headless-cms-expert/SKILL.md +181 -0
  82. package/skills/hig/SKILL.md +193 -187
  83. package/skills/js-backend-expert/SKILL.md +218 -191
  84. package/skills/legacy-code-translator/SKILL.md +71 -0
  85. package/skills/local-slm-edge-ai-expert/SKILL.md +167 -0
  86. package/skills/logging-error-tracking-expert/SKILL.md +344 -0
  87. package/skills/mcp-client-orchestrator/SKILL.md +76 -0
  88. package/skills/mcp-server-architect/SKILL.md +226 -126
  89. package/skills/micro-frontend-architect/SKILL.md +112 -0
  90. package/skills/mobile-expo-expert/SKILL.md +191 -185
  91. package/skills/mobile-push-notification-expert/SKILL.md +71 -0
  92. package/skills/modern-css-native-expert/SKILL.md +189 -0
  93. package/skills/monday-design-aesthetic/SKILL.md +72 -66
  94. package/skills/monorepo-architect/SKILL.md +232 -226
  95. package/skills/mpa-orchestrator/SKILL.md +120 -101
  96. package/skills/multi-agent-orchestration/SKILL.md +173 -153
  97. package/skills/multiple-entry-points/SKILL.md +91 -55
  98. package/skills/mvc-expert/SKILL.md +237 -231
  99. package/skills/n8n-automation-expert/SKILL.md +89 -0
  100. package/skills/nextjs-app-router-expert/SKILL.md +148 -0
  101. package/skills/openapi-swagger-codegen-expert/SKILL.md +67 -0
  102. package/skills/payment-gateway-expert/SKILL.md +129 -45
  103. package/skills/pdf-document-generation-expert/SKILL.md +91 -0
  104. package/skills/performance-web-vitals/SKILL.md +337 -331
  105. package/skills/post-quantum-crypto-migrator/SKILL.md +57 -0
  106. package/skills/prd-architect/SKILL.md +206 -190
  107. package/skills/proactive-background-watcher/SKILL.md +68 -0
  108. package/skills/production-ready-hardener/PRODUCTION_READINESS_REPORT.md +67 -0
  109. package/skills/production-ready-hardener/SKILL.md +461 -468
  110. package/skills/production-ready-hardener/references/production_checklist.md +161 -161
  111. package/skills/production-ready-hardener/scripts/production_readiness_scanner.py +881 -875
  112. package/skills/project-context-mapper/SKILL.md +85 -0
  113. package/skills/pwa-offline-first-expert/SKILL.md +185 -0
  114. package/skills/python-programming-expert/SKILL.md +407 -270
  115. package/skills/rate-limit-abuse-prevention/SKILL.md +377 -0
  116. package/skills/realtime-collaboration-expert/SKILL.md +99 -45
  117. package/skills/rich-text-editor-expert/SKILL.md +177 -0
  118. package/skills/rust-programming-expert/SKILL.md +240 -234
  119. package/skills/saas-billing/SKILL.md +382 -376
  120. package/skills/saas-multi-tenant/SKILL.md +256 -236
  121. package/skills/saas-mvp-launcher/SKILL.md +30 -1
  122. package/skills/saas-transformer/SKILL.md +499 -445
  123. package/skills/saas-transformer/references/billing_integration_guide.md +401 -401
  124. package/skills/saas-transformer/references/feature_gating_patterns.md +137 -137
  125. package/skills/saas-transformer/references/saas_transformation_checklist.md +121 -121
  126. package/skills/saas-transformer/scripts/saas_transformation_scanner.py +39 -29
  127. package/skills/scalability-clean-code/SKILL.md +234 -228
  128. package/skills/search-engine-expert/SKILL.md +89 -0
  129. package/skills/secure-fuzz-testing/SKILL.md +7 -1
  130. package/skills/self-evolving-memory-graph/SKILL.md +91 -0
  131. package/skills/self-healing-cloud-orchestrator/SKILL.md +57 -0
  132. package/skills/senior-frontend/SKILL.md +85 -105
  133. package/skills/seo/SKILL.md +258 -224
  134. package/skills/session-context-loader/SKILL.md +83 -0
  135. package/skills/session-handoff-resume/SKILL.md +163 -157
  136. package/skills/{skill_baru → skill-baru}/SKILL.md +177 -146
  137. package/skills/solidjs-expert/SKILL.md +80 -0
  138. package/skills/spa-orchestrator/SKILL.md +306 -287
  139. package/skills/sse-websocket-streaming-expert/SKILL.md +93 -0
  140. package/skills/state-management-expert/SKILL.md +277 -271
  141. package/skills/supabase-migration/SKILL.md +47 -1
  142. package/skills/supabase-security-expert/SKILL.md +248 -242
  143. package/skills/svelte-sveltekit-expert/SKILL.md +91 -0
  144. package/skills/svg-animation-motion-expert/SKILL.md +115 -0
  145. package/skills/tailwind-expert/SKILL.md +139 -187
  146. package/skills/tanstack-query-expert/SKILL.md +204 -198
  147. package/skills/tauri-expert/SKILL.md +7 -1
  148. package/skills/token-saver/SKILL.md +118 -110
  149. package/skills/typescript-expert/SKILL.md +329 -278
  150. package/skills/ui-components-expert/SKILL.md +166 -63
  151. package/skills/ui-ux-pro-max/SKILL.md +221 -200
  152. package/skills/vector-db-rag-expert/SKILL.md +208 -0
  153. package/skills/vibe-code-gardener/SKILL.md +180 -172
  154. package/skills/visual-qa-vision-agent/SKILL.md +71 -0
  155. package/skills/voice-ai-realtime-agent/SKILL.md +202 -0
  156. package/skills/vue-frontend-expert/SKILL.md +132 -0
  157. package/skills/wasm-edge-computing-expert/SKILL.md +97 -0
  158. package/skills/web-3d-graphics-expert/SKILL.md +137 -0
  159. package/skills/web-game-engine-expert/SKILL.md +102 -0
  160. package/skills/web-scraper/SKILL.md +98 -146
  161. package/skills/website-design-cloner/SKILL.md +180 -0
  162. package/skills/webxr-ar-vr-expert/SKILL.md +123 -0
  163. package/skills/wordpress-headless-expert/SKILL.md +144 -0
  164. package/skills/zero-to-prod-orchestrator/SKILL.md +231 -180
  165. package/skills/zero-trust-secret-vault/SKILL.md +88 -0
  166. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -20
  167. package/CONTRIBUTING.md +0 -199
  168. package/SECURITY.md +0 -21
  169. package/banner.png +0 -0
  170. package/skills/senior-fullstack/SKILL.md +0 -167
  171. package/skills/senior-fullstack/references/architecture_patterns.md +0 -160
  172. package/skills/senior-fullstack/references/development_workflows.md +0 -222
  173. package/skills/senior-fullstack/references/tech_stack_guide.md +0 -190
  174. package/skills/senior-fullstack/scripts/code_quality_analyzer.py +0 -114
  175. package/skills/senior-fullstack/scripts/fullstack_scaffolder.py +0 -114
  176. package/skills/senior-fullstack/scripts/project_scaffolder.py +0 -114
  177. package/skills/seo-aeo-landing-page-writer/SKILL.md +0 -97
  178. package/skills/seo-geo/SKILL.md +0 -188
  179. package/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-310.pyc +0 -0
  180. package/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-312.pyc +0 -0
  181. package/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-310.pyc +0 -0
  182. package/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-312.pyc +0 -0
  183. package/skills/ui_ux_expert/SKILL.md +0 -114
@@ -0,0 +1,87 @@
1
+ ---
2
+ name: ecommerce-expert
3
+ description: "Expert guide for e-commerce architecture (Shopify Storefront, Medusa.js, Saleor), product catalogs, cart/checkout UX, and order management / Panduan ahli arsitektur e-commerce (Shopify, Medusa.js, Saleor), katalog produk, UX keranjang/checkout, dan manajemen pesanan."
4
+ author: "Roedy Rustam"
5
+ ---
6
+
7
+ # E-Commerce Expert (2026 Edition)
8
+
9
+ [English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
10
+
11
+ ---
12
+
13
+ <a name="english"></a>
14
+ ## English
15
+
16
+ ### Orchestration & Integration
17
+ - **`payment-gateway-expert`**: Stripe, Xendit, Midtrans payment integration.
18
+ - **`nextjs-app-router-expert`**: SSR product pages and cart functionality.
19
+ - **`seo`**: Product schema markup, sitemaps, and SEO optimization.
20
+ - **`saas-billing`**: Subscription-based e-commerce models.
21
+ - **`headless-cms-expert`**: Content management for product descriptions and pages.
22
+
23
+ ### Description
24
+ Expert guide for building modern e-commerce applications. Covers Shopify Storefront API (headless commerce), Medusa.js v2 (open-source, self-hosted), Saleor (GraphQL-first), product catalog design, cart state management, checkout flows, inventory management, order fulfillment, and SEO for product pages.
25
+
26
+ ### Trigger Conditions
27
+ - Building an online store or e-commerce platform.
28
+ - Integrating Shopify Storefront API with custom frontend.
29
+ - Setting up Medusa.js or Saleor for headless commerce.
30
+ - Designing product catalog schemas and cart/checkout UX.
31
+
32
+ ---
33
+
34
+ ### Platform Selection
35
+
36
+ | Platform | Type | API | Self-Hosted | Best For |
37
+ |----------|------|-----|-------------|----------|
38
+ | Shopify Storefront | SaaS + Headless | GraphQL | ❌ | Quick launch, large catalog |
39
+ | Medusa.js v2 | Open-source | REST + JS SDK | ✅ | Full control, customization |
40
+ | Saleor | Open-source | GraphQL | ✅ | Enterprise, multi-channel |
41
+ | WooCommerce | Plugin (WordPress) | REST | ✅ | WordPress ecosystem |
42
+
43
+ ### Core Patterns
44
+
45
+ ```typescript
46
+ // Shopify Storefront API — Fetch products
47
+ const SHOPIFY_QUERY = `{
48
+ products(first: 12, sortKey: BEST_SELLING) {
49
+ edges {
50
+ node {
51
+ id title handle description
52
+ priceRange { minVariantPrice { amount currencyCode } }
53
+ images(first: 1) { edges { node { url altText } } }
54
+ variants(first: 5) { edges { node { id title availableForSale price { amount } } } }
55
+ }
56
+ }
57
+ }
58
+ }`;
59
+
60
+ async function getProducts() {
61
+ const res = await fetch(process.env.SHOPIFY_STOREFRONT_URL!, {
62
+ method: 'POST',
63
+ headers: {
64
+ 'Content-Type': 'application/json',
65
+ 'X-Shopify-Storefront-Access-Token': process.env.SHOPIFY_TOKEN!,
66
+ },
67
+ body: JSON.stringify({ query: SHOPIFY_QUERY }),
68
+ });
69
+ return (await res.json()).data.products.edges.map((e) => e.node);
70
+ }
71
+ ```
72
+
73
+ ## Orchestration & Integration
74
+ - `payment-gateway-expert`, `nextjs-app-router-expert`, `seo`, `saas-billing`
75
+
76
+ ---
77
+
78
+ <a name="bahasa-indonesia"></a>
79
+ ## Bahasa Indonesia
80
+
81
+ ### Deskripsi
82
+ Panduan ahli untuk membangun aplikasi e-commerce modern. Mencakup Shopify Storefront API, Medusa.js v2, Saleor, desain katalog produk, manajemen keranjang, alur checkout, manajemen inventaris, dan SEO halaman produk.
83
+
84
+ ### Kondisi Pemicu
85
+ - Membangun toko online atau platform e-commerce.
86
+ - Mengintegrasikan Shopify Storefront API dengan frontend kustom.
87
+ - Menyiapkan Medusa.js atau Saleor untuk headless commerce.
@@ -0,0 +1,99 @@
1
+ ---
2
+ name: edge-serverless-db-expert
3
+ description: "Expert guide for Serverless & Edge Databases (Neon Serverless Postgres, Cloudflare D1, Turso/libsql, Upstash Redis), cold-start mitigation, and connection pooling / Panduan ahli database Serverless & Edge (Neon, Cloudflare D1, Turso, Upstash)."
4
+ author: "Roedy Rustam"
5
+ ---
6
+
7
+ # Edge & Serverless DB Expert
8
+
9
+ [English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
10
+
11
+ ---
12
+
13
+ <a name="english"></a>
14
+ ## English
15
+
16
+ ### Purpose & Overview
17
+ Best practices for building ultra-low-latency 2026/2027 applications powered by serverless and edge databases. Exploit Neon Serverless Postgres, Cloudflare D1, Turso, Upstash Serverless Redis & Vector. Implement zero-cold-start strategies and HTTP connection pooling.
18
+
19
+ ### Key Capabilities
20
+ - **Neon & Cloudflare D1**: Serverless autoscaling Postgres with instant branching. Distributed edge SQLite.
21
+ - **Connection Pooling**: WebSocket/HTTP proxy pooling (Neon Serverless Driver, Upstash Redis over HTTP) for edge workers. Prevent TCP pool exhaustion.
22
+ - **Embedded Replicas**: Sync edge SQLite read-replicas with central cloud databases for sub-10ms queries.
23
+
24
+ ```typescript
25
+ import { neon } from '@neondatabase/serverless';
26
+ import { drizzle } from 'drizzle-orm/neon-http';
27
+
28
+ const sql = neon(process.env.DATABASE_URL!);
29
+ export const db = drizzle({ client: sql });
30
+ ```
31
+
32
+ ### Implementation Checklist
33
+ - [ ] Use HTTP/WebSocket drivers (e.g., `neon-http`) for querying databases from Edge Workers/Functions.
34
+ - [ ] Configure connection pooling (PgBouncer, Prisma Accelerate) for standard TCP connections to avoid exhausting database connection limits.
35
+ - [ ] Use read-replicas near the edge location for global deployments to minimize latency.
36
+ - [ ] Cache read-heavy queries at the edge using Upstash Redis or Cloudflare KV.
37
+
38
+ ### Example: Upstash Redis Edge Caching
39
+ ```typescript
40
+ import { Redis } from '@upstash/redis';
41
+
42
+ const redis = new Redis({
43
+ url: process.env.UPSTASH_REDIS_REST_URL!,
44
+ token: process.env.UPSTASH_REDIS_REST_TOKEN!,
45
+ });
46
+
47
+ export async function getCachedData(key: string) {
48
+ let data = await redis.get(key);
49
+ if (!data) {
50
+ data = await fetchFromDB();
51
+ await redis.set(key, data, { ex: 3600 }); // Cache for 1 hour
52
+ }
53
+ return data;
54
+ }
55
+ ```
56
+
57
+ ## Orchestration & Integration
58
+ - Integrates with: `database-orm-expert`, `js-backend-expert`, `cloud-hosting-expert`.
59
+
60
+ ---
61
+
62
+ <a name="bahasa-indonesia"></a>
63
+ ## Bahasa Indonesia
64
+
65
+ ### Deskripsi
66
+ Praktik terbaik membangun aplikasi latensi rendah 2026/2027 dengan database serverless dan edge. Manfaatkan Neon Serverless Postgres, Cloudflare D1, Turso, Upstash Serverless Redis & Vector. Implementasi strategi tanpa cold-start dan connection pooling HTTP.
67
+
68
+ ### Fitur Utama
69
+ - **Neon & Cloudflare D1**: Serverless Postgres autoscaling dengan branching instan. Distributed edge SQLite.
70
+ - **Connection Pooling**: Proxy pooling HTTP/WebSocket untuk edge worker. Cegah kehabisan koneksi TCP.
71
+ - **Embedded Replicas**: Sinkronisasi read-replica SQLite di edge dengan database utama untuk query di bawah 10ms.
72
+
73
+ ### Checklist Implementasi
74
+ - [ ] Gunakan driver HTTP/WebSocket (misal: `neon-http`) untuk mengakses database dari Edge Workers/Functions.
75
+ - [ ] Konfigurasi connection pooling (PgBouncer, Prisma Accelerate) pada koneksi TCP standar untuk mencegah batas koneksi habis.
76
+ - [ ] Gunakan read-replicas di dekat lokasi edge untuk deployment global guna meminimalkan latensi.
77
+ - [ ] Cache query berat di edge menggunakan Upstash Redis atau Cloudflare KV.
78
+
79
+ ### Contoh: Upstash Redis Edge Caching
80
+ ```typescript
81
+ import { Redis } from '@upstash/redis';
82
+
83
+ const redis = new Redis({
84
+ url: process.env.UPSTASH_REDIS_REST_URL!,
85
+ token: process.env.UPSTASH_REDIS_REST_TOKEN!,
86
+ });
87
+
88
+ export async function getCachedData(key: string) {
89
+ let data = await redis.get(key);
90
+ if (!data) {
91
+ data = await fetchFromDB();
92
+ await redis.set(key, data, { ex: 3600 }); // Cache 1 jam
93
+ }
94
+ return data;
95
+ }
96
+ ```
97
+
98
+ ## Integrasi Orkestrasi
99
+ - Terintegrasi dengan: `database-orm-expert`, `js-backend-expert`, `cloud-hosting-expert`.
@@ -0,0 +1,368 @@
1
+ ---
2
+ name: email-notification-expert
3
+ description: "Expert guide for transactional email (Resend, Postmark, SES), React Email templates, in-app notifications, and unified communication pipelines / Panduan ahli untuk email transaksional (Resend, Postmark, SES), template React Email, notifikasi in-app, dan pipeline komunikasi terpadu."
4
+ author: "Roedy Rustam"
5
+ ---
6
+
7
+ # Email & Notification Expert (2026 Edition)
8
+
9
+ [English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
10
+
11
+ ---
12
+
13
+ <a name="english"></a>
14
+ ## English
15
+
16
+ ### Orchestration & Integration
17
+ Connects and orchestrates with relevant domain skills like `brainstorming`, `zero-to-prod-orchestrator`, and `project-context-mapper` to ensure cohesive execution.
18
+
19
+ ### Description
20
+ Production-grade guide for building reliable email delivery systems and unified notification pipelines. Covers **Resend**, **Postmark**, **AWS SES**, **React Email** / **MJML** template engines, **email deliverability** (SPF, DKIM, DMARC), **in-app notification systems** (bell icon, toast, notification center), **webhook-triggered email flows**, **email queuing** with BullMQ/Inngest, and **CAN-SPAM/GDPR** compliance.
21
+
22
+ ### Trigger Conditions
23
+ Activate this skill when:
24
+ - Setting up transactional email (welcome, password reset, invoices, team invites).
25
+ - Building email templates with React Email or MJML.
26
+ - Integrating Resend, Postmark, SendGrid, or AWS SES.
27
+ - Implementing in-app notification systems (real-time bell, toast, notification center).
28
+ - Configuring email deliverability (SPF, DKIM, DMARC records).
29
+ - Building email queue systems for high-volume sends.
30
+ - Implementing unsubscribe management and compliance.
31
+
32
+ ---
33
+
34
+ ### Email Provider Selection Guide
35
+
36
+ | Provider | Best For | Key Strength | Pricing Model |
37
+ |---|---|---|---|
38
+ | **Resend** | Modern apps, React Email | Developer DX, React components as email | Per email (free tier: 3k/mo) |
39
+ | **Postmark** | Transactional-only | Industry-best deliverability, dedicated IP | Per email (free tier: 100/mo) |
40
+ | **AWS SES** | High volume, cost-sensitive | Cheapest at scale ($0.10/1000 emails) | Per email |
41
+ | **SendGrid** | Marketing + Transactional | Full marketing suite, analytics | Tiered plans |
42
+ | **Plunk** | Self-hostable, open-source | Full control, no vendor lock-in | Free (self-hosted) |
43
+
44
+ **Recommendation**: Use **Resend** for most new projects (best DX with React Email). Use **Postmark** for mission-critical transactional emails. Use **AWS SES** for high-volume (10k+/day) cost optimization.
45
+
46
+ ---
47
+
48
+ ### 1. React Email Templates
49
+
50
+ ```tsx
51
+ // emails/welcome.tsx
52
+ import {
53
+ Body, Button, Container, Head, Heading,
54
+ Html, Img, Link, Preview, Section, Text,
55
+ } from '@react-email/components';
56
+
57
+ interface WelcomeEmailProps {
58
+ username: string;
59
+ loginUrl: string;
60
+ }
61
+
62
+ export default function WelcomeEmail({ username, loginUrl }: WelcomeEmailProps) {
63
+ return (
64
+ <Html>
65
+ <Head />
66
+ <Preview>Welcome to our platform, {username}!</Preview>
67
+ <Body style={main}>
68
+ <Container style={container}>
69
+ <Img src="https://yourdomain.com/logo.png" width={48} height={48} alt="Logo" />
70
+ <Heading style={heading}>Welcome, {username}! 🎉</Heading>
71
+ <Text style={text}>
72
+ We're thrilled to have you on board. Your account is ready.
73
+ </Text>
74
+ <Section style={buttonContainer}>
75
+ <Button style={button} href={loginUrl}>
76
+ Get Started
77
+ </Button>
78
+ </Section>
79
+ <Text style={footer}>
80
+ If you didn't create this account, you can safely ignore this email.
81
+ </Text>
82
+ </Container>
83
+ </Body>
84
+ </Html>
85
+ );
86
+ }
87
+
88
+ const main = { backgroundColor: '#f6f9fc', fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif' };
89
+ const container = { backgroundColor: '#ffffff', margin: '0 auto', padding: '40px 20px', borderRadius: '8px', maxWidth: '560px' };
90
+ const heading = { fontSize: '24px', fontWeight: '600' as const, color: '#1a1a1a', margin: '24px 0 16px' };
91
+ const text = { fontSize: '16px', lineHeight: '26px', color: '#484848' };
92
+ const buttonContainer = { textAlign: 'center' as const, margin: '32px 0' };
93
+ const button = { backgroundColor: '#5046e5', borderRadius: '6px', color: '#fff', fontSize: '16px', padding: '12px 24px', textDecoration: 'none' };
94
+ const footer = { fontSize: '13px', color: '#999', marginTop: '32px' };
95
+ ```
96
+
97
+ ---
98
+
99
+ ### 2. Sending Emails with Resend
100
+
101
+ ```typescript
102
+ // lib/email.ts
103
+ import { Resend } from 'resend';
104
+ import WelcomeEmail from '@/emails/welcome';
105
+
106
+ const resend = new Resend(process.env.RESEND_API_KEY);
107
+
108
+ export async function sendWelcomeEmail(to: string, username: string) {
109
+ const { data, error } = await resend.emails.send({
110
+ from: 'Your App <noreply@yourdomain.com>',
111
+ to,
112
+ subject: `Welcome to Our Platform, ${username}!`,
113
+ react: WelcomeEmail({ username, loginUrl: 'https://app.yourdomain.com/login' }),
114
+ // Optional: plain text fallback
115
+ text: `Welcome ${username}! Get started at https://app.yourdomain.com/login`,
116
+ // Optional: tags for analytics
117
+ tags: [
118
+ { name: 'category', value: 'onboarding' },
119
+ ],
120
+ });
121
+
122
+ if (error) {
123
+ throw new Error(`Failed to send welcome email: ${error.message}`);
124
+ }
125
+
126
+ return data;
127
+ }
128
+ ```
129
+
130
+ ---
131
+
132
+ ### 3. Email Queue for High-Volume
133
+
134
+ ```typescript
135
+ // queues/email-queue.ts
136
+ import { Queue, Worker } from 'bullmq';
137
+ import { sendEmail } from '@/lib/email';
138
+
139
+ // Queue definition
140
+ export const emailQueue = new Queue('emails', {
141
+ connection: { host: process.env.REDIS_HOST, port: 6379 },
142
+ defaultJobOptions: {
143
+ attempts: 3,
144
+ backoff: { type: 'exponential', delay: 2000 },
145
+ removeOnComplete: { age: 86400 }, // Keep for 24h
146
+ removeOnFail: { age: 604800 }, // Keep failed for 7 days
147
+ },
148
+ });
149
+
150
+ // Worker (separate process)
151
+ const emailWorker = new Worker('emails', async (job) => {
152
+ const { type, to, data } = job.data;
153
+
154
+ switch (type) {
155
+ case 'welcome':
156
+ await sendWelcomeEmail(to, data.username);
157
+ break;
158
+ case 'password-reset':
159
+ await sendPasswordResetEmail(to, data.resetToken);
160
+ break;
161
+ case 'invoice':
162
+ await sendInvoiceEmail(to, data.invoiceId);
163
+ break;
164
+ default:
165
+ throw new Error(`Unknown email type: ${type}`);
166
+ }
167
+ }, {
168
+ connection: { host: process.env.REDIS_HOST, port: 6379 },
169
+ concurrency: 5, // Process 5 emails at a time
170
+ limiter: { max: 50, duration: 1000 }, // Max 50 emails/second (respect provider limits)
171
+ });
172
+
173
+ // Enqueue email from API route
174
+ export async function queueEmail(type: string, to: string, data: Record<string, unknown>) {
175
+ await emailQueue.add(type, { type, to, data });
176
+ }
177
+ ```
178
+
179
+ ---
180
+
181
+ ### 4. Email Deliverability Setup
182
+
183
+ #### DNS Records Required
184
+ ```
185
+ # SPF — Authorize sending servers
186
+ TXT @ "v=spf1 include:_spf.resend.com ~all"
187
+
188
+ # DKIM — Cryptographic signature
189
+ CNAME resend._domainkey resend._domainkey.yourdomain.com
190
+
191
+ # DMARC — Policy for failed authentication
192
+ TXT _dmarc "v=DMARC1; p=quarantine; rua=mailto:dmarc@yourdomain.com; pct=100"
193
+
194
+ # Return-Path (custom bounce domain)
195
+ CNAME bounce feedback-smtp.us-east-1.amazonses.com
196
+ ```
197
+
198
+ #### Deliverability Checklist
199
+ - [ ] SPF record configured and verified
200
+ - [ ] DKIM signing enabled and verified
201
+ - [ ] DMARC policy set to at least `p=quarantine`
202
+ - [ ] Custom `From` domain (not `@gmail.com` or `@resend.dev`)
203
+ - [ ] List-Unsubscribe header present in all marketing emails
204
+ - [ ] Bounce handling configured (remove invalid addresses)
205
+ - [ ] Complaint feedback loop registered with major ISPs
206
+ - [ ] Email content passes spam filter checks (no ALL CAPS, excessive links)
207
+
208
+ ---
209
+
210
+ ### 5. In-App Notification System
211
+
212
+ ```typescript
213
+ // db/schema — Notification table (Drizzle ORM)
214
+ import { pgTable, text, timestamp, boolean, uuid } from 'drizzle-orm/pg-core';
215
+
216
+ export const notifications = pgTable('notifications', {
217
+ id: uuid('id').primaryKey().defaultRandom(),
218
+ userId: uuid('user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),
219
+ type: text('type').notNull(), // 'info' | 'warning' | 'success' | 'error'
220
+ title: text('title').notNull(),
221
+ message: text('message').notNull(),
222
+ actionUrl: text('action_url'),
223
+ isRead: boolean('is_read').default(false).notNull(),
224
+ createdAt: timestamp('created_at').defaultNow().notNull(),
225
+ });
226
+
227
+ // API: Mark notification as read
228
+ export async function markAsRead(notificationId: string, userId: string) {
229
+ await db.update(notifications)
230
+ .set({ isRead: true })
231
+ .where(and(
232
+ eq(notifications.id, notificationId),
233
+ eq(notifications.userId, userId),
234
+ ));
235
+ }
236
+
237
+ // API: Get unread count
238
+ export async function getUnreadCount(userId: string): Promise<number> {
239
+ const [result] = await db.select({ count: count() })
240
+ .from(notifications)
241
+ .where(and(
242
+ eq(notifications.userId, userId),
243
+ eq(notifications.isRead, false),
244
+ ));
245
+ return result.count;
246
+ }
247
+ ```
248
+
249
+ ```tsx
250
+ // components/notification-bell.tsx
251
+ 'use client';
252
+
253
+ import { useQuery } from '@tanstack/react-query';
254
+ import { Bell } from 'lucide-react';
255
+
256
+ export function NotificationBell() {
257
+ const { data: unreadCount } = useQuery({
258
+ queryKey: ['notifications', 'unread-count'],
259
+ queryFn: () => fetch('/api/notifications/unread-count').then(r => r.json()),
260
+ refetchInterval: 30_000, // Poll every 30 seconds
261
+ });
262
+
263
+ return (
264
+ <button className="notification-bell" aria-label={`${unreadCount ?? 0} unread notifications`}>
265
+ <Bell size={20} />
266
+ {unreadCount > 0 && (
267
+ <span className="notification-badge">{unreadCount > 99 ? '99+' : unreadCount}</span>
268
+ )}
269
+ </button>
270
+ );
271
+ }
272
+ ```
273
+
274
+ ---
275
+
276
+ ### 6. Unsubscribe & Compliance
277
+
278
+ ```typescript
279
+ // Mandatory headers for CAN-SPAM/GDPR compliance
280
+ const emailHeaders = {
281
+ 'List-Unsubscribe': '<https://app.yourdomain.com/unsubscribe?token=xxx>',
282
+ 'List-Unsubscribe-Post': 'List-Unsubscribe=One-Click',
283
+ };
284
+
285
+ // One-click unsubscribe endpoint
286
+ export async function POST(request: Request) {
287
+ const { token } = await request.json();
288
+ const decoded = verifyUnsubscribeToken(token);
289
+ await db.update(emailPreferences)
290
+ .set({ unsubscribed: true, unsubscribedAt: new Date() })
291
+ .where(eq(emailPreferences.userId, decoded.userId));
292
+ return new Response('Unsubscribed', { status: 200 });
293
+ }
294
+ ```
295
+
296
+ ---
297
+
298
+ ### Common Pitfalls to Avoid
299
+
300
+ | Anti-Pattern | Problem | Correct Approach |
301
+ |---|---|---|
302
+ | Sending email synchronously in API routes | Slow response times, timeout risk | Queue emails with BullMQ/Inngest |
303
+ | Using `@gmail.com` as sender | Poor deliverability, spam filters | Use custom domain with SPF/DKIM |
304
+ | No plain-text fallback | Emails may display incorrectly | Always include `text` alongside HTML |
305
+ | Hardcoded email content | Can't update without deploys | Use templates with dynamic variables |
306
+ | No unsubscribe link | CAN-SPAM violation, ISP blocking | Always include List-Unsubscribe header |
307
+ | Sending passwords in email | Security vulnerability | Send one-time reset links with expiry |
308
+
309
+ ---
310
+
311
+ ### Integration with Other Skills
312
+
313
+ - `saas-billing` — Payment receipt emails, failed payment dunning sequences
314
+ - `saas-transformer` — Team invitation emails, workspace notifications
315
+ - `authentication-identity-expert` — Password reset emails, email verification, MFA codes
316
+ - `mobile-push-notification-expert` — Unified notification strategy (email + push + in-app)
317
+ - `async-queue-temporal-expert` — Email queue workers with BullMQ/Inngest
318
+ - `production-ready-hardener` — Email deliverability audit before launch
319
+
320
+ ---
321
+
322
+ <a name="bahasa-indonesia"></a>
323
+ ## Bahasa Indonesia
324
+
325
+ ### Integrasi Orkestrasi
326
+ Terhubung dan mengorkestrasi skill domain yang relevan seperti `brainstorming`, `zero-to-prod-orchestrator`, dan `project-context-mapper` untuk memastikan eksekusi yang kohesif.
327
+
328
+ ### Deskripsi
329
+ Panduan tingkat produksi untuk membangun sistem pengiriman email yang andal dan pipeline notifikasi terpadu. Mencakup **Resend**, **Postmark**, **AWS SES**, mesin template **React Email** / **MJML**, **deliverabilitas email** (SPF, DKIM, DMARC), **sistem notifikasi in-app** (bell icon, toast, pusat notifikasi), **alur email berbasis webhook**, **antrean email** dengan BullMQ/Inngest, dan kepatuhan **CAN-SPAM/GDPR**.
330
+
331
+ ### Kondisi Pemicu
332
+ Aktifkan skill ini ketika:
333
+ - Menyiapkan email transaksional (selamat datang, reset password, invoice, undangan tim).
334
+ - Membangun template email dengan React Email atau MJML.
335
+ - Mengintegrasikan Resend, Postmark, SendGrid, atau AWS SES.
336
+ - Mengimplementasikan sistem notifikasi in-app (bell real-time, toast, pusat notifikasi).
337
+ - Mengonfigurasi deliverabilitas email (SPF, DKIM, DMARC).
338
+ - Membangun sistem antrean email untuk pengiriman volume tinggi.
339
+ - Mengimplementasikan manajemen unsubscribe dan kepatuhan regulasi.
340
+
341
+ ### Panduan Pemilihan Provider Email
342
+
343
+ | Provider | Terbaik Untuk | Kekuatan Utama | Model Harga |
344
+ |---|---|---|---|
345
+ | **Resend** | Aplikasi modern, React Email | DX developer terbaik, komponen React sebagai email | Per email (gratis: 3k/bulan) |
346
+ | **Postmark** | Hanya transaksional | Deliverabilitas terbaik di industri, IP dedicated | Per email (gratis: 100/bulan) |
347
+ | **AWS SES** | Volume tinggi, hemat biaya | Termurah di skala besar ($0.10/1000 email) | Per email |
348
+ | **SendGrid** | Marketing + Transaksional | Suite marketing lengkap, analitik | Paket bertingkat |
349
+
350
+ **Rekomendasi**: Gunakan **Resend** untuk kebanyakan proyek baru (DX terbaik dengan React Email). Gunakan **Postmark** untuk email transaksional misi-kritis. Gunakan **AWS SES** untuk optimasi biaya volume tinggi (10k+/hari).
351
+
352
+ ### Kesalahan Umum yang Harus Dihindari
353
+
354
+ | Anti-Pola | Masalah | Pendekatan yang Benar |
355
+ |---|---|---|
356
+ | Mengirim email secara sinkron di API route | Waktu respons lambat, risiko timeout | Antrean email dengan BullMQ/Inngest |
357
+ | Menggunakan `@gmail.com` sebagai pengirim | Deliverabilitas buruk, filter spam | Gunakan domain kustom dengan SPF/DKIM |
358
+ | Tidak ada fallback teks biasa | Email mungkin tampil tidak benar | Selalu sertakan `text` di samping HTML |
359
+ | Tidak ada link unsubscribe | Pelanggaran CAN-SPAM, pemblokiran ISP | Selalu sertakan header List-Unsubscribe |
360
+
361
+ ### Integrasi dengan Skill Lain
362
+
363
+ - `saas-billing` — Email kuitansi pembayaran, sekuens dunning gagal bayar
364
+ - `saas-transformer` — Email undangan tim, notifikasi workspace
365
+ - `authentication-identity-expert` — Email reset password, verifikasi email, kode MFA
366
+ - `mobile-push-notification-expert` — Strategi notifikasi terpadu (email + push + in-app)
367
+ - `async-queue-temporal-expert` — Worker antrean email dengan BullMQ/Inngest
368
+ - `production-ready-hardener` — Audit deliverabilitas email sebelum peluncuran