ima-claude 2.15.0 → 2.18.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.
- package/README.md +13 -1
- package/dist/cli.js +18 -1
- package/package.json +1 -1
- package/plugins/ima-claude/.claude-plugin/plugin.json +2 -2
- package/plugins/ima-claude/agents/wp-developer.md +2 -1
- package/plugins/ima-claude/hooks/prompt_coach_digest.md +1 -1
- package/plugins/ima-claude/skills/espocrm/SKILL.md +79 -0
- package/plugins/ima-claude/skills/espocrm-api/SKILL.md +360 -0
- package/plugins/ima-claude/skills/espocrm-api/references/where-operators.md +84 -0
- package/plugins/ima-claude/skills/functional-programmer/SKILL.md +15 -0
- package/plugins/ima-claude/skills/ima-copywriting/SKILL.md +232 -0
- package/plugins/ima-claude/skills/ima-copywriting/references/format-blog-post.md +51 -0
- package/plugins/ima-claude/skills/ima-copywriting/references/format-fundraising-email.md +54 -0
- package/plugins/ima-claude/skills/ima-copywriting/references/format-newsletter.md +54 -0
- package/plugins/ima-claude/skills/ima-copywriting/references/format-op-ed.md +41 -0
- package/plugins/ima-claude/skills/ima-copywriting/references/format-press-release.md +45 -0
- package/plugins/ima-claude/skills/ima-copywriting/references/format-social-media.md +141 -0
- package/plugins/ima-claude/skills/ima-copywriting/references/format-webinar-email.md +37 -0
- package/plugins/ima-claude/skills/ima-copywriting/references/ima-copy-frameworks.md +299 -0
- package/plugins/ima-claude/skills/ima-copywriting/references/ima-transitions.md +199 -0
- package/plugins/ima-claude/skills/ima-editorial-scorecard/SKILL.md +159 -0
- package/plugins/ima-claude/skills/ima-editorial-scorecard/references/format-expectations.md +66 -0
- package/plugins/ima-claude/skills/ima-editorial-scorecard/references/scoring-rubrics.md +73 -0
- package/plugins/ima-claude/skills/ima-editorial-workflow/SKILL.md +171 -0
- package/plugins/ima-claude/skills/ima-email-creator/SKILL.md +104 -0
- package/plugins/ima-claude/skills/ima-email-creator/assets/base-template.html +256 -0
- package/plugins/ima-claude/skills/ima-email-creator/references/drip-sequence.md +66 -0
- package/plugins/ima-claude/skills/ima-email-creator/references/email-css-safe.md +104 -0
- package/plugins/ima-claude/skills/ima-email-creator/references/espocrm-compat.md +58 -0
- package/plugins/ima-claude/skills/ima-email-creator/references/newsletter-layout.md +127 -0
- package/plugins/ima-claude/skills/ima-email-creator/references/wp-transactional.md +77 -0
- package/plugins/ima-claude/skills/ima-email-creator/scripts/css-inliner.py +47 -0
- package/plugins/ima-claude/skills/ima-email-creator/scripts/espocrm-prep.py +52 -0
- package/plugins/ima-claude/skills/ima-email-creator/scripts/requirements.txt +2 -0
- package/plugins/ima-claude/skills/wp-ddev/SKILL.md +264 -0
- package/plugins/ima-claude/skills/wp-ddev/references/ddev-commands.md +232 -0
- package/plugins/ima-claude/skills/wp-ddev/references/wp-cli-reference.md +406 -0
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
|
+
<!--[if mso]>
|
|
7
|
+
<noscript><xml><o:OfficeDocumentSettings><o:AllowPNG/><o:PixelsPerInch>96</o:PixelsPerInch></o:OfficeDocumentSettings></xml></noscript>
|
|
8
|
+
<![endif]-->
|
|
9
|
+
<!--[if !mso]><!-->
|
|
10
|
+
<link href="https://fonts.googleapis.com/css2?family=Lato:wght@400;700&family=Open+Sans:wght@400;600&display=swap" rel="stylesheet">
|
|
11
|
+
<!--<![endif]-->
|
|
12
|
+
<title>{{subject}}</title>
|
|
13
|
+
<style>
|
|
14
|
+
* { box-sizing: border-box; }
|
|
15
|
+
body { margin: 0; padding: 0; -webkit-text-size-adjust: none; text-size-adjust: none; }
|
|
16
|
+
a[x-apple-data-detectors] { color: inherit !important; text-decoration: inherit !important; }
|
|
17
|
+
#MessageViewBody a { color: inherit; text-decoration: none; }
|
|
18
|
+
p { line-height: inherit; }
|
|
19
|
+
.desktop_hide, .desktop_hide table { mso-hide: all; display: none; max-height: 0; overflow: hidden; }
|
|
20
|
+
.image_block img + div { display: none; }
|
|
21
|
+
@media (max-width: 620px) {
|
|
22
|
+
.row-content { width: 100% !important; }
|
|
23
|
+
.stack .column { width: 100%; display: block; }
|
|
24
|
+
.mobile_hide { display: none; }
|
|
25
|
+
.desktop_hide, .desktop_hide table { display: table !important; max-height: none !important; }
|
|
26
|
+
.image_block div.fullWidth { max-width: 100% !important; }
|
|
27
|
+
}
|
|
28
|
+
</style>
|
|
29
|
+
<!--[if mso]>
|
|
30
|
+
<style>sup, sub { font-size: 100% !important; } sup { mso-text-raise: 10%; } sub { mso-text-raise: -10%; }</style>
|
|
31
|
+
<![endif]-->
|
|
32
|
+
</head>
|
|
33
|
+
<body class="body" style="background-color:#F2F3F5;margin:0;padding:0;-webkit-text-size-adjust:none;text-size-adjust:none;">
|
|
34
|
+
<table class="nl-container" width="100%" cellpadding="0" cellspacing="0" border="0" role="presentation" style="mso-table-lspace:0;mso-table-rspace:0;background-color:#F2F3F5;">
|
|
35
|
+
<tbody><tr><td>
|
|
36
|
+
|
|
37
|
+
<!-- Row 1: Header -->
|
|
38
|
+
<table class="row row-1" width="100%" cellpadding="0" cellspacing="0" border="0" role="presentation" style="mso-table-lspace:0;mso-table-rspace:0;background-color:#F2F3F5;" align="center">
|
|
39
|
+
<tbody><tr><td>
|
|
40
|
+
<table class="row-content stack" width="600" cellpadding="0" cellspacing="0" border="0" role="presentation" style="mso-table-lspace:0;mso-table-rspace:0;color:#000;background-color:#FFFFFF;width:600px;margin:0 auto;" align="center">
|
|
41
|
+
<tbody><tr>
|
|
42
|
+
<td class="column column-1" width="100%" style="mso-table-lspace:0;mso-table-rspace:0;font-weight:400;text-align:left;vertical-align:top;border-top:0;border-right:0;border-bottom:0;border-left:0;">
|
|
43
|
+
<table class="col-pad" width="100%" cellpadding="0" cellspacing="0" border="0" role="presentation" style="mso-table-lspace:0;mso-table-rspace:0;">
|
|
44
|
+
<tr><td class="pad" style="padding-top:10px;padding-bottom:10px;text-align:center;">
|
|
45
|
+
|
|
46
|
+
<!-- image_block: IMA logo -->
|
|
47
|
+
<div class="image_block" style="text-align:center;">
|
|
48
|
+
<a href="https://imahealth.org/?utm_source=email&utm_medium=newsletter&utm_campaign={{utmCampaign}}" target="_blank" style="outline:none;" tabindex="-1">
|
|
49
|
+
<img src="https://imagedelivery.net/JtZuhs_w2Ns2ySmaMNtbTw/4024a8d2-4d98-48c5-fed5-b4e3a8e4c200/xs"
|
|
50
|
+
alt="IMA Health"
|
|
51
|
+
width="178"
|
|
52
|
+
style="display:block;height:auto;max-width:178.8px;border:0;margin:0 auto;">
|
|
53
|
+
</a>
|
|
54
|
+
</div>
|
|
55
|
+
|
|
56
|
+
<!-- spacer_block: 10px -->
|
|
57
|
+
<div class="spacer_block" style="height:10px;line-height:10px;font-size:1px;"> </div>
|
|
58
|
+
|
|
59
|
+
</td></tr>
|
|
60
|
+
</table>
|
|
61
|
+
</td>
|
|
62
|
+
</tr></tbody>
|
|
63
|
+
</table>
|
|
64
|
+
</td></tr></tbody>
|
|
65
|
+
</table>
|
|
66
|
+
<!-- /Row 1 -->
|
|
67
|
+
|
|
68
|
+
<!-- Row 2: Content -->
|
|
69
|
+
<table class="row row-2" width="100%" cellpadding="0" cellspacing="0" border="0" role="presentation" style="mso-table-lspace:0;mso-table-rspace:0;background-color:#F2F3F5;" align="center">
|
|
70
|
+
<tbody><tr><td>
|
|
71
|
+
<table class="row-content stack" width="600" cellpadding="0" cellspacing="0" border="0" role="presentation" style="mso-table-lspace:0;mso-table-rspace:0;color:#000;background-color:#FFFFFF;width:600px;margin:0 auto;" align="center">
|
|
72
|
+
<tbody><tr>
|
|
73
|
+
<td class="column column-1" width="100%" style="mso-table-lspace:0;mso-table-rspace:0;font-weight:400;text-align:left;vertical-align:top;border-top:0;border-right:0;border-bottom:0;border-left:0;">
|
|
74
|
+
<table class="col-pad" width="100%" cellpadding="0" cellspacing="0" border="0" role="presentation" style="mso-table-lspace:0;mso-table-rspace:0;">
|
|
75
|
+
<tr><td class="pad" style="padding-top:10px;padding-bottom:10px;">
|
|
76
|
+
|
|
77
|
+
<!-- heading_block: main H1 -->
|
|
78
|
+
<div class="heading_block" style="text-align:center;">
|
|
79
|
+
<h1 style="margin:0;color:#00066F;font-family:Lato,Arial,Helvetica,sans-serif;font-size:28px;font-weight:400;letter-spacing:normal;line-height:1.2;text-align:center;mso-line-height-alt:34px;">
|
|
80
|
+
Hi {Person.firstName}, here's your latest from IMA
|
|
81
|
+
</h1>
|
|
82
|
+
</div>
|
|
83
|
+
|
|
84
|
+
<!-- paragraph_block: intro body text -->
|
|
85
|
+
<div class="paragraph_block" style="padding:10px 20px;">
|
|
86
|
+
<p style="margin:0;color:#494949;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.2;mso-line-height-alt:19px;text-align:left;">
|
|
87
|
+
Body copy goes here. This is the introductory paragraph for the email. Keep it concise and focused on the reader's needs.
|
|
88
|
+
</p>
|
|
89
|
+
</div>
|
|
90
|
+
|
|
91
|
+
<!-- heading_block: section H1 (20px, weight 500, emoji prefix) -->
|
|
92
|
+
<div class="heading_block" style="padding:10px 20px;">
|
|
93
|
+
<h1 style="margin:0;color:#00066F;font-family:Lato,Arial,Helvetica,sans-serif;font-size:20px;font-weight:500;letter-spacing:normal;line-height:1.2;text-align:left;mso-line-height-alt:24px;">
|
|
94
|
+
🔹 Section Heading
|
|
95
|
+
</h1>
|
|
96
|
+
</div>
|
|
97
|
+
|
|
98
|
+
<!-- image_block: section image, linked with UTM -->
|
|
99
|
+
<div class="image_block" style="padding:10px 20px;">
|
|
100
|
+
<a href="https://imahealth.org/?utm_source=email&utm_medium=newsletter&utm_campaign={{utmCampaign}}" target="_blank" style="outline:none;" tabindex="-1">
|
|
101
|
+
<img src="https://via.placeholder.com/580x300"
|
|
102
|
+
alt=""
|
|
103
|
+
width="580"
|
|
104
|
+
style="display:block;height:auto;max-width:580px;border:0;border-radius:5px;">
|
|
105
|
+
</a>
|
|
106
|
+
</div>
|
|
107
|
+
|
|
108
|
+
<!-- paragraph_block: section body copy -->
|
|
109
|
+
<div class="paragraph_block" style="padding:10px 20px;">
|
|
110
|
+
<p style="margin:0;color:#494949;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.2;mso-line-height-alt:19px;text-align:left;">
|
|
111
|
+
Section body copy goes here. Describe the content, news, or article being referenced. Keep paragraphs short and scannable.
|
|
112
|
+
</p>
|
|
113
|
+
</div>
|
|
114
|
+
|
|
115
|
+
<!-- button_block: VML hybrid CTA -->
|
|
116
|
+
<div class="button_block" style="padding:10px 20px;text-align:left;">
|
|
117
|
+
<!--[if mso]>
|
|
118
|
+
<v:roundrect xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w="urn:schemas-microsoft-com:office:word"
|
|
119
|
+
href="https://imahealth.org/?utm_source=email&utm_medium=newsletter&utm_campaign={{utmCampaign}}"
|
|
120
|
+
style="height:42px;v-text-anchor:middle;width:160px;"
|
|
121
|
+
arcsize="9%"
|
|
122
|
+
stroke="false"
|
|
123
|
+
fillcolor="#00B8B8">
|
|
124
|
+
<w:anchorlock/>
|
|
125
|
+
<center style="color:#ffffff;font-family:Arial,Helvetica,sans-serif;font-size:16px;font-weight:500;">Read <b>More »</b></center>
|
|
126
|
+
</v:roundrect>
|
|
127
|
+
<![endif]-->
|
|
128
|
+
<!--[if !mso]><!-->
|
|
129
|
+
<a href="https://imahealth.org/?utm_source=email&utm_medium=newsletter&utm_campaign={{utmCampaign}}"
|
|
130
|
+
target="_blank"
|
|
131
|
+
style="display:inline-block;text-decoration:none;background-color:#00B8B8;border-radius:4px;color:#ffffff;font-family:Lato,Arial,Helvetica,sans-serif;font-size:16px;font-weight:500;height:42px;line-height:42px;padding:0 16px;mso-padding-alt:0;mso-text-raise:0;">
|
|
132
|
+
Read <b>More »</b>
|
|
133
|
+
</a>
|
|
134
|
+
<!--<![endif]-->
|
|
135
|
+
</div>
|
|
136
|
+
|
|
137
|
+
<!-- divider_block -->
|
|
138
|
+
<div class="divider_block" style="padding:10px 20px;">
|
|
139
|
+
<table width="100%" cellpadding="0" cellspacing="0" border="0" role="presentation" style="mso-table-lspace:0;mso-table-rspace:0;">
|
|
140
|
+
<tr>
|
|
141
|
+
<td style="border-top:1px solid #dddddd;font-size:1px;line-height:1px;"> </td>
|
|
142
|
+
</tr>
|
|
143
|
+
</table>
|
|
144
|
+
</div>
|
|
145
|
+
|
|
146
|
+
</td></tr>
|
|
147
|
+
</table>
|
|
148
|
+
</td>
|
|
149
|
+
</tr></tbody>
|
|
150
|
+
</table>
|
|
151
|
+
</td></tr></tbody>
|
|
152
|
+
</table>
|
|
153
|
+
<!-- /Row 2 -->
|
|
154
|
+
|
|
155
|
+
<!-- Row 3: Divider -->
|
|
156
|
+
<table class="row row-3" width="100%" cellpadding="0" cellspacing="0" border="0" role="presentation" style="mso-table-lspace:0;mso-table-rspace:0;background-color:#F2F3F5;" align="center">
|
|
157
|
+
<tbody><tr><td>
|
|
158
|
+
<table class="row-content stack" width="600" cellpadding="0" cellspacing="0" border="0" role="presentation" style="mso-table-lspace:0;mso-table-rspace:0;color:#000;background-color:#FFFFFF;width:600px;margin:0 auto;" align="center">
|
|
159
|
+
<tbody><tr>
|
|
160
|
+
<td class="column column-1" width="100%" style="mso-table-lspace:0;mso-table-rspace:0;font-weight:400;text-align:left;vertical-align:top;border-top:0;border-right:0;border-bottom:0;border-left:0;">
|
|
161
|
+
<table class="col-pad" width="100%" cellpadding="0" cellspacing="0" border="0" role="presentation" style="mso-table-lspace:0;mso-table-rspace:0;">
|
|
162
|
+
<tr><td class="pad" style="padding-top:10px;padding-bottom:10px;">
|
|
163
|
+
<div class="divider_block">
|
|
164
|
+
<table width="100%" cellpadding="0" cellspacing="0" border="0" role="presentation" style="mso-table-lspace:0;mso-table-rspace:0;">
|
|
165
|
+
<tr>
|
|
166
|
+
<td style="border-top:1px solid #dddddd;font-size:1px;line-height:1px;"> </td>
|
|
167
|
+
</tr>
|
|
168
|
+
</table>
|
|
169
|
+
</div>
|
|
170
|
+
</td></tr>
|
|
171
|
+
</table>
|
|
172
|
+
</td>
|
|
173
|
+
</tr></tbody>
|
|
174
|
+
</table>
|
|
175
|
+
</td></tr></tbody>
|
|
176
|
+
</table>
|
|
177
|
+
<!-- /Row 3 -->
|
|
178
|
+
|
|
179
|
+
<!-- Row 4: Footer -->
|
|
180
|
+
<table class="row row-4" width="100%" cellpadding="0" cellspacing="0" border="0" role="presentation" style="mso-table-lspace:0;mso-table-rspace:0;background-color:#F2F3F5;" align="center">
|
|
181
|
+
<tbody><tr><td>
|
|
182
|
+
<table class="row-content stack" width="600" cellpadding="0" cellspacing="0" border="0" role="presentation" style="mso-table-lspace:0;mso-table-rspace:0;color:#000;background-color:#FFFFFF;width:600px;margin:0 auto;" align="center">
|
|
183
|
+
<tbody><tr>
|
|
184
|
+
<td class="column column-1" width="100%" style="mso-table-lspace:0;mso-table-rspace:0;font-weight:400;text-align:left;vertical-align:top;border-top:0;border-right:0;border-bottom:0;border-left:0;">
|
|
185
|
+
<table class="col-pad" width="100%" cellpadding="0" cellspacing="0" border="0" role="presentation" style="mso-table-lspace:0;mso-table-rspace:0;">
|
|
186
|
+
<tr><td class="pad" style="padding-top:10px;padding-bottom:10px;">
|
|
187
|
+
|
|
188
|
+
<!-- paragraph_block: org info -->
|
|
189
|
+
<div class="paragraph_block" style="padding:10px 20px;">
|
|
190
|
+
<p style="margin:0;color:#919396;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px;font-weight:400;line-height:1.2;mso-line-height-alt:19px;text-align:center;">
|
|
191
|
+
IMA Health • imahealth.org<br>
|
|
192
|
+
© 2026 Independent Medical Alliance. All rights reserved.
|
|
193
|
+
</p>
|
|
194
|
+
</div>
|
|
195
|
+
|
|
196
|
+
<!-- social icons placeholder (production uses BeeFree CDN icons) -->
|
|
197
|
+
<div class="social_block" style="padding:10px 20px;text-align:center;">
|
|
198
|
+
<!-- BeeFree CDN social icons would be rendered here by the email builder -->
|
|
199
|
+
</div>
|
|
200
|
+
|
|
201
|
+
</td></tr>
|
|
202
|
+
</table>
|
|
203
|
+
</td>
|
|
204
|
+
</tr></tbody>
|
|
205
|
+
</table>
|
|
206
|
+
</td></tr></tbody>
|
|
207
|
+
</table>
|
|
208
|
+
<!-- /Row 4 -->
|
|
209
|
+
|
|
210
|
+
<!-- Row 5: Spacer -->
|
|
211
|
+
<table class="row row-5" width="100%" cellpadding="0" cellspacing="0" border="0" role="presentation" style="mso-table-lspace:0;mso-table-rspace:0;background-color:#F2F3F5;" align="center">
|
|
212
|
+
<tbody><tr><td>
|
|
213
|
+
<table class="row-content stack" width="600" cellpadding="0" cellspacing="0" border="0" role="presentation" style="mso-table-lspace:0;mso-table-rspace:0;color:#000;background-color:#FFFFFF;width:600px;margin:0 auto;" align="center">
|
|
214
|
+
<tbody><tr>
|
|
215
|
+
<td class="column column-1" width="100%" style="mso-table-lspace:0;mso-table-rspace:0;font-weight:400;text-align:left;vertical-align:top;border-top:0;border-right:0;border-bottom:0;border-left:0;">
|
|
216
|
+
<table class="col-pad" width="100%" cellpadding="0" cellspacing="0" border="0" role="presentation" style="mso-table-lspace:0;mso-table-rspace:0;">
|
|
217
|
+
<tr><td class="pad" style="padding-top:0;padding-bottom:0;">
|
|
218
|
+
<div class="spacer_block" style="height:10px;line-height:10px;font-size:1px;"> </div>
|
|
219
|
+
</td></tr>
|
|
220
|
+
</table>
|
|
221
|
+
</td>
|
|
222
|
+
</tr></tbody>
|
|
223
|
+
</table>
|
|
224
|
+
</td></tr></tbody>
|
|
225
|
+
</table>
|
|
226
|
+
<!-- /Row 5 -->
|
|
227
|
+
|
|
228
|
+
<!-- Row 6: Unsubscribe -->
|
|
229
|
+
<table class="row row-6" width="100%" cellpadding="0" cellspacing="0" border="0" role="presentation" style="mso-table-lspace:0;mso-table-rspace:0;background-color:#F2F3F5;" align="center">
|
|
230
|
+
<tbody><tr><td>
|
|
231
|
+
<table class="row-content stack" width="600" cellpadding="0" cellspacing="0" border="0" role="presentation" style="mso-table-lspace:0;mso-table-rspace:0;color:#000;background-color:#FFFFFF;width:600px;margin:0 auto;" align="center">
|
|
232
|
+
<tbody><tr>
|
|
233
|
+
<td class="column column-1" width="100%" style="mso-table-lspace:0;mso-table-rspace:0;font-weight:400;text-align:left;vertical-align:top;border-top:0;border-right:0;border-bottom:0;border-left:0;">
|
|
234
|
+
<table class="col-pad" width="100%" cellpadding="0" cellspacing="0" border="0" role="presentation" style="mso-table-lspace:0;mso-table-rspace:0;">
|
|
235
|
+
<tr><td class="pad" style="padding-top:10px;padding-bottom:10px;">
|
|
236
|
+
|
|
237
|
+
<!-- html_block: EspoCRM unsubscribe token -->
|
|
238
|
+
<div class="html_block" style="text-align:center;">
|
|
239
|
+
<p style="margin:0;font-family:"Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif;font-size:16px;line-height:1.2;mso-line-height-alt:19px;text-align:center;">
|
|
240
|
+
<a href="{optOutLink}" style="color:#00B8B8;text-decoration:none;" target="_blank">Unsubscribe</a>
|
|
241
|
+
</p>
|
|
242
|
+
</div>
|
|
243
|
+
|
|
244
|
+
</td></tr>
|
|
245
|
+
</table>
|
|
246
|
+
</td>
|
|
247
|
+
</tr></tbody>
|
|
248
|
+
</table>
|
|
249
|
+
</td></tr></tbody>
|
|
250
|
+
</table>
|
|
251
|
+
<!-- /Row 6 -->
|
|
252
|
+
|
|
253
|
+
</td></tr></tbody>
|
|
254
|
+
</table>
|
|
255
|
+
</body>
|
|
256
|
+
</html>
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# Drip Sequence Reference
|
|
2
|
+
|
|
3
|
+
Patterns for individual drip/sequence emails. EspoCRM handles timing — this skill only produces standalone HTML.
|
|
4
|
+
|
|
5
|
+
## What This Covers
|
|
6
|
+
|
|
7
|
+
Individual email HTML for sequences. The sequencing logic (delays, conditions, triggers) lives in EspoCRM's BPM/Workflows — not in this skill.
|
|
8
|
+
|
|
9
|
+
## Common Sequence Types
|
|
10
|
+
|
|
11
|
+
| Sequence | Emails | Goal |
|
|
12
|
+
|----------|--------|------|
|
|
13
|
+
| Welcome | 3-5 | Onboard new member, set expectations |
|
|
14
|
+
| Donor nurture | 4-6 | First donation → recurring donor |
|
|
15
|
+
| Re-engagement | 2-3 | Win back inactive members |
|
|
16
|
+
| Event follow-up | 2-3 | Post-webinar engagement |
|
|
17
|
+
|
|
18
|
+
## Individual Email Patterns
|
|
19
|
+
|
|
20
|
+
**Welcome Email 1 (Immediate)**
|
|
21
|
+
- Warm, personal tone (Friendly + Supportive)
|
|
22
|
+
- Confirm what they signed up for
|
|
23
|
+
- Set expectations (what they'll receive, how often)
|
|
24
|
+
- One clear CTA: "Complete Your Profile »" or "Explore Resources »"
|
|
25
|
+
- Keep short — they just signed up, don't overwhelm
|
|
26
|
+
|
|
27
|
+
**Welcome Email 2 (Day 2-3)**
|
|
28
|
+
- Highlight one valuable resource
|
|
29
|
+
- Social proof (member count, impact stats)
|
|
30
|
+
- CTA: engage with specific content
|
|
31
|
+
|
|
32
|
+
**Welcome Email 3 (Day 5-7)**
|
|
33
|
+
- Deeper engagement — invite to community, events
|
|
34
|
+
- Ask for feedback or preferences
|
|
35
|
+
- CTA: "Join the Conversation »" or similar
|
|
36
|
+
|
|
37
|
+
## Design Rules for Sequences
|
|
38
|
+
|
|
39
|
+
- Each email MUST stand alone (reader may not have seen previous ones)
|
|
40
|
+
- Progressive disclosure — don't front-load all information
|
|
41
|
+
- Consistent header/footer across sequence
|
|
42
|
+
- Vary CTA text (don't repeat "Learn More" 5 times)
|
|
43
|
+
- Subject lines should work independently (no "Part 2 of 5")
|
|
44
|
+
- Match production email styling: Lato headings / Open Sans body, #00B8B8 CTA color, #494949 body text, 16px body size
|
|
45
|
+
|
|
46
|
+
## HTML Structure
|
|
47
|
+
|
|
48
|
+
Each drip email uses the same BeeFree-style HTML structure:
|
|
49
|
+
`nl-container → row → row-content → column`
|
|
50
|
+
|
|
51
|
+
Use `assets/base-template.html` as the starting skeleton for every email.
|
|
52
|
+
|
|
53
|
+
## EspoCRM Variables
|
|
54
|
+
|
|
55
|
+
Use single-brace syntax: `{Person.firstName}`, `{optOutLink}`, `{accountName}`
|
|
56
|
+
|
|
57
|
+
Do NOT use Handlebars double-brace syntax (`{{variable}}`).
|
|
58
|
+
|
|
59
|
+
## EspoCRM Integration Note
|
|
60
|
+
|
|
61
|
+
Each email is a separate EspoCRM Email Template. The BPM process handles:
|
|
62
|
+
- Trigger conditions (signup, purchase, inactivity period)
|
|
63
|
+
- Delays between emails
|
|
64
|
+
- Exit conditions (unsubscribe, completed action)
|
|
65
|
+
|
|
66
|
+
The skill outputs individual HTML files; configure sequencing in EspoCRM.
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# Email CSS Safety Reference
|
|
2
|
+
|
|
3
|
+
## Safe CSS Properties
|
|
4
|
+
|
|
5
|
+
| Property | Gmail | Outlook | Apple Mail | Notes |
|
|
6
|
+
|---|---|---|---|---|
|
|
7
|
+
| `color` | ✓ | ✓ | ✓ | Always inline |
|
|
8
|
+
| `font-family` | ✓ | ✓ | ✓ | Include fallback stack |
|
|
9
|
+
| `font-size` | ✓ | ✓ | ✓ | Use px, not rem/em |
|
|
10
|
+
| `font-weight` | ✓ | ✓ | ✓ | Use numeric values (400, 700) |
|
|
11
|
+
| `background-color` | ✓ | ✓ | ✓ | On `<td>`, not `<div>` for Outlook |
|
|
12
|
+
| `text-align` | ✓ | ✓ | ✓ | Also use HTML `align=""` for Outlook |
|
|
13
|
+
| `text-decoration` | ✓ | ✓ | ✓ | — |
|
|
14
|
+
| `line-height` | ✓ | ✓ | ✓ | Unitless values safest; add `mso-line-height-alt` for Outlook |
|
|
15
|
+
| `border` | ✓ | ✓ | ✓ | Shorthand works |
|
|
16
|
+
| `padding` on `<td>` | ✓ | ✓ | ✓ | Use `<td>` not `<p>`/`<div>` |
|
|
17
|
+
| `vertical-align` | ✓ | ✓ | ✓ | Use on `<td>` |
|
|
18
|
+
| `width` | ✓ | ✓ | ✓ | Also set HTML `width=""` attribute |
|
|
19
|
+
| `height` | ✓ | ✓ | ✓ | Also set HTML `height=""` attribute |
|
|
20
|
+
|
|
21
|
+
## Partially Supported
|
|
22
|
+
|
|
23
|
+
| Property | Issue |
|
|
24
|
+
|---|---|
|
|
25
|
+
| `border-radius` | Outlook ignores it entirely |
|
|
26
|
+
| `max-width` | Gmail app (Android) ignores; use `width` on table instead |
|
|
27
|
+
| `margin` | Outlook collapses margins unpredictably; avoid on block elements |
|
|
28
|
+
| `padding` on `<p>`/`<div>` | Outlook unreliable; wrap in `<td>` instead |
|
|
29
|
+
| `background-image` | Outlook (Word engine) ignores CSS background images |
|
|
30
|
+
|
|
31
|
+
## Never Use in Email
|
|
32
|
+
|
|
33
|
+
| Property | Reason |
|
|
34
|
+
|---|---|
|
|
35
|
+
| `position` | Broken across all clients |
|
|
36
|
+
| `float` | Outlook ignores; use tables |
|
|
37
|
+
| `display: flex` / `grid` | Not supported in Outlook or Gmail app |
|
|
38
|
+
| `box-shadow` | Stripped by most clients |
|
|
39
|
+
| `opacity` | Inconsistent; prefer solid colors |
|
|
40
|
+
| `calc()` | Not supported |
|
|
41
|
+
| CSS variables (`--var`) | Not supported |
|
|
42
|
+
| `@media` queries | Gmail app strips; limit use |
|
|
43
|
+
|
|
44
|
+
## Layout Rules
|
|
45
|
+
|
|
46
|
+
- Tables ONLY for layout — Outlook uses the Word rendering engine, not a browser
|
|
47
|
+
- `role="presentation"` on all layout tables
|
|
48
|
+
- Always set `cellpadding="0" cellspacing="0" border="0"` explicitly
|
|
49
|
+
- Use HTML `width` attributes on `<table>` and `<td>` (not just CSS) for Outlook
|
|
50
|
+
- 600px max width for email body
|
|
51
|
+
- Use `align="center"` on wrapper table, not CSS margin auto
|
|
52
|
+
|
|
53
|
+
## Typography
|
|
54
|
+
|
|
55
|
+
**Google Fonts import** (wrap in MSO conditional so Outlook skips it):
|
|
56
|
+
```html
|
|
57
|
+
<!--[if !mso]><!-->
|
|
58
|
+
<link href="https://fonts.googleapis.com/css2?family=Lato:wght@700&family=Open+Sans:wght@400" rel="stylesheet">
|
|
59
|
+
<!--<![endif]-->
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
| Element | Primary | Fallback Stack |
|
|
63
|
+
|---|---|---|
|
|
64
|
+
| Headings | Lato | Arial, Helvetica, sans-serif |
|
|
65
|
+
| Body / Footer | Open Sans | "Helvetica Neue", Helvetica, Arial, sans-serif |
|
|
66
|
+
| Monospace | Courier New | Courier, monospace |
|
|
67
|
+
|
|
68
|
+
**Font sizes (production):**
|
|
69
|
+
|
|
70
|
+
| Element | Size | Weight | Line-height | Outlook `mso-line-height-alt` |
|
|
71
|
+
|---|---|---|---|---|
|
|
72
|
+
| Main H1 | 28px | 700 | 1.2 | 34px |
|
|
73
|
+
| Section H1 | 20px | 700 | 1.2 | 24px |
|
|
74
|
+
| Body | 16px | 400 | 1.2 | 19px |
|
|
75
|
+
| Button | 16px | 700 | — | — |
|
|
76
|
+
|
|
77
|
+
## CSS Reset
|
|
78
|
+
|
|
79
|
+
```css
|
|
80
|
+
* { box-sizing: border-box; }
|
|
81
|
+
body { margin: 0; padding: 0; }
|
|
82
|
+
a[x-apple-data-detectors] { color: inherit !important; text-decoration: inherit !important; }
|
|
83
|
+
#MessageViewBody a { color: inherit; text-decoration: none; }
|
|
84
|
+
p { line-height: inherit; }
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Image Rules
|
|
88
|
+
|
|
89
|
+
- Always: absolute URLs (`https://`), explicit `width` + `height` attributes, `display:block`, meaningful `alt` text
|
|
90
|
+
- Standard content images: `border-radius: 5px`
|
|
91
|
+
- Never: CSS `background-image` (Outlook won't render), rely on images for critical content
|
|
92
|
+
- Retina: serve 2x images with 1x `width`/`height` attributes
|
|
93
|
+
- Max image width: match container (typically 600px or less)
|
|
94
|
+
|
|
95
|
+
## Color Accessibility
|
|
96
|
+
|
|
97
|
+
| Color | Use | Ratio | Status |
|
|
98
|
+
|---|---|---|---|
|
|
99
|
+
| Body text `#494949` (Gravel) | Body/footer text | 7.7:1 | ✓ WCAG AA |
|
|
100
|
+
| Headings `#00066F` (Trustworthy Indigo) | H1/H2 on white | >10:1 | ✓ WCAG AAA |
|
|
101
|
+
| `#007BB4` (Accessible Teal) | Links, small CTA | 4.6:1 | ✓ WCAG AA |
|
|
102
|
+
| `#00B8B8` (Aquatic Pulse) | Large text/buttons only | 3.0:1 | ✗ Body text; use 18px+ or bold 16px+ |
|
|
103
|
+
|
|
104
|
+
Minimum 4.5:1 for body text (WCAG AA). Use `#00B8B8` only on large text or solid-fill buttons where background provides contrast.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# EspoCRM Email Template Compatibility
|
|
2
|
+
|
|
3
|
+
## What EspoCRM Strips
|
|
4
|
+
|
|
5
|
+
| Tag / Attribute | Notes |
|
|
6
|
+
|---|---|
|
|
7
|
+
| `<html>`, `<head>`, `<body>` | Document-level structure removed |
|
|
8
|
+
| `<style>` blocks | Stripped by prep script; inline CSS only is the guarantee |
|
|
9
|
+
| `<script>`, `<iframe>`, `<embed>`, `<object>` | Security-stripped |
|
|
10
|
+
| Event handlers (`onclick`, `onload`, etc.) | Stripped |
|
|
11
|
+
| `data-*` attributes | May be stripped |
|
|
12
|
+
|
|
13
|
+
Responsive `@media` queries in `<style>` blocks are lost after EspoCRM prep. This is expected — EspoCRM renders in its own container.
|
|
14
|
+
|
|
15
|
+
## What Survives
|
|
16
|
+
|
|
17
|
+
- Table-based layouts with inline `style=""` attributes
|
|
18
|
+
- `<img>` with inline styles and HTML attributes (`width`, `height`, `alt`)
|
|
19
|
+
- `<a>` links
|
|
20
|
+
- Standard block/inline elements: `div`, `span`, `p`, `h1–h6`, `ul`, `ol`, `li`, `br`, `hr`
|
|
21
|
+
|
|
22
|
+
## The Body→Div Transform
|
|
23
|
+
|
|
24
|
+
The key transform is simple: `espocrm-prep.py` extracts `<body>` content and wraps it in a `<div>`. The `<head>` style block, Google Fonts import, and MSO conditionals are all stripped.
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
python3 scripts/espocrm-prep.py input.html --out output.html
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Source View Paste Workflow
|
|
31
|
+
|
|
32
|
+
1. Generate email HTML (or receive from BeeFree/external tool)
|
|
33
|
+
2. Run `espocrm-prep.py` — this extracts `<body>` content and wraps in `<div>`. The `<head>` style block, Google Fonts import, and MSO conditionals are all stripped.
|
|
34
|
+
3. In EspoCRM: Email Template → Edit → switch to Source View (`< >` icon)
|
|
35
|
+
4. Paste the prepared HTML
|
|
36
|
+
5. **NEVER switch back to WYSIWYG** — it will corrupt the HTML
|
|
37
|
+
6. Save directly from source view
|
|
38
|
+
|
|
39
|
+
## EspoCRM Template Variables
|
|
40
|
+
|
|
41
|
+
EspoCRM uses **single-brace** syntax (NOT Handlebars double-brace):
|
|
42
|
+
|
|
43
|
+
| Variable | Usage | Email Types |
|
|
44
|
+
|----------|-------|-------------|
|
|
45
|
+
| `{Person.firstName}` | First name greeting | Newsletters |
|
|
46
|
+
| `{Person.name}` | Full name greeting | Campaigns, fundraising |
|
|
47
|
+
| `{optOutLink}` | Unsubscribe link | ALL emails (footer) |
|
|
48
|
+
|
|
49
|
+
The `{optOutLink}` renders as a clickable link. Style the container:
|
|
50
|
+
```html
|
|
51
|
+
<div style="text-align: center; color: #00B8B8;">{optOutLink}</div>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Tips
|
|
55
|
+
|
|
56
|
+
- Build HTML externally, paste into source view as a single operation
|
|
57
|
+
- Test by sending a test email to yourself before mass send
|
|
58
|
+
- If HTML looks broken after saving, it was round-tripped through WYSIWYG — rebuild from source
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
# Newsletter Layout Reference
|
|
2
|
+
|
|
3
|
+
HTML structure patterns for newsletters, campaigns, fundraising, and webinar promo emails. IMA-branded.
|
|
4
|
+
|
|
5
|
+
## Common Structure (BeeFree DOM)
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
body (background: #F2F3F5)
|
|
9
|
+
└── nl-container table (100% width, role="presentation")
|
|
10
|
+
└── row table (100% width, center-aligned)
|
|
11
|
+
└── row-content stack table (600px, margin: 0 auto, background: #FFFFFF)
|
|
12
|
+
└── column column-1 td (100%)
|
|
13
|
+
└── col-pad td (padding)
|
|
14
|
+
└── [content block tables]
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Content block class names: `image_block`, `heading_block`, `paragraph_block`, `button_block`, `divider_block`, `list_block`, `html_block`, `social_block`
|
|
18
|
+
|
|
19
|
+
## Preheader Pattern
|
|
20
|
+
|
|
21
|
+
```html
|
|
22
|
+
<div style="display:none;font-size:1px;color:#ffffff;line-height:1px;max-height:0;max-width:0;opacity:0;overflow:hidden;">
|
|
23
|
+
Preview text here (50-100 chars for inbox)
|
|
24
|
+
</div>
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## CTA Button Pattern (VML hybrid, Outlook-safe)
|
|
28
|
+
|
|
29
|
+
```html
|
|
30
|
+
<a href="URL" target="_blank" style="color: #ffffff; text-decoration: none;">
|
|
31
|
+
<!--[if mso]>
|
|
32
|
+
<v:roundrect style="height:42px;width:122px;v-text-anchor:middle;" arcsize="10%" fillcolor="#00B8B8">
|
|
33
|
+
<v:stroke dashstyle="Solid" weight="0px" color="#00B8B8"/>
|
|
34
|
+
<w:anchorlock/>
|
|
35
|
+
<v:textbox inset="0px,0px,0px,0px">
|
|
36
|
+
<center style="color:#ffffff;font-family:Arial, Helvetica, sans-serif;font-size:16px">
|
|
37
|
+
<![endif]-->
|
|
38
|
+
<span class="button" style="background-color:#00B8B8;border-radius:4px;color:#ffffff;display:inline-block;font-family:Lato,Arial,Helvetica,sans-serif;font-size:16px;font-weight:500;text-align:center;word-break:keep-all;">
|
|
39
|
+
<span class="btn-pad" style="padding:5px 10px;display:block;">
|
|
40
|
+
<span style="word-break:break-word;line-height:32px;">Read <strong>More »</strong></span>
|
|
41
|
+
</span>
|
|
42
|
+
</span>
|
|
43
|
+
<!--[if mso]></center></v:textbox></v:roundrect><![endif]-->
|
|
44
|
+
</a>
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Note: VML width varies per button text. CTA text uses `»` (raquo) chevron. "More" is bold.
|
|
48
|
+
|
|
49
|
+
## Section Divider Pattern
|
|
50
|
+
|
|
51
|
+
```html
|
|
52
|
+
<table class="divider_block" width="100%" cellpadding="0" cellspacing="0" border="0" role="presentation">
|
|
53
|
+
<tr>
|
|
54
|
+
<td class="divider_inner" style="border-top:1px solid #dddddd;font-size:1px;line-height:1px;"> </td>
|
|
55
|
+
</tr>
|
|
56
|
+
</table>
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Note: Uses ` ` (hair space), not ` `.
|
|
60
|
+
|
|
61
|
+
## Content Block Repeating Pattern
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
heading_block (h1, 20px emoji + title, color:#00066F, font: Lato, Arial, Helvetica, sans-serif)
|
|
65
|
+
→ image_block (580px, border-radius 5px, linked)
|
|
66
|
+
→ paragraph_block (16px body text, color #494949, font: "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif)
|
|
67
|
+
→ button_block (VML hybrid CTA)
|
|
68
|
+
→ divider_block (#dddddd)
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Colors & Fonts
|
|
72
|
+
|
|
73
|
+
Colors — CTA: `#00B8B8` | Body text: `#494949` | Outer background: `#F2F3F5` | Inner container: `#FFFFFF` | Dividers: `#dddddd` | Footer: `#919396` | H1: `#00066F`
|
|
74
|
+
|
|
75
|
+
Fonts — Headings: `Lato, Arial, Helvetica, sans-serif` | Body: `"Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif`
|
|
76
|
+
|
|
77
|
+
## UTM Tracking
|
|
78
|
+
|
|
79
|
+
ALL links must include UTM params:
|
|
80
|
+
`?utm_term=YYYY-MM-DD&utm_medium=email&utm_source=bulk-mailer&utm_content=slug&utm_campaign=type`
|
|
81
|
+
|
|
82
|
+
## EspoCRM Variables
|
|
83
|
+
|
|
84
|
+
Single-brace syntax: `{Person.firstName}`, `{Person.name}`, `{optOutLink}`
|
|
85
|
+
|
|
86
|
+
## Newsletter Layout
|
|
87
|
+
|
|
88
|
+
1. **Preheader** — preview text
|
|
89
|
+
2. **Header** — IMA logo (horizontal lockup, 200px min width)
|
|
90
|
+
3. **Opening hook** — `{Person.firstName}` greeting, 2-3 sentences, personality-forward
|
|
91
|
+
4. **Quick Links** — emoji + title list (3-6 items)
|
|
92
|
+
5. **Content sections** (3-6) — emoji header, 2-3 sentence summary, "Read More »" CTA
|
|
93
|
+
6. **Support footer** — "PLEASE SUPPORT HONEST MEDICINE" + donate CTA
|
|
94
|
+
7. **Standard footer** — disclaimer, `{optOutLink}`, address
|
|
95
|
+
|
|
96
|
+
## Fundraising / Campaign Layout
|
|
97
|
+
|
|
98
|
+
1. **Preheader**
|
|
99
|
+
2. **Header** with logo
|
|
100
|
+
3. **Emotional headline** (h1)
|
|
101
|
+
4. **Donate CTA above fold** — "💙 Match My Gift Today »" (or "💙 Please Donate »")
|
|
102
|
+
5. **Salutation** — "Dear {Person.name}"
|
|
103
|
+
6. **Problem/solution narrative** — 2-3 paragraphs
|
|
104
|
+
7. **Pull quote** from named leader
|
|
105
|
+
8. **"Why Your Support Matters"** — 3-4 bullets
|
|
106
|
+
9. **"Your Gift Powers What's Next"** — 4 bullets with specific dollar amounts
|
|
107
|
+
10. **Signoff** with full credentials + P.S. with deadline + repeat CTA
|
|
108
|
+
11. **Footer**
|
|
109
|
+
|
|
110
|
+
Note: If match campaign, repeat "EVERY DOLLAR DOUBLED" 2-3 times.
|
|
111
|
+
|
|
112
|
+
## Webinar / Resource Promo Layout
|
|
113
|
+
|
|
114
|
+
1. **Preheader** → **Header**
|
|
115
|
+
2. **"Watch Now!" header** (h1) + hook headline
|
|
116
|
+
3. **Context** — 3-4 sentences with tension
|
|
117
|
+
4. **"In this episode, you'll learn:"** — 3 surprising bullets
|
|
118
|
+
5. **Expert attribution** — name, credentials, affiliation
|
|
119
|
+
6. **"👉 Watch Now »" / "Download Now »"** CTA → **Footer**
|
|
120
|
+
|
|
121
|
+
## Journal / Institutional Layout
|
|
122
|
+
|
|
123
|
+
Static only — no template variables. Institutional tone. CTAs: "Submit a Paper »" / "Get Tickets »"
|
|
124
|
+
|
|
125
|
+
1. **Preheader** → **Header** → **Headline + subhead**
|
|
126
|
+
2. **Content sections** — article summaries or event details
|
|
127
|
+
3. **CTA block** → **Footer**
|