taketomarket 2.2.0 → 2.3.1

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 (181) hide show
  1. package/.claude-plugin/marketplace.json +13 -17
  2. package/.claude-plugin/plugin.json +2 -2
  3. package/README.md +35 -12
  4. package/bin/lib/campaign.cjs +12 -8
  5. package/bin/lib/codebase-scan.cjs +86 -0
  6. package/bin/lib/config.cjs +129 -0
  7. package/bin/lib/deploy.cjs +36 -0
  8. package/bin/lib/deviation.cjs +1 -1
  9. package/bin/lib/drift-log.cjs +4 -4
  10. package/bin/lib/health.cjs +32 -31
  11. package/bin/lib/install-detect.cjs +62 -0
  12. package/bin/lib/legacy-folder.cjs +100 -0
  13. package/bin/lib/playwright-check.cjs +26 -0
  14. package/bin/lib/site-location.cjs +22 -0
  15. package/bin/lib/state.cjs +3 -3
  16. package/bin/lib/svg-render.cjs +42 -0
  17. package/bin/ttm-tools.cjs +136 -4
  18. package/gates/base-gates.md +8 -8
  19. package/gates/gate-evaluation.md +8 -8
  20. package/install.js +37 -3
  21. package/package.json +10 -6
  22. package/playbooks/aeo.md +218 -114
  23. package/playbooks/affiliate.md +225 -160
  24. package/playbooks/email.md +236 -174
  25. package/playbooks/events.md +303 -213
  26. package/playbooks/landing-pages.md +309 -0
  27. package/playbooks/linkedin.md +264 -142
  28. package/playbooks/manifesto.md +322 -0
  29. package/playbooks/paid-ads.md +240 -189
  30. package/playbooks/positioning.md +340 -0
  31. package/playbooks/pr-media.md +308 -168
  32. package/playbooks/pseo.md +426 -0
  33. package/playbooks/seo.md +251 -158
  34. package/playbooks/social.md +253 -182
  35. package/playbooks/youtube.md +286 -181
  36. package/references/brand-color-theory.md +48 -0
  37. package/references/codex-image-gen-research.md +58 -0
  38. package/references/context-loading.md +6 -6
  39. package/references/humanizer-patterns.md +433 -0
  40. package/references/inline-education-blurbs.md +461 -0
  41. package/references/landing-page-anatomy.md +65 -0
  42. package/references/landing-page-headline-examples.md +190 -0
  43. package/references/linkedin-post-patterns.md +174 -0
  44. package/references/logo-design-principles.md +55 -0
  45. package/references/meta-gate-evaluation.md +3 -3
  46. package/references/obra-superpowers-conventions.md +170 -0
  47. package/references/playbook-leaders.md +472 -0
  48. package/references/playwright-mcp-setup.md +164 -0
  49. package/references/positioning-check-report.md +2 -2
  50. package/references/pseo-page-anatomy.md +56 -0
  51. package/references/pseo-templates/alternative-anatomy.md +31 -0
  52. package/references/pseo-templates/alternative-content-playbook.md +32 -0
  53. package/references/pseo-templates/blog-anatomy.md +28 -0
  54. package/references/pseo-templates/blog-content-playbook.md +36 -0
  55. package/references/pseo-templates/comparison-anatomy.md +29 -0
  56. package/references/pseo-templates/comparison-content-playbook.md +35 -0
  57. package/references/pseo-templates/use-case-anatomy.md +28 -0
  58. package/references/pseo-templates/use-case-content-playbook.md +30 -0
  59. package/skills/ttm-101/SKILL.md +25 -0
  60. package/skills/ttm-aeo-check/SKILL.md +17 -12
  61. package/skills/ttm-affiliate-kit/SKILL.md +5 -0
  62. package/skills/ttm-archive/SKILL.md +5 -0
  63. package/skills/ttm-brand-refresh/SKILL.md +5 -0
  64. package/skills/ttm-brief/SKILL.md +5 -0
  65. package/skills/ttm-competitor-scan/SKILL.md +5 -0
  66. package/skills/ttm-deploy/SKILL.md +22 -0
  67. package/skills/ttm-discover/SKILL.md +17 -0
  68. package/skills/ttm-email-check/SKILL.md +17 -0
  69. package/skills/ttm-email-preflight/SKILL.md +17 -11
  70. package/skills/ttm-fix/SKILL.md +5 -0
  71. package/skills/ttm-health/SKILL.md +6 -1
  72. package/skills/ttm-humanize/SKILL.md +33 -0
  73. package/skills/ttm-icp-refresh/SKILL.md +5 -0
  74. package/skills/ttm-improve-skill/SKILL.md +18 -0
  75. package/skills/ttm-init/SKILL.md +10 -3
  76. package/skills/ttm-keyword-map/SKILL.md +17 -11
  77. package/skills/ttm-landing/SKILL.md +19 -0
  78. package/skills/ttm-learn/SKILL.md +5 -0
  79. package/skills/ttm-linkedin-post/SKILL.md +26 -0
  80. package/skills/ttm-measure/SKILL.md +5 -0
  81. package/skills/ttm-new-campaign/SKILL.md +5 -0
  82. package/skills/ttm-next/SKILL.md +5 -0
  83. package/skills/ttm-playwright-setup/SKILL.md +18 -0
  84. package/skills/ttm-positioning-check/SKILL.md +5 -0
  85. package/skills/ttm-positioning-shift/SKILL.md +5 -0
  86. package/skills/ttm-produce/SKILL.md +5 -0
  87. package/skills/ttm-pseo/SKILL.md +26 -0
  88. package/skills/ttm-repurpose/SKILL.md +5 -0
  89. package/skills/ttm-request-skill/SKILL.md +18 -0
  90. package/skills/ttm-research/SKILL.md +18 -6
  91. package/skills/ttm-resume/SKILL.md +5 -0
  92. package/skills/ttm-review/SKILL.md +5 -0
  93. package/skills/ttm-seo/SKILL.md +64 -0
  94. package/skills/ttm-seo-audit/SKILL.md +17 -12
  95. package/skills/ttm-ship/SKILL.md +5 -0
  96. package/skills/ttm-state/SKILL.md +5 -0
  97. package/skills/ttm-update/SKILL.md +152 -4
  98. package/skills/ttm-verify/SKILL.md +5 -0
  99. package/templates/agents-md.md +14 -4
  100. package/templates/campaign-research.md +6 -6
  101. package/templates/campaign-state.md +1 -1
  102. package/templates/claude-md.md +14 -4
  103. package/templates/linkedin-base-template.md +48 -0
  104. package/templates/next-step-footer.md +13 -0
  105. package/templates/production-manifest.json +4 -4
  106. package/templates/pseo/alternative-cms-schema.json +65 -0
  107. package/templates/pseo/blog-cms-schema.json +55 -0
  108. package/templates/pseo/comparison-cms-schema.json +56 -0
  109. package/templates/pseo/use-case-cms-schema.json +62 -0
  110. package/templates/reference-files/brand.md +51 -0
  111. package/templates/reference-files/product-dna.md +73 -0
  112. package/templates/site-scaffold/app/globals.css +2 -0
  113. package/templates/site-scaffold/app/layout.tsx +17 -0
  114. package/templates/site-scaffold/app/page.tsx +33 -0
  115. package/templates/site-scaffold/app/robots.ts +8 -0
  116. package/templates/site-scaffold/app/sitemap.ts +10 -0
  117. package/templates/site-scaffold/app/tokens.css +21 -0
  118. package/templates/site-scaffold/components/Comparison.tsx +14 -0
  119. package/templates/site-scaffold/components/Faq.tsx +14 -0
  120. package/templates/site-scaffold/components/Features.tsx +14 -0
  121. package/templates/site-scaffold/components/FinalCta.tsx +17 -0
  122. package/templates/site-scaffold/components/Footer.tsx +12 -0
  123. package/templates/site-scaffold/components/Hero.tsx +22 -0
  124. package/templates/site-scaffold/components/HowItWorks.tsx +14 -0
  125. package/templates/site-scaffold/components/PricingTeaser.tsx +14 -0
  126. package/templates/site-scaffold/components/Problem.tsx +14 -0
  127. package/templates/site-scaffold/components/SocialProof.tsx +14 -0
  128. package/templates/site-scaffold/components/Solution.tsx +14 -0
  129. package/templates/site-scaffold/components/Testimonials.tsx +14 -0
  130. package/templates/site-scaffold/components/UseCases.tsx +14 -0
  131. package/templates/site-scaffold/content/.gitkeep +0 -0
  132. package/templates/site-scaffold/lib/.gitkeep +0 -0
  133. package/templates/site-scaffold/next.config.mjs +10 -0
  134. package/templates/site-scaffold/package.json +25 -0
  135. package/templates/site-scaffold/postcss.config.mjs +3 -0
  136. package/templates/site-scaffold/public/llms.txt +9 -0
  137. package/templates/site-scaffold/tsconfig.json +21 -0
  138. package/templates/verification-report.md +1 -1
  139. package/workflows/channel/linkedin-post.md +178 -0
  140. package/workflows/discipline/affiliate-kit.md +65 -6
  141. package/workflows/discipline/{email-preflight.md → email-check.md} +39 -4
  142. package/workflows/discipline/repurpose.md +82 -31
  143. package/workflows/discipline/{aeo-check.md → seo/aeo.md} +13 -6
  144. package/workflows/discipline/{seo-audit.md → seo/audit.md} +13 -6
  145. package/workflows/discipline/{keyword-map.md → seo/keyword-map.md} +13 -6
  146. package/workflows/education/ttm-101.md +114 -0
  147. package/workflows/lifecycle/brief-positioning-check.md +1 -1
  148. package/workflows/lifecycle/brief.md +64 -28
  149. package/workflows/lifecycle/{research.md → discover.md} +61 -19
  150. package/workflows/lifecycle/fix.md +72 -37
  151. package/workflows/lifecycle/humanize.md +280 -0
  152. package/workflows/lifecycle/learn.md +72 -35
  153. package/workflows/lifecycle/measure.md +54 -18
  154. package/workflows/lifecycle/produce.md +88 -37
  155. package/workflows/lifecycle/review.md +71 -25
  156. package/workflows/lifecycle/ship.md +62 -18
  157. package/workflows/lifecycle/verify.md +72 -26
  158. package/workflows/reference-mgmt/brand-refresh.md +50 -13
  159. package/workflows/reference-mgmt/competitor-scan.md +51 -15
  160. package/workflows/reference-mgmt/icp-refresh.md +48 -12
  161. package/workflows/reference-mgmt/positioning-check.md +55 -20
  162. package/workflows/reference-mgmt/positioning-shift.md +53 -17
  163. package/workflows/setup/init-brand-colors.md +75 -0
  164. package/workflows/setup/init-logo.md +113 -0
  165. package/workflows/setup/init-product-dna.md +83 -0
  166. package/workflows/setup/init-questions.md +166 -30
  167. package/workflows/setup/init-validation.md +22 -0
  168. package/workflows/setup/init.md +144 -39
  169. package/workflows/setup/new-campaign.md +48 -12
  170. package/workflows/site/deploy.md +98 -0
  171. package/workflows/site/landing.md +156 -0
  172. package/workflows/site/pseo.md +96 -0
  173. package/workflows/site/quality-gates.md +88 -0
  174. package/workflows/utility/archive.md +45 -9
  175. package/workflows/utility/health.md +77 -3
  176. package/workflows/utility/improve-skill.md +233 -0
  177. package/workflows/utility/next.md +38 -2
  178. package/workflows/utility/playwright-setup.md +128 -0
  179. package/workflows/utility/request-skill.md +218 -0
  180. package/workflows/utility/resume.md +40 -3
  181. package/workflows/utility/state.md +42 -7
@@ -1,173 +1,163 @@
1
1
  ---
2
2
  discipline: email
3
- asset_types: [newsletter, drip-email, promotional-email, transactional-email, nurture-sequence]
4
- version: "1.0"
3
+ asset_types: [welcome-series, broadcast, lifecycle-email]
4
+ version: "2.0"
5
5
  ---
6
6
 
7
7
  # Email Playbook
8
8
 
9
+ > **Framework: The Dinner Party Strategy — Val Geisler (Fix My Churn).** Every email is a course of a dinner party. You are the host. The reader is a guest who walked into your home. You do not greet a guest by handing them a logo, a discount code, and three buttons. You say hello, you pour them a drink, you ask how they are, and only much later — once they are full and comfortable — do you ask if they would like to see the renovation you did upstairs. Email is not a broadcast channel. Email is a dinner conversation that happens at scale.
10
+
9
11
  ## Production Guidance
10
12
 
11
- Email marketing succeeds when content reaches the inbox and compels action. Every email must clear two hurdles: deliverability (does it arrive?) and engagement (does the reader act?). Production guidance covers both.
13
+ If a reader read your email aloud at a real dinner table, would the table laugh, lean in, or push their plate away? That is the entire production target. Every rule below exists to keep your email in the first two categories.
14
+
15
+ ### The Dinner Party metaphor (the spine)
16
+
17
+ Five course types. Every email in a lifecycle program is one of these — and the order matters.
12
18
 
13
- ### Subject Line Craft
19
+ 1. **Welcome (the host moment).** They just walked in. Hang their coat. Tell them where the bathroom is. Tell them what's for dinner. Then stop talking and let them settle. The welcome email sets every expectation that follows. Pitching here is the equivalent of greeting a guest with a sales contract on the doormat.
20
+ 2. **Appetizers (low-pressure value).** Short, useful, no ask. You're feeding them something small and good so they trust the kitchen before the main course arrives. One idea per email. No CTA-stuffing.
21
+ 3. **Main course (the product talk).** You earned it. Now you can be direct about features, demos, expansion, pricing. The main course is allowed to be substantial — but only because you fed them appetizers first.
22
+ 4. **Sides (complementary value).** Adjacent value that makes the main course better — integrations, recipes, use-case stories, customer rituals. Sides keep the main course in context.
23
+ 5. **Dessert (delight + retention).** Post-purchase. Anniversary. Renewal. A check-in that asks for nothing. Dessert is what makes guests come back. Most B2B SaaS programs never serve it. That's why they have churn problems.
14
24
 
15
- Write subject lines between 30-60 characters. Avoid spam trigger words: free, guarantee, act now, urgent, limited time, congratulations, winner, no obligation, risk-free, order now, buy now, cash, credit, discount, double your, earn money, lowest price, save big. Do not use ALL CAPS words. Do not use excessive punctuation (no `!!!`, `???`, or `$$$`). One exclamation mark maximum. Personalization tokens (e.g., `{first_name}`) are acceptable and encouraged.
25
+ Before you write an email, classify it. *"This is an appetizer."* *"This is dessert."* If you can't name the course, you're not writing an email you're broadcasting.
16
26
 
17
- ### Preview Text
27
+ ### Sender voice — a person, not a brand
18
28
 
19
- Write preview text between 40-130 characters. Preview text must be distinct from the subject line -- it extends the subject's promise, not repeats it. If no preview text is specified, email clients pull the first line of body copy (often "View in browser" or navigation links), which wastes the preview slot.
29
+ The from-line says a human name. "Val from Fix My Churn." "Rishi at takeToMarket." Not "The takeToMarket Team." Not "noreply@". A guest does not get greeted by a logo. A guest gets greeted by *you*. The brand earns its place in the signature, not the sender field.
20
30
 
21
- ### Structure
31
+ The body follows the same rule. Write the way you talk to one specific customer you know by name. If you can't picture that customer — go pull a support ticket, a sales-call transcript, an onboarding-chat log, and read it aloud. Their exact phrases are the script. Customer language beats marketing language every single time.
22
32
 
23
- Use single-column layout for mobile compatibility. Keep text dominant -- 60:40 text-to-image ratio minimum. Place the primary CTA above the fold (visible without scrolling on mobile). Use minimum 14px body font and 22px+ headlines for mobile readability. Keep paragraphs short (2-3 sentences maximum).
33
+ ### Plain-text-first aesthetic
24
34
 
25
- ### Dark Mode Compatibility
35
+ A real friend doesn't email you a glossy four-column HTML mailer with a hero image and a CTA button the size of a dinner plate. A real friend writes you a few sentences and signs off. The default rendering target is plain-text-feel — even if the underlying email is HTML, it should look like a person typed it. Heavy-HTML promotional layouts read as marketing-blasts the moment the inbox preview loads. The reader's mental category is set before they click.
26
36
 
27
- Use transparent backgrounds or dark-mode-safe colors (#1a1a1a, #2d2d2d). Never rely on background images for text readability. All text must be readable on both light and dark backgrounds -- test with high contrast. Provide descriptive alt text on every image so the email remains functional with images blocked (common in dark mode clients).
37
+ This is not anti-design. It is anti-corporate-design. Logos belong at the bottom. Buttons belong below content. The first line of the body is a sentence, not a brand banner.
28
38
 
29
- ### Deliverability
39
+ ### Behavior-triggered, not time-triggered
30
40
 
31
- Email deliverability has two dimensions:
41
+ "Day 1, day 3, day 7" is a lazy drip schedule that sends the same sequence to a champion and a no-show. Trigger on what the user did or didn't do: signed up but never invited a teammate; activated feature A but never feature B; opened the last three emails but never replied; downgraded; upgraded. The trigger is the entire reason this email exists. If you cannot name the behavior that triggered the email, you don't have a lifecycle program — you have a calendar.
32
42
 
33
- 1. **Content-side:** Word choice, image ratio, formatting, and compliance elements. Checked by DISC-EMAIL-01 through DISC-EMAIL-06. These are evaluated by the AI verifier against the email asset content.
43
+ ### One ask per email
34
44
 
35
- 2. **DNS-side:** SPF, DKIM, and DMARC records must be properly configured for the sending domain. Checked by DISC-EMAIL-07 via automated DNS lookups per D-11. These are publicly queryable TXT records; the AI verifier runs `dig` or `nslookup` commands at verify time to confirm the sending domain has proper authentication. The sending domain is specified in the campaign brief or email asset metadata.
45
+ A guest can hear one question at a time. Multiple CTAs at equal weight dilute every click. The primary ask is a single button or a single inline link. Secondary asks live as smaller text-link "P.S." moves at the bottom. The primary ask is sometimes "reply to this email" especially in welcome because a reply is the highest-trust signal email can produce. An email that asks for a reply and gets one converts at a rate that no button ever will.
36
46
 
37
- ### Compliance by Default
47
+ ### Generosity before pitch
38
48
 
39
- Every email must include:
40
- - **Unsubscribe link:** Clear, easy to find, functional. One-click unsubscribe preferred (required by Gmail/Yahoo for bulk senders as of Feb 2024).
41
- - **Physical mailing address:** Required by CAN-SPAM Act. Can be a PO Box.
42
- - **Sender identification:** "From" name and email must accurately identify the sender.
49
+ You feed before you sell. In the appetizer course, the value is given freely with no hook. The reader closes the email and thinks "that was useful" — not "they want my credit card." The pitch is what you earn after generosity. Inverting this is the single most common failure of B2B SaaS email programs.
43
50
 
44
51
  ---
45
52
 
46
53
  ## Discipline Gates
47
54
 
48
- ### DISC-EMAIL-01: Subject/Preview Spam Scan -- Tier 1
55
+ ### DISC-EMAIL-01: Sender Is A Person -- Tier 1
49
56
 
50
- **Checks:** Subject line and preview text for spam trigger patterns
51
- **Against:** Known spam trigger word list and formatting rules
57
+ **Checks:** From-name, from-address, and email opening identify a named human sender, not a corporate brand entity
58
+ **Against:** Email asset metadata (from-name, from-address) and the first 200 characters of body content
52
59
 
53
60
  #### Evaluation Criteria
54
61
 
55
- 1. **Spam triggers**
56
- - PASS: No spam trigger words found in subject or preview text
57
- - WARN: 1 borderline trigger word present with mitigating context (e.g., "free trial" in a product context)
58
- - FAIL: 2+ spam trigger words present, OR ALL CAPS subject, OR excessive punctuation (multiple `!`, `?`, or `$` symbols)
62
+ 1. **From-name**
63
+ - PASS: From-name is a human first name (optionally first + last), with the brand attached as a suffix (e.g., "Val from Fix My Churn", "Rishi at takeToMarket")
64
+ - WARN: From-name is the brand alone but the body opens with a clearly named sender in the first paragraph (e.g., "Hey, Val here.")
65
+ - FAIL: From-name is a brand/team string ("The takeToMarket Team", "Marketing", "noreply", "info"), AND the body has no named human sender in the first paragraph
59
66
 
60
- 2. **Subject formatting**
61
- - PASS: No ALL CAPS words, no more than 1 exclamation mark, no `$$` or percentage-off claims in subject
62
- - WARN: One minor formatting issue (e.g., single ALL CAPS word used for emphasis like "NEW")
63
- - FAIL: Multiple formatting red flags (ALL CAPS + excessive punctuation + monetary claims)
67
+ 2. **From-address**
68
+ - PASS: From-address uses a personal mailbox at the brand domain (e.g., `val@fixmychurn.com`) and is reply-capable
69
+ - WARN: From-address is a role mailbox (e.g., `hello@`, `team@`) but replies are monitored by a human
70
+ - FAIL: From-address contains `noreply`, `no-reply`, or `donotreply` in any form
64
71
 
65
- ### DISC-EMAIL-02: Dark Mode Rendering -- Tier 2
72
+ ### DISC-EMAIL-02: Course Classification Present -- Tier 1
66
73
 
67
- **Checks:** Content compatibility with dark mode email clients
68
- **Against:** Dark mode rendering best practices
74
+ **Checks:** Email asset metadata declares which Dinner Party course this email is (welcome, appetizer, main, side, dessert), and the content matches that course's intent
75
+ **Against:** Email asset metadata course tag and body content
69
76
 
70
77
  #### Evaluation Criteria
71
78
 
72
- 1. **Background safety**
73
- - PASS: No hard-coded light backgrounds that would create white blocks in dark mode, or explicit dark-mode-safe alternatives provided
74
- - WARN: Background colors used but may render poorly in dark mode -- manual dark mode test recommended
75
- - FAIL: Email relies on background images for text readability or uses white backgrounds without dark mode alternatives
79
+ 1. **Course declared**
80
+ - PASS: Metadata explicitly tags the email as one of {welcome, appetizer, main, side, dessert}
81
+ - WARN: Course can be unambiguously inferred from filename, sequence position, or content but is not explicitly tagged
82
+ - FAIL: Course cannot be determined from metadata or content the email exists without a place in the meal
76
83
 
77
- 2. **Image handling**
78
- - PASS: All images have descriptive alt text and email is fully readable without images loaded
79
- - WARN: Images have alt text but email depends on images for key information (e.g., CTA is image-only)
80
- - FAIL: Image-only email with no alt text or text fallback
84
+ 2. **Course-content match**
85
+ - PASS: Content matches the declared course's intent (welcome sets expectations and names next step; appetizer gives value with no pitch; main course is direct product talk; side is adjacent value; dessert asks for nothing)
86
+ - WARN: Content mostly matches but contains one mild deviation (e.g., a welcome email with a soft secondary feature mention)
87
+ - FAIL: Course-content mismatch (e.g., a "welcome" email that pitches paid upgrade in the first paragraph; an "appetizer" with a hard CTA above the fold)
81
88
 
82
- ### DISC-EMAIL-03: Unsubscribe Presence -- Tier 1
89
+ ### DISC-EMAIL-03: No Pitch In Welcome -- Tier 1
83
90
 
84
- **Checks:** Legal compliance elements in email content
85
- **Against:** CAN-SPAM Act and GDPR requirements
91
+ **Checks:** If course is "welcome", the email does not contain a direct product pitch, paid-tier promotion, or sales CTA above the signature
92
+ **Against:** Body content of welcome emails only (this gate is skipped for other course types)
86
93
 
87
94
  #### Evaluation Criteria
88
95
 
89
- 1. **Unsubscribe mechanism**
90
- - PASS: Unsubscribe or opt-out link clearly present and easy to find (typically in footer)
91
- - WARN: Unsubscribe present but buried in very small text or requires multiple steps
92
- - FAIL: No unsubscribe link present in the email
93
-
94
- 2. **Physical address**
95
- - PASS: Physical mailing address present (required by CAN-SPAM)
96
- - WARN: Address present but incomplete (e.g., city only, no street/PO Box)
97
- - FAIL: No physical address present in the email
96
+ 1. **Welcome integrity**
97
+ - PASS: Welcome email greets the reader, sets expectations for what's coming, names the next step, and asks for a reply or no action — no paid-tier pitch, no demo booking link, no "upgrade" CTA
98
+ - WARN: Welcome contains a soft mention of a paid feature in the body but the primary CTA is reply-oriented or expectation-setting
99
+ - FAIL: Welcome email's primary CTA is a paid-upgrade button, demo-booking link, or "buy now" action
98
100
 
99
- ### DISC-EMAIL-04: Content-to-Image Ratio -- Tier 2
101
+ ### DISC-EMAIL-04: Single Ask -- Tier 1
100
102
 
101
- **Checks:** Text-to-image balance for deliverability and accessibility
102
- **Against:** Deliverability best practices (60:40 text dominant)
103
+ **Checks:** Body contains exactly one primary call to action one button or one inline link presented at primary visual weight. Secondary asks are permitted only as visually subordinate text links (e.g., P.S. moves)
104
+ **Against:** Body content link and button inventory
103
105
 
104
106
  #### Evaluation Criteria
105
107
 
106
- 1. **Text dominance**
107
- - PASS: Text content is clearly dominant -- email is fully readable and meaningful with images blocked
108
- - WARN: Roughly equal text and image content -- email communicates core message without images but loses significant context
109
- - FAIL: Image-heavy email -- more image area than text, or image-only email with minimal supporting text
108
+ 1. **Primary ask count**
109
+ - PASS: Exactly one primary CTA at full visual weight (button or bold inline link). Any other asks are clearly subordinate (smaller text links, P.S. lines, footer)
110
+ - WARN: One primary CTA plus one secondary that is visually close in weight (e.g., a button and a bold inline link in the same section)
111
+ - FAIL: Two or more competing primary CTAs at equal visual weight, OR the email has no clear primary ask at all
110
112
 
111
- 2. **Alt text coverage**
112
- - PASS: Every image has descriptive alt text that conveys the image's purpose
113
- - WARN: Some images missing alt text, or alt text is generic (e.g., "image", "photo")
114
- - FAIL: No alt text on images, or alt text on fewer than half of images
113
+ 2. **Reply-as-CTA bonus**
114
+ - PASS: If the email is a welcome or appetizer, the primary ask is "reply to this email" or a reply-prompting question — this is the strongest valid CTA for those courses
115
+ - WARN: Welcome/appetizer has a clickable CTA but no reply prompt anywhere
116
+ - FAIL: N/A informational signal only
115
117
 
116
- ### DISC-EMAIL-05: Subject Line Length -- Tier 2
118
+ ### DISC-EMAIL-05: Subject Line Conversation Test -- Tier 1
117
119
 
118
- **Checks:** Subject line and preview text length optimization
119
- **Against:** Email client display limits and engagement data
120
+ **Checks:** Subject line sounds like something a human would actually write to another human. Length is short. Hype words, ALL CAPS, and stacked punctuation are absent
121
+ **Against:** Subject line text and known marketing-blast patterns
120
122
 
121
123
  #### Evaluation Criteria
122
124
 
123
- 1. **Subject length**
124
- - PASS: Subject line is 30-60 characters (optimal display across desktop and mobile clients)
125
- - WARN: Subject line is 20-29 or 61-80 characters (may truncate on some mobile clients)
126
- - FAIL: Subject line is under 20 characters (too vague) or over 80 characters (truncated on most clients)
127
-
128
- 2. **Preview text**
129
- - PASS: Preview text present, 40-130 characters, and distinct from subject line
130
- - WARN: Preview text present but too short (under 40 chars), too long (over 130 chars), or repeats the subject line
131
- - FAIL: No preview text specified (email client will pull first line of body copy)
132
-
133
- ### DISC-EMAIL-06: Single Clear CTA -- Tier 2
134
-
135
- **Checks:** CTA clarity and prominence in email layout
136
- **Against:** Email content structure and visual hierarchy
137
-
138
- #### Evaluation Criteria
125
+ 1. **Conversational length**
126
+ - PASS: Subject line is between 3 and 9 words AND under 50 characters (a sentence fragment a friend would type)
127
+ - WARN: Subject is 10-12 words or 50-70 characters — leans broadcast, may truncate on mobile
128
+ - FAIL: Subject is over 12 words, over 70 characters, ALL CAPS, or contains stacked punctuation (`!!`, `??`, `$$`)
139
129
 
140
- 1. **Primary CTA**
141
- - PASS: One clear primary CTA above the fold with action-oriented button text (e.g., "Start Free Trial", "Download the Guide", "Register Now")
142
- - WARN: CTA present but below the fold, or uses weak text like "Click here", "Learn more", or "Read more"
143
- - FAIL: No CTA present, or multiple competing CTAs of equal visual weight above the fold
130
+ 2. **Hype-word scan**
131
+ - PASS: No marketing-hype words in subject (no "free", "guarantee", "act now", "limited time", "exclusive offer", "don't miss", "winner")
132
+ - WARN: One borderline word with context that softens it (e.g., "free trial" in a clearly product context)
133
+ - FAIL: Two or more hype words, or any combination of hype + ALL CAPS + stacked punctuation
144
134
 
145
- 2. **CTA hierarchy**
146
- - PASS: If secondary CTAs exist, they are visually subordinate to the primary CTA (smaller, text-link style, or lower in layout)
147
- - WARN: Secondary CTAs are nearly as prominent as the primary CTA (similar button size/color)
148
- - FAIL: N/A -- linked to primary CTA presence above
135
+ 3. **First-line preview test**
136
+ - PASS: Body's first sentence (the inbox preview slot) is a sentence written to a human not "View in browser", not a logo alt-text, not a navigation header
137
+ - WARN: First line is generic but readable (e.g., "Hi there,")
138
+ - FAIL: First line is "View in browser", a tracking pixel reference, or a navigation/menu bar
149
139
 
150
- ### DISC-EMAIL-07: DNS Deliverability -- Tier 1
140
+ ### DISC-EMAIL-06: Compliance Footer -- Tier 1
151
141
 
152
- **Checks:** Sending domain has SPF, DKIM, and DMARC records properly configured. These are public DNS TXT records that can be queried programmatically at verify time.
153
- **Against:** DNS TXT records for the sending domain specified in the campaign brief or email asset metadata
142
+ **Checks:** Legally required elements (unsubscribe link, physical mailing address, accurate sender identification) and deliverability hygiene
143
+ **Against:** Footer content and email asset metadata
154
144
 
155
145
  #### Evaluation Criteria
156
146
 
157
- 1. **SPF record**
158
- - PASS: `dig TXT {domain}` returns a valid SPF record (`v=spf1`) that includes the email service provider's sending servers (e.g., `include:_spf.google.com` for Google Workspace, `include:servers.mcsv.net` for Mailchimp)
159
- - WARN: SPF record exists but uses `+all` (overly permissive) or is missing the ESP's include directive
160
- - FAIL: No SPF TXT record found for the sending domain
147
+ 1. **Unsubscribe**
148
+ - PASS: One-click unsubscribe link present, visible, and functional (one-click is required by Gmail/Yahoo for bulk senders as of Feb 2024)
149
+ - WARN: Unsubscribe present but requires multiple steps or is buried in small text under 8px
150
+ - FAIL: No unsubscribe mechanism in the email
161
151
 
162
- 2. **DKIM record**
163
- - PASS: `dig TXT {selector}._domainkey.{domain}` returns a valid DKIM public key record (`v=DKIM1; k=rsa; p=...`)
164
- - WARN: DKIM record exists but uses a weak key (< 1024 bits) or selector cannot be determined from the campaign brief
165
- - FAIL: No DKIM record found for the expected selector. Note: selector is typically provided by the ESP -- check brief for ESP name and use their default selector (e.g., "google" for Google Workspace, "k1" for Mailchimp, "s1" for SendGrid, "smtp" for Amazon SES)
152
+ 2. **Physical address**
153
+ - PASS: Physical mailing address present (street address, suite, or PO Box). CAN-SPAM requirement
154
+ - WARN: Partial address (city/country only, no street or PO Box)
155
+ - FAIL: No physical address present
166
156
 
167
- 3. **DMARC record**
168
- - PASS: `dig TXT _dmarc.{domain}` returns a DMARC policy record with `p=quarantine` or `p=reject` (active enforcement)
169
- - WARN: DMARC record exists but uses `p=none` (monitoring only -- not enforcing, which means spoofed emails are still delivered)
170
- - FAIL: No DMARC record found for the domain
157
+ 3. **DNS authentication (sending domain)**
158
+ - PASS: `dig TXT {domain}` confirms valid SPF (`v=spf1` with ESP include), DKIM (`v=DKIM1; k=rsa; p=...` at the ESP's selector), and DMARC (`p=quarantine` or `p=reject`) records
159
+ - WARN: All three records exist but DMARC is `p=none` (monitoring only, not enforcing)
160
+ - FAIL: Any of SPF, DKIM, or DMARC missing for the sending domain
171
161
 
172
162
  ---
173
163
 
@@ -175,132 +165,204 @@ Every email must include:
175
165
 
176
166
  | Base Gate ID | Default Tier | Override Tier | Reason |
177
167
  |-------------|-------------|---------------|--------|
178
- | GATE-07 | Tier 2 (advisory) | Tier 1 (blocking) | Email compliance (CAN-SPAM, GDPR) is legally required; non-compliance risks sender reputation, inbox placement, and legal liability |
168
+ | GATE-07 | Tier 2 (advisory) | Tier 1 (blocking) | Email compliance (CAN-SPAM, GDPR, CASL, Gmail/Yahoo bulk-sender rules) is legally required and directly tied to inbox placement. A compliance miss is not advisory — it harms every future send from the same domain. |
179
169
 
180
170
  ---
181
171
 
182
172
  ## Format Rules
183
173
 
184
- Email-specific structural requirements enforced during production:
174
+ Geisler-style format rules. Each one exists to keep the email feeling like a dinner conversation, not a brochure.
185
175
 
186
- - **Subject line:** 30-60 characters
187
- - **Preview text:** 40-130 characters, distinct from subject line
188
- - **Body layout:** Single-column for mobile compatibility
189
- - **CTA button:** Minimum 44x44px touch target, contrasting color against background
190
- - **Unsubscribe:** Must be present and functional (one-click preferred)
191
- - **Physical address:** Must be present (CAN-SPAM requirement)
192
- - **Font size:** Minimum 14px body text, 22px+ headlines for mobile readability
193
- - **Image alt text:** Required on every image
194
- - **Text-to-image ratio:** 60:40 minimum (text dominant)
195
- - **Link count:** Avoid excessive links (>10 unique URLs can trigger spam filters)
176
+ - **From-name:** A human name + brand suffix. Never a team string. Never `noreply`.
177
+ - **Subject line:** 3-9 words, under 50 characters. Sentence-fragment voice. No ALL CAPS. No stacked punctuation. No hype words.
178
+ - **Preview text:** 40-130 characters, distinct from subject, extends the subject's promise. If left blank the inbox will pull "View in browser" — do not let that happen.
179
+ - **First body line:** A sentence written to a person. Not a logo. Not a banner. Not a menu bar.
180
+ - **Body length:** Short. A welcome email is 60-150 words. An appetizer is 80-250 words. A main course can be longer but stays under 500 words. Dessert is often the shortest of all — 40-100 words.
181
+ - **Layout:** Single column. Plain-text-feel even when HTML. Logo at the bottom, not the top.
182
+ - **CTA:** One primary ask. Button or inline link at primary weight. Action-oriented verb ("Reply with your one stuck point", "Watch the 90-second demo", "Pick a time"). Never "Click here." Never "Learn more."
183
+ - **Reply path:** From-address accepts replies. A human reads them.
184
+ - **Link count:** Under 10 unique URLs. Most appetizers should have 0-2 links total.
185
+ - **Image ratio:** Text-dominant. The email must read end-to-end with images off. Every image carries descriptive alt text.
186
+ - **Compliance footer:** Unsubscribe + physical address + sender identification. Every email. Every time.
196
187
 
197
188
  ---
198
189
 
199
190
  ## Examples
200
191
 
201
- ### Good: Clean Subject with Dark-Mode-Safe Layout
192
+ ### Good Welcome (the host moment)
202
193
 
203
194
  ```
204
- Subject: Your Q2 pipeline report is ready (42 chars)
205
- Preview: 3 insights your team should see this week (46 chars)
195
+ From: Val from Fix My Churn <val@fixmychurn.com>
196
+ Subject: you're in here's what happens next (6 words, 36 chars)
197
+ Preview: A note from me, plus the one thing I'd love for you to do.
198
+
199
+ Hey {first_name} —
200
+
201
+ Val here. Real human, currently drinking coffee that's gone cold.
202
+
203
+ You just joined Fix My Churn. Here is what to expect from me:
206
204
 
207
- [Single-column layout]
208
- [Dark background: #1a1a2e, light text: #e0e0e0]
209
- [Transparent PNG logo with alt text: "Acme Analytics"]
205
+ - One email every Tuesday. Short. About one churn pattern I see this week.
206
+ - Zero pitches in the next three emails. I want to be useful first.
207
+ - After that, I'll occasionally mention the Incubator — only when it
208
+ actually fits what you wrote me about.
210
209
 
211
- Hi {first_name},
210
+ One ask, and it's not a button:
212
211
 
213
- Your Q2 pipeline report just generated. Here are the highlights:
212
+ Hit reply and tell me the single stuck point in your retention right now.
213
+ One sentence is plenty. I read every reply myself.
214
214
 
215
- 1. Deal velocity increased 18% month-over-month
216
- 2. Two enterprise accounts moved to negotiation stage
217
- 3. Your top-performing rep closed 4 deals this week
215
+ Talk soon,
216
+ Val
218
217
 
219
- [Primary CTA button: "View Full Report" -- contrasting color, above fold]
218
+ P.S. If Tuesday isn't your day, you can unsubscribe at the bottom and
219
+ I will not be offended — I'd rather you stay because you want to.
220
220
 
221
221
  ---
222
- [Footer: unsubscribe link | company address | privacy policy]
222
+ Fix My Churn · 123 Real Street, Real City, MA 02114
223
+ Unsubscribe (one-click)
223
224
  ```
224
225
 
225
- **Why it works:** Subject under 60 chars, no spam triggers, preview extends the promise, single CTA above fold, dark-mode safe colors, alt text on images, compliance footer present.
226
+ **Why it works:** Course = welcome, explicitly. Sender is a person, reply-capable. No pitch. Single ask is a reply. Subject is 6 words and sounds like a text message. First body line is "Hey {first_name} —", not a logo. P.S. handles compliance without breaking voice.
226
227
 
227
- ### Good: Nurture Sequence Email with Clear Value
228
+ ### Good Churn-recovery (dessert that doubles as save)
228
229
 
229
230
  ```
230
- Subject: The 3-step framework we use for ABM (43 chars)
231
- Preview: Most teams skip step 2 -- here's why it matters (51 chars)
231
+ From: Val from Fix My Churn <val@fixmychurn.com>
232
+ Subject: did something go sideways? (4 words, 29 chars)
233
+ Preview: No pitch. Just checking in — and a way out if you need it.
232
234
 
233
- [Text-dominant email, minimal images]
235
+ Hey {first_name},
234
236
 
235
- {first_name}, here's something we learned running ABM for 200+ accounts last quarter...
237
+ I noticed your account moved to canceled yesterday. I'm not writing to
238
+ talk you out of it. I'm writing because I'd genuinely like to know what
239
+ happened, so I can either fix it for the next person or learn that we
240
+ weren't the right fit.
236
241
 
237
- [Educational content: 3 steps with brief explanations]
242
+ If you have 30 seconds, hit reply with one of these:
238
243
 
239
- [Primary CTA: "Get the Full ABM Playbook" -- button]
240
- [Secondary CTA: "Reply to this email with questions" -- text link, smaller]
244
+ A. Wrong tool for what I needed
245
+ B. Too expensive for the value I got
246
+ C. Something else (please say what)
247
+
248
+ Whatever you say, I'll read it. No follow-up sales sequence.
249
+
250
+ — Val
241
251
 
242
252
  ---
243
- [Unsubscribe | 123 Market St, San Francisco, CA 94105]
253
+ Fix My Churn · 123 Real Street, Real City, MA 02114
254
+ Unsubscribe (one-click)
255
+ ```
256
+
257
+ **Why it works:** Behavior-triggered (cancellation event). Course = dessert / save. No CTA button — the reply IS the CTA. Customer-language options. Promises no follow-up sales sequence and means it.
258
+
259
+ ### Good — Broadcast appetizer
260
+
244
261
  ```
262
+ From: Val from Fix My Churn <val@fixmychurn.com>
263
+ Subject: the 4-word welcome email test (6 words, 32 chars)
264
+ Preview: If your welcome email fails this, your churn starts on day one.
265
+
266
+ Hey {first_name},
267
+
268
+ Quick test you can run on your own welcome email in 10 seconds.
269
+
270
+ Open it. Read it out loud. If the first four words sound like something
271
+ a marketing department would say — "We're so excited to..." — your guest
272
+ just walked into a sales pitch instead of a dinner party.
245
273
 
246
- **Why it works:** No spam words, educational value before ask, single primary CTA with subordinate secondary, text-dominant, full compliance footer.
274
+ The fix is short. The first four words should pass this test:
247
275
 
248
- ### Bad: Spam Trigger Subject Line
276
+ "Could a human have actually typed this to one other human?"
249
277
 
278
+ That's the whole thing for this week.
279
+
280
+ — Val
281
+
282
+ P.S. If you want the full Welcome Email Audit checklist I use with
283
+ Incubator members, hit reply with the word "audit" and I'll send it over.
284
+
285
+ ---
286
+ Fix My Churn · 123 Real Street, Real City, MA 02114
287
+ Unsubscribe (one-click)
250
288
  ```
251
- Subject: FREE GUARANTEED RESULTS!!! Act Now -- Limited Time Offer!!!
252
- Preview: Don't miss this incredible opportunity to save BIG $$$
253
289
 
254
- [Image-only email body with no text]
255
- [No alt text on images]
256
- [No unsubscribe link]
257
- [No physical address]
290
+ **Why it works:** Course = appetizer. One idea. No button. P.S. is the soft ask, gated on a reply (still single-ask). Generosity-first — the test is given fully in the body, the checklist offer is optional dessert.
291
+
292
+ ### Bad — Corporate broadcast ("the buffet line")
293
+
294
+ ```
295
+ From: The Acme Marketing Team <marketing@acme.io>
296
+ Subject: 🎉 HUGE NEWS FROM ACME! Don't miss our biggest launch ever!!! 🎉
297
+ Preview: (none — pulls "View in browser | Update preferences | Acme Logo")
298
+
299
+ [Hero image: 1200x600 product render, no alt text]
300
+ [Three side-by-side CTA buttons of identical weight:
301
+ "Start Free Trial" | "Book a Demo" | "Download the eBook"]
302
+ [Body is 90% image, ~30 words of text]
303
+ [Footer: 6px gray unsubscribe link in #DDDDDD on #FFFFFF]
258
304
  ```
259
305
 
260
- **Why it fails:** DISC-EMAIL-01 FAIL (spam triggers: "FREE", "GUARANTEED", ALL CAPS, "!!!", "Act Now", "Limited Time"), DISC-EMAIL-03 FAIL (no unsubscribe, no address), DISC-EMAIL-04 FAIL (image-only), DISC-EMAIL-05 FAIL (subject over 80 chars).
306
+ **Why it fails:** Sender is a team string (DISC-EMAIL-01 FAIL). No course classification and the content is incoherent as any course (DISC-EMAIL-02 FAIL). Three competing primary CTAs (DISC-EMAIL-04 FAIL). Subject is 11 words, ALL CAPS, stacked punctuation, hype words (DISC-EMAIL-05 FAIL). First line is "View in browser" (DISC-EMAIL-05 FAIL again). Image-heavy. Footer is hidden. This is a broadcast, not a dinner conversation — and the inbox will treat it accordingly.
261
307
 
262
- ### Bad: Image-Only Email with White Background
308
+ ### Bad — "Newsletter"-branded image-heavy mailer
263
309
 
264
310
  ```
265
- Subject: New product launch (18 chars -- too short)
266
- Preview: (none specified)
311
+ From: Acme Newsletter <newsletter@acme.io>
312
+ Subject: 📰 The Acme Newsletter — Issue #47 — November 2026 Edition
313
+ Preview: (none)
267
314
 
268
- [White background #FFFFFF]
269
- [Single large image containing all text and CTA]
270
- [No alt text]
271
- [Unsubscribe link in tiny 8px gray text]
315
+ [Banner image with "THE ACME NEWSLETTER" in 72pt type]
316
+ [Five sections, each with its own image header and its own CTA button]
317
+ [No reply path — noreply@ in headers]
272
318
  ```
273
319
 
274
- **Why it fails:** DISC-EMAIL-02 FAIL (white background, no dark mode alternative, image-dependent), DISC-EMAIL-04 FAIL (image-only), DISC-EMAIL-05 FAIL (subject under 20 chars, no preview text), DISC-EMAIL-06 FAIL (CTA is inside image, not a real button).
320
+ **Why it fails:** Calling it a "newsletter" sets the reader's mental category to "marketing material I can ignore" before they read a word. Five competing CTAs (DISC-EMAIL-04 FAIL). `noreply@` (DISC-EMAIL-01 FAIL). Subject leads with an emoji and a magazine-style edition number nobody texts their friend "📰 Issue #47." No course classification. The reader has been served a buffet of cold appetizers instead of a meal.
275
321
 
276
322
  ---
277
323
 
278
324
  ## Anti-Patterns
279
325
 
280
- 1. **Spam trigger words in subject line:** Using "free", "guarantee", "act now", "limited time", "congratulations", "winner" -- these words trigger spam filters and reduce inbox placement rates.
326
+ 1. **Pitching in the welcome.** The single most common Geisler-named failure. The welcome is the host moment. Selling in the welcome is greeting a dinner guest with a sales contract on the doormat. Welcome emails set the tone for every email that follows — burning that moment burns the entire program.
327
+
328
+ 2. **Day-N drip schedules.** "Day 1, day 3, day 7" treats every signup like every other signup. The user who invited five teammates on day one and the user who never logged in get the same email. Lifecycle is behavior, not time. If you cannot name the user behavior that triggered the email, you do not have a lifecycle — you have a calendar.
329
+
330
+ 3. **"The {Brand} Team" or `noreply@` from-lines.** Brands cannot greet guests. People can. A from-line that hides the human kills the reply path before the reader even decides whether to open. Reply rate is the single most underrated email KPI; `noreply@` makes it zero by design.
281
331
 
282
- 2. **ALL CAPS in subject or body:** Writing entire words or phrases in capitals signals spam to both filters and readers. One word for emphasis (e.g., "NEW") is borderline acceptable; full caps subjects are not.
332
+ 4. **Image-only / "newsletter"-branded layouts.** A heavy-HTML mailer with a hero banner, a magazine masthead, and five buttons sets the reader's mental category to "marketing" the moment the preview pane loads. Plain-text-feel emails get read; magazine layouts get archived.
283
333
 
284
- 3. **Image-only emails:** Emails composed entirely of images with no text fallback are flagged by spam filters, broken when images are blocked (common in corporate email clients), and inaccessible to screen readers.
334
+ 5. **Multiple competing CTAs at equal weight.** A guest can answer one question at a time. Three buttons next to each other dilute every click. One primary ask per email, always.
285
335
 
286
- 4. **Missing unsubscribe link:** Legally required by CAN-SPAM (US), GDPR (EU), CASL (Canada), and most jurisdictions. Missing unsubscribe is a compliance violation, not just a best practice issue.
336
+ 6. **"Hi {first_name}!" with nothing behind it.** Personalization tokens with no actual personalization are the email equivalent of a stranger using your name at a networking event. The token is fine only when the rest of the email reads as something a real person could have written specifically to a real reader.
287
337
 
288
- 5. **White backgrounds without dark mode alternatives:** Over 80% of email opens occur on devices with dark mode available. White backgrounds create jarring bright blocks in dark mode email clients.
338
+ 7. **Marketing language over customer language.** "Leverage our cutting-edge platform to unlock enterprise-grade outcomes" is a sentence no customer ever spoke. Mine support tickets, sales calls, and onboarding chats. Use customer phrases verbatim. The body should sound like the reader's own vocabulary read back to them.
289
339
 
290
- 6. **Multiple competing CTAs:** Three equally prominent buttons confuse the reader about what action to take. One primary CTA per email; secondary actions should be visually subordinate.
340
+ 8. **No reply path / no dessert course.** Programs that only send pre-purchase emails optimize for acquisition and starve retention. Dessert — anniversary, check-in, "anything I can fix?" emails that ask for nothing — is what makes guests come back. Most B2B SaaS programs never serve it. That is why their churn graphs trend the way they do.
291
341
 
292
- 7. **Sending from unconfigured domains:** Sending email from a domain with no SPF, DKIM, or DMARC records means anyone can spoof your domain, your emails land in spam, and your sender reputation degrades over time.
342
+ 9. **Batch-and-blast broadcasts.** Sending the same email to every contact at the same time treats the list as an audience instead of as guests at a table. Segment by behavior. Send fewer emails to more specific people.
293
343
 
294
344
  ---
295
345
 
296
346
  ## Metrics
297
347
 
298
- What to measure post-ship for email campaigns:
348
+ Geisler reorders the conventional email metric stack. Reply rate and retention sit above open rate.
349
+
350
+ - **Reply rate (KPI).** The strongest signal email can produce. Welcome and appetizer courses should specifically engineer for replies — the primary ask is often a reply. Target: 2-5% reply rate on welcome emails; 0.5-2% on appetizer broadcasts. Below 0.5% across courses means the email reads as a broadcast, not a conversation.
351
+ - **Retention / churn rate (KPI).** Lifecycle email's actual job. Measure cancellation rate, downgrade rate, and dormant-account rate in the cohort that received the program vs. the cohort that did not. Dessert-course emails earn their place against this metric.
352
+ - **Expansion revenue from email.** The main-course test. What percentage of upgrades, seat-adds, and plan-changes can be attributed to a specific main-course email? Geisler's bar: main-course emails should drive measurable expansion, not just opens.
353
+ - **Open rate.** Useful but downgraded — Apple Mail Privacy Protection inflates this number for ~40% of opens. Use it for subject-line A/B comparisons, never as a primary success metric. Benchmark: 25-45% for behavior-triggered sends; lower for broadcast.
354
+ - **Click-through rate.** Useful when the email has a real button. Less meaningful when the primary ask is a reply (clicks ≈ 0 by design). Always interpret CTR in the context of the course type.
355
+ - **Unsubscribe rate.** Healthy floor; do not drive to zero. An unsubscribe is a guest politely leaving the dinner — far better than a guest staying and ignoring you. Target: under 0.5% per send.
356
+ - **Spam complaint rate.** Hard ceiling. Must stay under 0.1% (Gmail/Yahoo enforcement threshold). A single bad send above this floor can damage the sending domain for months.
357
+ - **DNS authentication pass rate.** SPF/DKIM/DMARC alignment per ESP reports. Target: 100%.
358
+ - **Dinner-party feel (qualitative).** Pull 5 random emails from the last quarter. Read each aloud at a real table. Does it sound like a host or a megaphone? This is not a number, but it is the only metric Geisler herself trusts to detect drift before the quantitative metrics do.
359
+
360
+ ---
361
+
362
+ ## Sources
299
363
 
300
- - **Open rate:** Subject line and sender name effectiveness. Benchmark: 20-25% for B2B, 15-20% for B2C.
301
- - **Click-through rate (CTR):** CTA effectiveness and content relevance. Benchmark: 2-5%.
302
- - **Unsubscribe rate:** Content relevance and send frequency appropriateness. Healthy: under 0.5% per send.
303
- - **Spam complaint rate:** Deliverability health signal. Must stay under 0.1% (Gmail/Yahoo threshold).
304
- - **Conversion rate:** Outcome metric alignment -- did the email drive the intended action? Track against the campaign brief's outcome metric.
305
- - **DNS authentication pass rate:** SPF/DKIM/DMARC alignment percentage from ESP reports. Target: 100% alignment.
306
- - **Bounce rate:** List hygiene indicator. Hard bounces above 2% signal list quality issues.
364
+ - Val Geisler official site & writing index: https://www.valgeisler.com/
365
+ - MicroConf talk archive (Val Geisler, "The Dinner Party Strategy" foundational talk): https://microconf.gen.co/val-geisler/
366
+ - Fix My Churn Incubator (productized lifecycle-email program the canonical application of the framework): https://fixmychurn.com/incubator/
367
+ - Val Geisler on LinkedIn "lifecycle marketing is a misnomer if it's time-based" (behavior-trigger principle): https://www.linkedin.com/posts/lovevalgeisler_lifecycle-marketing-is-a-misnomer-if-in-activity-7057708444811755521-LmxB
368
+ - Churn.fm podcast Val Geisler on customer-language email strategy: https://www.churn.fm/episode/customer-email-strategy