[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6D7873BTRSR07TKHDG5ZPQ6":3,"skill-same:01M6D7873BTRSR07TKHDG5ZPQ6":54},{"skillNo":4,"name":5,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":27,"linkOnly":28,"markdownContent":29,"markdownBody":29,"frontMatter":30,"refName":31,"commitSha":32,"skillDirectory":33,"forksCount":34,"repositoryHtmlUrl":35,"repositoryHomepageUrl":6,"ownerHtmlUrl":36,"ownerBlogUrl":37,"ownerDescription":38,"updatedAt":39,"install":40,"resources":53},"01M6D7873BTRSR07TKHDG5ZPQ6","email-template-builder",null,"oabdelmaksoud\u002FSuperClaw","oabdelmaksoud","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F50699149?v=4","01M6D5CVVN778ZCDP1WHS816SP","Omar Abdelmaksoud","01M6D5CW1RHNSKCJR85GJACBFT",2,"MIT","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fclaude-skills\u002Fengineering-team\u002Femail-template-builder\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000005","邮件与沟通","SCENARIO","使用场景",[23,24,25,26],"email","template","email template builder","builder","2026-11-10 10:12:30",false,"# Email Template Builder\n\n**Tier:** POWERFUL  \n**Category:** Engineering Team  \n**Domain:** Transactional Email \u002F Communications Infrastructure\n\n---\n\n## Overview\n\nBuild complete transactional email systems: React Email templates, provider integration, preview server, i18n support, dark mode, spam optimization, and analytics tracking. Output production-ready code for Resend, Postmark, SendGrid, or AWS SES.\n\n---\n\n## Core Capabilities\n\n- React Email templates (welcome, verification, password reset, invoice, notification, digest)\n- MJML templates for maximum email client compatibility\n- Multi-provider support with unified sending interface\n- Local preview server with hot reload\n- i18n\u002Flocalization with typed translation keys\n- Dark mode support using media queries\n- Spam score optimization checklist\n- Open\u002Fclick tracking with UTM parameters\n\n---\n\n## When to Use\n\n- Setting up transactional email for a new product\n- Migrating from a legacy email system\n- Adding new email types (invoice, digest, notification)\n- Debugging email deliverability issues\n- Implementing i18n for email templates\n\n---\n\n## Project Structure\n\n```\nemails\u002F\n├── components\u002F\n│   ├── layout\u002F\n│   │   ├── email-layout.tsx       # Base layout with brand header\u002Ffooter\n│   │   └── email-button.tsx       # CTA button component\n│   ├── partials\u002F\n│   │   ├── header.tsx\n│   │   └── footer.tsx\n├── templates\u002F\n│   ├── welcome.tsx\n│   ├── verify-email.tsx\n│   ├── password-reset.tsx\n│   ├── invoice.tsx\n│   ├── notification.tsx\n│   └── weekly-digest.tsx\n├── lib\u002F\n│   ├── send.ts                    # Unified send function\n│   ├── providers\u002F\n│   │   ├── resend.ts\n│   │   ├── postmark.ts\n│   │   └── ses.ts\n│   └── tracking.ts                # UTM + analytics\n├── i18n\u002F\n│   ├── en.ts\n│   └── de.ts\n└── preview\u002F                       # Dev preview server\n    └── server.ts\n```\n\n---\n\n## Base Email Layout\n\n```tsx\n\u002F\u002F emails\u002Fcomponents\u002Flayout\u002Femail-layout.tsx\nimport {\n  Body, Container, Head, Html, Img, Preview, Section, Text, Hr, Font\n} from \"@react-email\u002Fcomponents\"\n\ninterface EmailLayoutProps {\n  preview: string\n  children: React.ReactNode\n}\n\nexport function EmailLayout({ preview, children }: EmailLayoutProps) {\n  return (\n    \u003CHtml lang=\"en\">\n      \u003CHead>\n        \u003CFont\n          fontFamily=\"Inter\"\n          fallbackFontFamily=\"Arial\"\n          webFont={{ url: \"https:\u002F\u002Ffonts.gstatic.com\u002Fs\u002Finter\u002Fv13\u002FUcCO3FwrK3iLTeHuS_nVMrMxCp50SjIw2boKoduKmMEVuLyfAZ9hiJ-Ek-_EeA.woff2\", format: \"woff2\" }}\n          fontWeight={400}\n          fontStyle=\"normal\"\n        \u002F>\n        {\u002F* Dark mode styles *\u002F}\n        \u003Cstyle>{`\n          @media (prefers-color-scheme: dark) {\n            .email-body { background-color: #0f0f0f !important; }\n            .email-container { background-color: #1a1a1a !important; }\n            .email-text { color: #e5e5e5 !important; }\n            .email-heading { color: #ffffff !important; }\n            .email-divider { border-color: #333333 !important; }\n          }\n        `}\u003C\u002Fstyle>\n      \u003C\u002FHead>\n      \u003CPreview>{preview}\u003C\u002FPreview>\n      \u003CBody className=\"email-body\" style={styles.body}>\n        \u003CContainer className=\"email-container\" style={styles.container}>\n          {\u002F* Header *\u002F}\n          \u003CSection style={styles.header}>\n            \u003CImg src=\"https:\u002F\u002Fyourapp.com\u002Flogo.png\" width={120} height={40} alt=\"MyApp\" \u002F>\n          \u003C\u002FSection>\n          \n          {\u002F* Content *\u002F}\n          \u003CSection style={styles.content}>\n            {children}\n          \u003C\u002FSection>\n          \n          {\u002F* Footer *\u002F}\n          \u003CHr style={styles.divider} \u002F>\n          \u003CSection style={styles.footer}>\n            \u003CText style={styles.footerText}>\n              MyApp Inc. · 123 Main St · San Francisco, CA 94105\n            \u003C\u002FText>\n            \u003CText style={styles.footerText}>\n              \u003Ca href=\"{{unsubscribe_url}}\" style={styles.link}>Unsubscribe\u003C\u002Fa>\n              {\" · \"}\n              \u003Ca href=\"https:\u002F\u002Fyourapp.com\u002Fprivacy\" style={styles.link}>Privacy Policy\u003C\u002Fa>\n            \u003C\u002FText>\n          \u003C\u002FSection>\n        \u003C\u002FContainer>\n      \u003C\u002FBody>\n    \u003C\u002FHtml>\n  )\n}\n\nconst styles = {\n  body: { backgroundColor: \"#f5f5f5\", fontFamily: \"Inter, Arial, sans-serif\" },\n  container: { maxWidth: \"600px\", margin: \"0 auto\", backgroundColor: \"#ffffff\", borderRadius: \"8px\", overflow: \"hidden\" },\n  header: { padding: \"24px 32px\", borderBottom: \"1px solid #e5e5e5\" },\n  content: { padding: \"32px\" },\n  divider: { borderColor: \"#e5e5e5\", margin: \"0 32px\" },\n  footer: { padding: \"24px 32px\" },\n  footerText: { fontSize: \"12px\", color: \"#6b7280\", textAlign: \"center\" as const, margin: \"4px 0\" },\n  link: { color: \"#6b7280\", textDecoration: \"underline\" },\n}\n```\n\n---\n\n## Welcome Email\n\n```tsx\n\u002F\u002F emails\u002Ftemplates\u002Fwelcome.tsx\nimport { Button, Heading, Text } from \"@react-email\u002Fcomponents\"\nimport { EmailLayout } from \"..\u002Fcomponents\u002Flayout\u002Femail-layout\"\n\ninterface WelcomeEmailProps {\n  name: string\n  confirmUrl: string\n  trialDays?: number\n}\n\nexport function WelcomeEmail({ name, confirmUrl, trialDays = 14 }: WelcomeEmailProps) {\n  return (\n    \u003CEmailLayout preview={`Welcome to MyApp, ${name}! Confirm your email to get started.`}>\n      \u003CHeading style={styles.h1}>Welcome to MyApp, {name}!\u003C\u002FHeading>\n      \u003CText style={styles.text}>\n        We're excited to have you on board. You've got {trialDays} days to explore everything MyApp has to offer — no credit card required.\n      \u003C\u002FText>\n      \u003CText style={styles.text}>\n        First, confirm your email address to activate your account:\n      \u003C\u002FText>\n      \u003CButton href={confirmUrl} style={styles.button}>\n        Confirm Email Address\n      \u003C\u002FButton>\n      \u003CText style={styles.hint}>\n        Button not working? Copy and paste this link into your browser:\n        \u003Cbr \u002F>\n        \u003Ca href={confirmUrl} style={styles.link}>{confirmUrl}\u003C\u002Fa>\n      \u003C\u002FText>\n      \u003CText style={styles.text}>\n        Once confirmed, you can:\n      \u003C\u002FText>\n      \u003Cul style={styles.list}>\n        \u003Cli>Connect your first project in 2 minutes\u003C\u002Fli>\n        \u003Cli>Invite your team (free for up to 3 members)\u003C\u002Fli>\n        \u003Cli>Set up Slack notifications\u003C\u002Fli>\n      \u003C\u002Ful>\n    \u003C\u002FEmailLayout>\n  )\n}\n\nexport default WelcomeEmail\n\nconst styles = {\n  h1: { fontSize: \"28px\", fontWeight: \"700\", color: \"#111827\", margin: \"0 0 16px\" },\n  text: { fontSize: \"16px\", lineHeight: \"1.6\", color: \"#374151\", margin: \"0 0 16px\" },\n  button: { backgroundColor: \"#4f46e5\", color: \"#ffffff\", borderRadius: \"6px\", fontSize: \"16px\", fontWeight: \"600\", padding: \"12px 24px\", textDecoration: \"none\", display: \"inline-block\", margin: \"8px 0 24px\" },\n  hint: { fontSize: \"13px\", color: \"#6b7280\" },\n  link: { color: \"#4f46e5\" },\n  list: { fontSize: \"16px\", lineHeight: \"1.8\", color: \"#374151\", paddingLeft: \"20px\" },\n}\n```\n\n---\n\n## Invoice Email\n\n```tsx\n\u002F\u002F emails\u002Ftemplates\u002Finvoice.tsx\nimport { Row, Column, Section, Heading, Text, Hr, Button } from \"@react-email\u002Fcomponents\"\nimport { EmailLayout } from \"..\u002Fcomponents\u002Flayout\u002Femail-layout\"\n\ninterface InvoiceItem { description: string; amount: number }\n\ninterface InvoiceEmailProps {\n  name: string\n  invoiceNumber: string\n  invoiceDate: string\n  dueDate: string\n  items: InvoiceItem[]\n  total: number\n  currency: string\n  downloadUrl: string\n}\n\nexport function InvoiceEmail({ name, invoiceNumber, invoiceDate, dueDate, items, total, currency = \"USD\", downloadUrl }: InvoiceEmailProps) {\n  const formatter = new Intl.NumberFormat(\"en-US\", { style: \"currency\", currency })\n\n  return (\n    \u003CEmailLayout preview={`Invoice ${invoiceNumber} - ${formatter.format(total \u002F 100)}`}>\n      \u003CHeading style={styles.h1}>Invoice #{invoiceNumber}\u003C\u002FHeading>\n      \u003CText style={styles.text}>Hi {name},\u003C\u002FText>\n      \u003CText style={styles.text}>Here's your invoice from MyApp. Thank you for your continued support.\u003C\u002FText>\n\n      {\u002F* Invoice Meta *\u002F}\n      \u003CSection style={styles.metaBox}>\n        \u003CRow>\n          \u003CColumn>\u003CText style={styles.metaLabel}>Invoice Date\u003C\u002FText>\u003CText style={styles.metaValue}>{invoiceDate}\u003C\u002FText>\u003C\u002FColumn>\n          \u003CColumn>\u003CText style={styles.metaLabel}>Due Date\u003C\u002FText>\u003CText style={styles.metaValue}>{dueDate}\u003C\u002FText>\u003C\u002FColumn>\n          \u003CColumn>\u003CText style={styles.metaLabel}>Amount Due\u003C\u002FText>\u003CText style={styles.metaValueLarge}>{formatter.format(total \u002F 100)}\u003C\u002FText>\u003C\u002FColumn>\n        \u003C\u002FRow>\n      \u003C\u002FSection>\n\n      {\u002F* Line Items *\u002F}\n      \u003CSection style={styles.table}>\n        \u003CRow style={styles.tableHeader}>\n          \u003CColumn>\u003CText style={styles.tableHeaderText}>Description\u003C\u002FText>\u003C\u002FColumn>\n          \u003CColumn>\u003CText style={{ ...styles.tableHeaderText, textAlign: \"right\" }}>Amount\u003C\u002FText>\u003C\u002FColumn>\n        \u003C\u002FRow>\n        {items.map((item, i) => (\n          \u003CRow key={i} style={i % 2 === 0 ? styles.tableRowEven : styles.tableRowOdd}>\n            \u003CColumn>\u003CText style={styles.tableCell}>{item.description}\u003C\u002FText>\u003C\u002FColumn>\n            \u003CColumn>\u003CText style={{ ...styles.tableCell, textAlign: \"right\" }}>{formatter.format(item.amount \u002F 100)}\u003C\u002FText>\u003C\u002FColumn>\n          \u003C\u002FRow>\n        ))}\n        \u003CHr style={styles.divider} \u002F>\n        \u003CRow>\n          \u003CColumn>\u003CText style={styles.totalLabel}>Total\u003C\u002FText>\u003C\u002FColumn>\n          \u003CColumn>\u003CText style={styles.totalValue}>{formatter.format(total \u002F 100)}\u003C\u002FText>\u003C\u002FColumn>\n        \u003C\u002FRow>\n      \u003C\u002FSection>\n\n      \u003CButton href={downloadUrl} style={styles.button}>Download PDF Invoice\u003C\u002FButton>\n    \u003C\u002FEmailLayout>\n  )\n}\n\nexport default InvoiceEmail\n\nconst styles = {\n  h1: { fontSize: \"24px\", fontWeight: \"700\", color: \"#111827\", margin: \"0 0 16px\" },\n  text: { fontSize: \"15px\", lineHeight: \"1.6\", color: \"#374151\", margin: \"0 0 12px\" },\n  metaBox: { backgroundColor: \"#f9fafb\", borderRadius: \"8px\", padding: \"16px\", margin: \"16px 0\" },\n  metaLabel: { fontSize: \"12px\", color: \"#6b7280\", fontWeight: \"600\", textTransform: \"uppercase\" as const, margin: \"0 0 4px\" },\n  metaValue: { fontSize: \"14px\", color: \"#111827\", margin: 0 },\n  metaValueLarge: { fontSize: \"20px\", fontWeight: \"700\", color: \"#4f46e5\", margin: 0 },\n  table: { width: \"100%\", margin: \"16px 0\" },\n  tableHeader: { backgroundColor: \"#f3f4f6\", borderRadius: \"4px\" },\n  tableHeaderText: { fontSize: \"12px\", fontWeight: \"600\", color: \"#374151\", padding: \"8px 12px\", textTransform: \"uppercase\" as const },\n  tableRowEven: { backgroundColor: \"#ffffff\" },\n  tableRowOdd: { backgroundColor: \"#f9fafb\" },\n  tableCell: { fontSize: \"14px\", color: \"#374151\", padding: \"10px 12px\" },\n  divider: { borderColor: \"#e5e5e5\", margin: \"8px 0\" },\n  totalLabel: { fontSize: \"16px\", fontWeight: \"700\", color: \"#111827\", padding: \"8px 12px\" },\n  totalValue: { fontSize: \"16px\", fontWeight: \"700\", color: \"#111827\", textAlign: \"right\" as const, padding: \"8px 12px\" },\n  button: { backgroundColor: \"#4f46e5\", color: \"#fff\", borderRadius: \"6px\", padding: \"12px 24px\", fontSize: \"15px\", fontWeight: \"600\", textDecoration: \"none\" },\n}\n```\n\n---\n\n## Unified Send Function\n\n```typescript\n\u002F\u002F emails\u002Flib\u002Fsend.ts\nimport { Resend } from \"resend\"\nimport { render } from \"@react-email\u002Frender\"\nimport { WelcomeEmail } from \"..\u002Ftemplates\u002Fwelcome\"\nimport { InvoiceEmail } from \"..\u002Ftemplates\u002Finvoice\"\nimport { addTrackingParams } from \".\u002Ftracking\"\n\nconst resend = new Resend(process.env.RESEND_API_KEY)\n\ntype EmailPayload =\n  | { type: \"welcome\"; props: Parameters\u003Ctypeof WelcomeEmail>[0] }\n  | { type: \"invoice\"; props: Parameters\u003Ctypeof InvoiceEmail>[0] }\n\nexport async function sendEmail(to: string, payload: EmailPayload) {\n  const templates = {\n    welcome: { component: WelcomeEmail, subject: \"Welcome to MyApp — confirm your email\" },\n    invoice: { component: InvoiceEmail, subject: `Invoice from MyApp` },\n  }\n\n  const template = templates[payload.type]\n  const html = render(template.component(payload.props as any))\n  const trackedHtml = addTrackingParams(html, { campaign: payload.type })\n\n  const result = await resend.emails.send({\n    from: \"MyApp \u003Chello@yourapp.com>\",\n    to,\n    subject: template.subject,\n    html: trackedHtml,\n    tags: [{ name: \"email_type\", value: payload.type }],\n  })\n\n  return result\n}\n```\n\n---\n\n## Preview Server Setup\n\n```typescript\n\u002F\u002F package.json scripts\n{\n  \"scripts\": {\n    \"email:dev\": \"email dev --dir emails\u002Ftemplates --port 3001\",\n    \"email:build\": \"email export --dir emails\u002Ftemplates --outDir emails\u002Fout\"\n  }\n}\n\n\u002F\u002F Run: npm run email:dev\n\u002F\u002F Opens: http:\u002F\u002Flocalhost:3001\n\u002F\u002F Shows all templates with live preview and hot reload\n```\n\n---\n\n## i18n Support\n\n```typescript\n\u002F\u002F emails\u002Fi18n\u002Fen.ts\nexport const en = {\n  welcome: {\n    preview: (name: string) => `Welcome to MyApp, ${name}!`,\n    heading: (name: string) => `Welcome to MyApp, ${name}!`,\n    body: (days: number) => `You've got ${days} days to explore everything.`,\n    cta: \"Confirm Email Address\",\n  },\n}\n\n\u002F\u002F emails\u002Fi18n\u002Fde.ts\nexport const de = {\n  welcome: {\n    preview: (name: string) => `Willkommen bei MyApp, ${name}!`,\n    heading: (name: string) => `Willkommen bei MyApp, ${name}!`,\n    body: (days: number) => `Du hast ${days} Tage Zeit, alles zu erkunden.`,\n    cta: \"E-Mail-Adresse bestätigen\",\n  },\n}\n\n\u002F\u002F Usage in template\nimport { en, de } from \"..\u002Fi18n\"\nconst t = locale === \"de\" ? de : en\n```\n\n---\n\n## Spam Score Optimization Checklist\n\n- [ ] Sender domain has SPF, DKIM, and DMARC records configured\n- [ ] From address uses your own domain (not gmail.com\u002Fhotmail.com)\n- [ ] Subject line under 50 characters, no ALL CAPS, no \"FREE!!!\"\n- [ ] Text-to-image ratio: at least 60% text\n- [ ] Plain text version included alongside HTML\n- [ ] Unsubscribe link in every marketing email (CAN-SPAM, GDPR)\n- [ ] No URL shorteners — use full branded links\n- [ ] No red-flag words: \"guarantee\", \"no risk\", \"limited time offer\" in subject\n- [ ] Single CTA per email — no 5 different buttons\n- [ ] Image alt text on every image\n- [ ] HTML validates — no broken tags\n- [ ] Test with Mail-Tester.com before first send (target: 9+\u002F10)\n\n---\n\n## Analytics Tracking\n\n```typescript\n\u002F\u002F emails\u002Flib\u002Ftracking.ts\ninterface TrackingParams {\n  campaign: string\n  medium?: string\n  source?: string\n}\n\nexport function addTrackingParams(html: string, params: TrackingParams): string {\n  const utmString = new URLSearchParams({\n    utm_source: params.source ?? \"email\",\n    utm_medium: params.medium ?? \"transactional\",\n    utm_campaign: params.campaign,\n  }).toString()\n\n  \u002F\u002F Add UTM params to all links in the email\n  return html.replace(\u002Fhref=\"(https?:\\\u002F\\\u002F[^\"]+)\"\u002Fg, (match, url) => {\n    const separator = url.includes(\"?\") ? \"&\" : \"?\"\n    return `href=\"${url}${separator}${utmString}\"`\n  })\n}\n```\n\n---\n\n## Common Pitfalls\n\n- **Inline styles required** — most email clients strip `\u003Chead>` styles; React Email handles this\n- **Max width 600px** — anything wider breaks on Gmail mobile\n- **No flexbox\u002Fgrid** — use `\u003CRow>` and `\u003CColumn>` from react-email, not CSS grid\n- **Dark mode media queries** — must use `!important` to override inline styles\n- **Missing plain text** — all major providers have a plain text field; always populate it\n- **Transactional vs marketing** — use separate sending domains\u002FIPs to protect deliverability\n",{},"main","7b610356e36623652299fa2acb477ff821b1d920","upstream-sync\u002Fwork\u002Fclaude-skills\u002Fengineering-team\u002Femail-template-builder",0,"https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Fo-abdelmaksoud\u002F","Full-Stack Engineer | AI Systems Architect | Building autonomous multi-agent systems","2026-03-08 21:12:53",{"source":7,"skillName":5,"commands":41,"prompt":51,"zipAvailable":52},[42,45,48],{"tool":43,"command":44},"npx","npx skills add oabdelmaksoud\u002FSuperClaw --skill email-template-builder",{"tool":46,"command":47},"bunx","bunx skills add oabdelmaksoud\u002FSuperClaw --skill email-template-builder",{"tool":49,"command":50},"pnpm","pnpm dlx skills add oabdelmaksoud\u002FSuperClaw --skill email-template-builder","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fclaude-skills\u002Fengineering-team\u002Femail-template-builder\u002FSKILL.md",true,[],[55,74,88,119,145,164],{"skillNo":56,"name":57,"nameZh":6,"description":58,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":59,"categories":60,"keywords":64,"publishedAt":27},"01M6D88QCPTBZVCRED0NZ1Y8K8","visa-doc-translate","Translate visa application documents (images) to English and create a bilingual PDF with original and translation","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fvisa-doc-translate\u002FSKILL.md",[61],{"categoryNo":62,"categoryName":63,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000002","文档处理",[65,66,67,68,69,70,71,72,73],"translate","doc","visa doc translate","translation","application","create","images","PDF","documents",{"skillNo":75,"name":76,"nameZh":6,"description":77,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":78,"categories":79,"keywords":80,"publishedAt":27},"01M6D88NBM95T3TFM50CYYAP65","verification-loop","A comprehensive verification system for Claude Code sessions.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fverification-loop\u002FSKILL.md",[],[81,82,83,84,85,86,87],"verification","loop","verification loop","sessions","code","claude code sessions","system",{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":105,"publishedAt":27},"01M6D88JFZ2P996GVRHJNSZSTM","tdd-workflow","Use this skill when writing new features, fixing bugs, or refactoring code. Enforces test-driven development with 80%+ coverage including unit, integration, and E2E tests.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Ftdd-workflow\u002FSKILL.md",[94,97,100],{"categoryNo":95,"categoryName":96,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":98,"categoryName":99,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",{"categoryNo":101,"categoryName":102,"taxonomyType":103,"taxonomyTypeDesc":104},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[106,107,108,109,110,111,85,112,113,114,115,116,117,118],"tdd","workflow","tdd workflow","e2e tests","e2e","integration","development","use","test","refactoring","coverage","tests","writing",{"skillNo":120,"name":121,"nameZh":6,"description":122,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":123,"categories":124,"keywords":125,"publishedAt":27},"01M6D88FTHRRSVJMXF2G7MQAK3","swiftui-patterns","SwiftUI architecture patterns, state management with @Observable, view composition, navigation, performance optimization, and modern iOS\u002FmacOS UI best practices.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fswiftui-patterns\u002FSKILL.md",[],[126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144],"patterns","swiftui","swiftui patterns","architecture","macos","performance","state management","best practices","state","ui","Optimization","ios","architecture patterns","Composition","performance optimization","view","management","swiftui architecture","navigation",{"skillNo":146,"name":147,"nameZh":6,"description":148,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":149,"categories":150,"keywords":152,"publishedAt":27},"01M6D88D527QTQT9DKHTRFN6EA","swift-protocol-di-testing","Protocol-based dependency injection for testable Swift code — mock file system, network, and external APIs using focused protocols and Swift Testing.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fswift-protocol-di-testing\u002FSKILL.md",[151],{"categoryNo":95,"categoryName":96,"taxonomyType":20,"taxonomyTypeDesc":21},[153,154,155,156,85,157,158,159,160,87,161,162,163],"swift protocol di testing","protocol","swift","testing","protocols","file","network","injection","dependency","swift testing","dependency injection",{"skillNo":165,"name":166,"nameZh":6,"description":167,"descriptionZh":6,"repositoryFullName":7,"ownerLogin":8,"ownerAvatarUrl":9,"ownerAccountNo":10,"ownerDisplayName":11,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":168,"categories":169,"keywords":170,"publishedAt":27},"01M6D88AJW8H2QNWSW5ZY82R43","swift-concurrency-6-2","Swift 6.2 Approachable Concurrency — single-threaded by default, @concurrent for explicit background offloading, isolated conformances for main actor types.","https:\u002F\u002Fgithub.com\u002Foabdelmaksoud\u002FSuperClaw\u002Fblob\u002Fmain\u002Fupstream-sync\u002Fwork\u002Fecc\u002Fskills\u002Fswift-concurrency-6-2\u002FSKILL.md",[],[171,172,155,173,174,31],"concurrency","swift concurrency","swift concurrency 6 2","default"]