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,136 +1,206 @@
1
1
  ---
2
2
  discipline: linkedin
3
- asset_types: [linkedin-post, linkedin-article, linkedin-carousel, linkedin-poll]
4
- version: "1.0"
3
+ asset_types: [post, comment, article]
4
+ version: "2.0"
5
5
  ---
6
6
 
7
7
  # LinkedIn Playbook
8
8
 
9
+ > **Leader:** Justin Welsh — The LinkedIn Operating System (+ The Content OS).
10
+ > 0 → 600K+ followers, $8M+ in solo revenue, no ads. The framing is *solopreneur*, not corporate marketing. This playbook is Welsh-flavored content poured into the takeToMarket base contract.
11
+ >
12
+ > **Tactical patterns:** structural hook templates and formatting rules are folded in from `references/linkedin-post-patterns.md` (Welsh + Sahil Bloom + Cole Schafer + 2025-2026 LinkedIn engagement studies). Welsh is the operating system; the patterns are the components.
13
+
9
14
  ## Production Guidance
10
15
 
11
- LinkedIn rewards content that keeps people on the platform. The algorithm actively penalizes posts with external links (~60% less reach per 2026 data). Every LinkedIn post must deliver its full value natively -- no teasers, no "read more at..." redirects. If a link is essential, place it in the first comment, not the post body.
16
+ ### The LinkedIn Operating System (LinkedIn OS)
17
+
18
+ LinkedIn is not a "channel" in this playbook — it is an operating system for a one-person business. Welsh's framing: your audience is the inventory, your profile is the conversion page, your posts are the storefront, and your DMs are the till. Every asset produced under this playbook serves that machine.
19
+
20
+ **Three layers, ordered:**
21
+
22
+ 1. **Profile (the conversion page).** Headline, banner, About, Featured section. Optimize these *before* producing a single post. If posts drive traffic to a generic profile, the funnel leaks at the moment of highest intent.
23
+ 2. **Posts (the storefront).** Daily, on weekdays, twice on some days. Consistency compounds; the algorithm rewards rhythm, not virtuosity.
24
+ 3. **Comments + DMs (the till).** Comments are where distribution actually happens; DMs are where revenue actually happens. The post is the lure, not the catch.
25
+
26
+ ### The Three Content Categories (50/30/20)
27
+
28
+ Welsh's content split, never inverted:
29
+
30
+ | Category | % of posts | Job-to-be-done | Example shape |
31
+ |---|---|---|---|
32
+ | **Actionable / educational** | 50% | Teach a transferable skill | "5 mistakes I made in my first year solo. Avoid them." |
33
+ | **Motivational / inspirational** | 30% | Reinforce identity and aspiration | "Two years ago I was unemployed. Today I crossed $1M solo. The lesson:" |
34
+ | **Promotional** | 20% | Convert attention into customers | "I open 5 spots for my LinkedIn audit each month. Here's how it works:" |
35
+
36
+ Solopreneurs invert this constantly — promotion creeps to 50%+ when revenue dips. That's the moment to discipline back to the split. Burn the audience and there is nothing to promote *to* next quarter.
37
+
38
+ ### One Topic, Three Audiences
39
+
40
+ Every post is angled at exactly one of these three readers:
41
+
42
+ - **Behind you (1 year ago you):** the most underrated audience. They're trying to figure out what you already know. Easiest content to write — write what you wish someone had told 1-year-ago you.
43
+ - **Beside you (peers right now):** lateral validation. Riskier — peers are skeptical, but they amplify hardest when you nail it.
44
+ - **Ahead of you (1 year ahead of you):** aspirational. Hardest to write; do it sparingly. Used well, this is where mentors find you.
45
+
46
+ Pick one per post. Mixing all three produces vague content that resonates with nobody.
12
47
 
13
- ### Hook First
48
+ ### Hook → Body → CTA (and the 210-character truncation rule)
14
49
 
15
- The first line is everything. It must appear before the "see more" truncation (~210 characters on mobile). The hook determines whether the reader expands the post or scrolls past.
50
+ LinkedIn's mobile feed shows ~210 characters before the "see more" cut. Welsh: *"The first line is more important than 95% of the rest of the post."* The hook does 80% of the work; the body delivers; the CTA invites never pushes.
16
51
 
17
- **Do NOT start with "I".** Opening with "I was thinking...", "I recently...", or "I just..." signals a self-centered post that the reader has no reason to care about. Instead, open with:
18
- - A question that challenges an assumption
19
- - A bold claim or counterintuitive statement
20
- - A specific data point or statistic
21
- - A scene-setting scenario the reader recognizes
52
+ **Cross-reference:** Hook templates, banned hook patterns, and the "rehook on line 2" technique are catalogued in `references/linkedin-post-patterns.md` §Hook patterns. Producers must select a hook pattern from that file before drafting.
22
53
 
23
- The hook must be complete within the first 210 characters. Do not start a thought in the hook that requires expanding the post to understand.
54
+ ### The 1-2-1-2-1 Posting Cadence
24
55
 
25
- ### Native Content Only
56
+ Welsh's weekday cadence (Mon-Fri):
26
57
 
27
- LinkedIn's algorithm penalizes posts with external links. Content must stand alone without requiring a click. Apply these rules:
58
+ - **Mon:** 1 actionable post (frame the week's lesson).
59
+ - **Tue:** 2 posts — 1 actionable, 1 motivational (Tue 8-10am is the highest-engagement window).
60
+ - **Wed:** 1 post — the week's centerpiece, usually a long-form story or framework.
61
+ - **Thu:** 2 posts — 1 actionable, 1 promotional.
62
+ - **Fri:** 1 light post (motivational or reflection). Avoid Friday afternoons — reach drops 30-50%.
28
63
 
29
- 1. **No URLs in the post body.** If the post references external content, summarize the key insight in the post itself.
30
- 2. **Link in first comment** if a URL is essential. Mention "link in comments" at the end of the post if needed.
31
- 3. **Content self-sufficiency:** A reader who never clicks any link should still get full value from the post text.
64
+ Three to four posts per week is the *floor* for compounding reach. Sporadic posting kills the algorithm relationship faster than no posting at all.
32
65
 
33
- ### Visual Assets
66
+ ### Comment-Driven Distribution
34
67
 
35
- Document/carousel posts and image posts get higher engagement than text-only. When including visual assets:
36
- - Use 1:1 (square) or 4:5 (portrait) image ratios for maximum feed space
37
- - Carousel documents should be PDF format with one key point per slide
38
- - Infographics and data visualizations perform well for B2B audiences
68
+ Welsh's most under-credited rule: **the comments are the second post.** LinkedIn 2025-2026 ranking weights dwell time and first-hour comments heavier than likes. Operating rules:
39
69
 
40
- ### Engagement Design
70
+ 1. **Block 30 minutes after posting** to reply to every commenter. Replies inside the first 30 minutes feed the algorithm signal that compounds reach for the next 24 hours.
71
+ 2. **Reply with 2+ sentence answers**, not "Thanks!" — your reply is a mini-post and shows up in the commenter's notifications and their followers' feeds.
72
+ 3. **Comment on 10 high-traffic posts in your niche daily**, *before* your own post drops. This warms the audience and seeds your name in the right feeds.
41
73
 
42
- The algorithm rewards posts that generate meaningful replies (not just reactions). Design for conversation:
43
- - End with a specific question or conversation prompt
44
- - Consider what the reader would actually type as a comment
45
- - Avoid generic prompts like "What do you think?" -- ask something specific
46
- - Questions that invite personal experience sharing generate the best threads
74
+ ### Templatize, Don't Freestyle
47
75
 
48
- ### Format for Scanning
76
+ Welsh keeps 30+ post templates in a swipe file and *fills them in* — he does not stare at a blank page. Pair this with the Stantly-derived structural templates (A: Story+Lesson, B: List+Context, C: Counter-take, D: Behind-the-scenes, E: PAIPS) in `references/linkedin-post-patterns.md` §Post structure templates. Every post produced under this playbook should reference a named template by letter.
49
77
 
50
- LinkedIn posts are read on phones. Format accordingly:
51
- - Use line breaks liberally between ideas
52
- - Short paragraphs: 1-2 sentences maximum
53
- - Use whitespace as a design element -- dense blocks of text get skipped
54
- - Bullet points and numbered lists break up the visual rhythm
55
- - Avoid long paragraphs that create walls of text on mobile
78
+ ### The 50-Post Rule
79
+
80
+ The first 50 posts are the apprenticeship. Welsh's stance: don't change strategy inside the first 50 — that's not enough data. After 50 posts, audit which hooks/templates produced the top-3 by comments-to-likes ratio. Double down on those. Discard the bottom-3.
81
+
82
+ ### Content OS (Cross-Channel Repurposing)
83
+
84
+ One long-form essay (newsletter, blog) → 5–7 short LinkedIn/X/Threads posts. The thinking is the asset; the surfaces are distribution. This rule connects the LinkedIn playbook to the takeToMarket Amplify phase — every LinkedIn post under this playbook should be tagged with the source essay (or marked `origin: linkedin-native`).
85
+
86
+ ### Voice Non-Negotiables
87
+
88
+ - **Sound like a one-person business.** First-person, specific, accountable. Generic corporate voice signals an outsourced ghostwriter and burns trust.
89
+ - **Pick a fight every 5 posts.** Welsh-style "relatable enemy" framing — name the bad practice, the default behavior, the lazy advice. Specific opponents > vague generalities.
90
+ - **Numbers over adjectives.** "$47K in 60 days" survives a skim; "great results" does not.
91
+ - **No fake vulnerability.** "I almost cried in the parking lot" without a concrete lesson reads as performance. Welsh: vulnerability earns trust *only* when paired with a transferable insight.
56
92
 
57
93
  ---
58
94
 
59
95
  ## Discipline Gates
60
96
 
61
- ### DISC-LI-01: Hook Quality -- Tier 1
97
+ ### DISC-LINKEDIN-01: Hook Quality Tier 1
62
98
 
63
- **Checks:** First line effectiveness and format
64
- **Against:** Post content (first 210 characters)
99
+ **Checks:** First-line effectiveness, length, and visibility within the 210-character mobile truncation.
100
+ **Against:** Post content (first line + first 210 characters).
65
101
 
66
102
  #### Evaluation Criteria
67
103
 
68
- 1. **Opening word**
69
- - PASS: Post does NOT start with "I" -- opens with a question, data point, bold claim, or scene-setting statement
70
- - WARN: Post starts with "I" but follows immediately with a surprising or counterintuitive statement (e.g., "I deleted our most successful campaign -- here's why")
71
- - FAIL: Post starts with "I" followed by mundane context (e.g., "I was thinking about...", "I recently attended...", "I just read...")
104
+ 1. **Hook length and structure**
105
+ - PASS: First line ≤120 characters AND opens with one of the 7 hook patterns from `references/linkedin-post-patterns.md` §Hook patterns (Confession / Counter-conventional / Specific number / Open loop / Question / Story start / Welsh's Relatable-Enemy Flip).
106
+ - WARN: First line is 121-180 characters OR opens with "I" but follows with a counterintuitive payoff within the same line (e.g., "I deleted my best-performing post here's why").
107
+ - FAIL: First line >180 characters OR opens with "I was thinking…" / "I'm excited to share…" / "I recently…" / "🚀 Big news!" / any emoji-led opener / generic announcement framing.
72
108
 
73
- 2. **Hook visibility**
74
- - PASS: Hook is complete within the first 210 characters -- the reader gets the key promise or tension before "see more"
75
- - WARN: Hook starts strong but the key payoff falls after the 210-character truncation point
76
- - FAIL: First 210 characters are setup or context with no hook -- no reason for the reader to expand the post
109
+ 2. **Hook visibility under truncation**
110
+ - PASS: The reader understands the post's promise/tension within the first 210 characters; a "rehook" or specific concrete noun (number, name, dollar amount, date) appears in the first two lines.
111
+ - WARN: Hook is strong but the payoff lands at characters 211-280 (just past truncation).
112
+ - FAIL: First 210 characters are setup/context only no promise, no tension, no concrete noun. Nothing earns the "see more" click.
77
113
 
78
- ### DISC-LI-02: Native Content Format -- Tier 1
114
+ ### DISC-LINKEDIN-02: Native-Only Content Tier 1
79
115
 
80
- **Checks:** Absence of external links in post body and content self-sufficiency
81
- **Against:** Post content
116
+ **Checks:** Absence of external URLs in the post body and self-sufficiency of the content.
117
+ **Against:** Post content.
82
118
 
83
119
  #### Evaluation Criteria
84
120
 
85
121
  1. **Link placement**
86
- - PASS: No external URLs in the main post body
87
- - WARN: One external link present in the post body, but the post content stands alone without it (the link is supplementary, not the point)
88
- - FAIL: External link is the primary purpose of the post -- link-centric content (e.g., "Check out this article: [URL]" or "New blog post: [URL]")
122
+ - PASS: Zero external URLs in the post body. If a link is essential, it lives in the first comment and the post body ends with "link in comments."
123
+ - WARN: One supplementary URL in the body, but the post delivers complete value without clicking it.
124
+ - FAIL: Post is a wrapper around a URL ("Check out my new article:" / "Read the full breakdown here:") — link-centric content. LinkedIn 2025-2026 algorithm suppresses link posts by ~60%; this guarantees a dead post.
89
125
 
90
126
  2. **Content self-sufficiency**
91
- - PASS: Reader gets full value from the post text alone without clicking any link
92
- - WARN: Post summarizes linked content but adds original perspective or insight beyond the link
93
- - FAIL: Post is a teaser that requires clicking a link for the actual content (e.g., "5 tips for better marketing -- read them here: [URL]")
127
+ - PASS: A reader who never clicks anything still gets a transferable insight, a specific number, or a concrete framework.
128
+ - WARN: Body summarizes external content but adds at least one original observation Welsh-style ("Here's what they missed:").
129
+ - FAIL: Body is a teaser. "5 lessons in the link below" without the lessons in the post.
130
+
131
+ ### DISC-LINKEDIN-03: Length and Readability — Tier 1
132
+
133
+ **Checks:** Character count within the engagement-peak band, line-break density, hashtag discipline.
134
+ **Against:** Post content (full body).
135
+
136
+ #### Evaluation Criteria
137
+
138
+ 1. **Character count**
139
+ - PASS: Post is 800-1,900 characters (engagement peak per AuthoredUp 2025-2026 dataset of 372K posts) OR ≤500 characters AND is a deliberate punch-regime hot take with one specific claim.
140
+ - WARN: Post is 500-799 or 1,901-2,500 characters.
141
+ - FAIL: Post >2,500 characters (move to newsletter or carousel) OR >3,000 (LinkedIn maximum) OR <300 characters AND not a deliberate hot take.
142
+
143
+ 2. **Line-break density**
144
+ - PASS: A line break every 1-2 sentences; no paragraph longer than 3 lines on mobile; whitespace used as a design element.
145
+ - WARN: One paragraph in the post is 4-5 sentences; otherwise mobile-readable.
146
+ - FAIL: Wall of text — any paragraph >5 sentences OR fewer than 3 line breaks in a >800-character post.
94
147
 
95
- ### DISC-LI-03: Engagement Path -- Tier 2
148
+ ### DISC-LINKEDIN-04: Engagement Path Tier 1
96
149
 
97
- **Checks:** Conversation prompt and reply path design
98
- **Against:** Post content (focus on closing section)
150
+ **Checks:** Conversation prompt presence, specificity, and reply-path clarity.
151
+ **Against:** Post content (closing 1-3 lines).
99
152
 
100
153
  #### Evaluation Criteria
101
154
 
102
155
  1. **Conversation prompt**
103
- - PASS: Post ends with a specific question or clear invitation to respond that relates to the post's topic
104
- - WARN: Post has an implied question or general prompt but no explicit ask (e.g., ends with a provocative statement but no question)
105
- - FAIL: Post ends without any engagement prompt -- just a statement, a link, or a hashtag block
156
+ - PASS: Post ends with a specific question tied to the topic that invites personal experience ("What's the biggest deal you almost lost to a competitor this quarter?") — the reader knows what to type.
157
+ - WARN: Prompt exists but is too broad ("What do you think?" / "Agree?" / "Thoughts?").
158
+ - FAIL: No prompt at all post ends with a statement, a hashtag block, or a URL.
106
159
 
107
- 2. **Reply path clarity**
108
- - PASS: The question or prompt has a clear, easy-to-answer response path -- readers know what to type (e.g., "What's the biggest deal you almost lost to a competitor this quarter?")
109
- - WARN: Prompt exists but is too broad or abstract (e.g., "What do you think?", "Agree or disagree?", "Thoughts?")
110
- - FAIL: N/A -- linked to conversation prompt presence above
160
+ 2. **Banned engagement-bait patterns**
161
+ - PASS: No "Comment YES if…" / "Agree? 👇" / "Repost if you agree" / engagement-pod tells.
162
+ - WARN: Mild engagement-bait phrasing once, but the substantive question is also present.
163
+ - FAIL: Bait-only CTA. LinkedIn 2025 algorithm explicitly demotes inauthentic engagement clusters; this throttles reach AND brand.
111
164
 
112
- ### DISC-LI-04: Character/Format Limits -- Tier 2
165
+ ### DISC-LINKEDIN-05: Format Hygiene Tier 2
113
166
 
114
- **Checks:** Post length and formatting for optimal engagement
115
- **Against:** LinkedIn platform limits and engagement data
167
+ **Checks:** Hashtag count + placement, emoji discipline, no AI-tells.
168
+ **Against:** Post content.
116
169
 
117
170
  #### Evaluation Criteria
118
171
 
119
- 1. **Character count**
120
- - PASS: Post is 1,200-2,100 characters (optimal engagement range based on 2026 data)
121
- - WARN: Post is 800-1,199 or 2,101-3,000 characters (functional but outside optimal range)
122
- - FAIL: Post exceeds 3,000 characters (LinkedIn maximum) or is under 300 characters (too thin for meaningful content)
172
+ 1. **Hashtag discipline**
173
+ - PASS: 3-5 niche hashtags at the end of the post (e.g., `#FounderLife` over `#Business`); no inline hashtags.
174
+ - WARN: 1-2 hashtags or 6-8 hashtags, OR one inline hashtag.
175
+ - FAIL: 0 hashtags AND no clear niche signal, OR ≥9 hashtags, OR a wall of inline hashtags throughout the body.
176
+
177
+ 2. **Emoji + AI-tells**
178
+ - PASS: No emoji at line start (except as deliberate list bullet); no inline-header bold-colon lists (`**Performance:**`); no curly quotes; no em-dash overuse; no "knowledge cutoff" hedges. Cross-check against `references/linkedin-post-patterns.md` §Banned moves and `references/humanizer-patterns.md`.
179
+ - WARN: One AI-tell present (e.g., one curly quote, one rule-of-three padding).
180
+ - FAIL: Two or more AI-tells present, OR emoji-led hook, OR inline-header bold-colon list format.
181
+
182
+ ### DISC-LINKEDIN-06: Voice Audit — Tier 2
183
+
184
+ **Checks:** Welsh-style solopreneur voice signal; absence of corporate/ghostwriter tells.
185
+ **Against:** Post content.
186
+
187
+ #### Evaluation Criteria
123
188
 
124
- 2. **Readability formatting**
125
- - PASS: Line breaks between paragraphs, short paragraphs of 1-3 sentences, limited hashtags (3-5 at end of post)
126
- - WARN: Some long paragraphs (4+ sentences) or slightly excessive hashtags (6-10)
127
- - FAIL: Wall of text with no line breaks, or 10+ hashtags cluttering the post
189
+ 1. **Specificity over abstraction**
190
+ - PASS: Post contains at least one concrete noun a number, dollar amount, named tool/person, dated moment, or named alternative being beaten.
191
+ - WARN: One generic claim ("great results", "amazing growth") balanced by at least one specific anchor.
192
+ - FAIL: Post is entirely abstract no number, no named entity, no dated specific moment. Reads as ghostwritten.
193
+
194
+ 2. **Fake-vulnerability check**
195
+ - PASS: Any vulnerable moment is paired with a transferable, named lesson the reader can apply.
196
+ - WARN: Vulnerability is present and the lesson exists but is implicit, not named.
197
+ - FAIL: Vulnerability with no lesson ("almost cried in the parking lot" / "lowest moment of my career" with no takeaway) — performance, not teaching.
128
198
 
129
199
  ---
130
200
 
131
201
  ## Base Gate Overrides
132
202
 
133
- None -- all base gates keep default tiers.
203
+ None all base gates keep default tiers.
134
204
 
135
205
  ---
136
206
 
@@ -138,126 +208,178 @@ None -- all base gates keep default tiers.
138
208
 
139
209
  LinkedIn-specific structural requirements enforced during production:
140
210
 
141
- - **Maximum post length:** 3,000 characters
142
- - **Optimal post length:** 1,200-2,100 characters
143
- - **Hook completion:** Must complete within first 210 characters (mobile "see more" truncation)
144
- - **Hashtags:** 3-5 maximum, placed at end of post, not inline
145
- - **Mentions:** Use sparingly -- only mention people who will likely engage; avoid tag-spam
146
- - **Line breaks:** Between every paragraph; no paragraph longer than 3 sentences
147
- - **Carousel documents:** PDF format, 1:1 or 4:5 ratio slides, one key point per slide
148
- - **Article headline:** Under 100 characters
149
- - **Image ratio:** 1:1 (square) or 4:5 (portrait) for maximum feed space
150
- - **No external links in post body:** Place links in first comment if needed
211
+ - **Post body structure:** Hook (1-2 lines) → blank line → Body (delivers on the promise) → blank line → CTA (specific question). The blank lines are non-negotiable; they create the visual rhythm Welsh's posts are recognizable for.
212
+ - **First line:** ≤120 characters, ideally ≤90. Must complete a thought (Welsh: never start a sentence in the hook that requires expanding to finish).
213
+ - **Rehook line 2:** Place a second concrete noun (number, named entity, dated moment) on line 2 to defeat the truncation-bail reader. Pattern documented in `references/linkedin-post-patterns.md` §Patterns from public creator playbooks.
214
+ - **Body paragraphs:** 1-2 sentences per paragraph; line break between every paragraph.
215
+ - **Character count:** Target 800-1,900 characters. Hard ceiling 2,500. Maximum 3,000 (LinkedIn limit).
216
+ - **No URLs in body:** Links live in the first comment. Mention "link in comments" on the last line of the post if needed.
217
+ - **Hashtags:** 3-5 niche tags at the end of the post, on their own line(s), separated from the body by a blank line.
218
+ - **No bold/italics in posts:** LinkedIn does not natively render markdown. Unicode-bold characters look like AI tooling and trigger reader skepticism.
219
+ - **Carousels (PDF documents):** 1:1 or 4:5 ratio; one key point per slide; 5-7 slides outperform single-image; slide 1 is the hook (same rules apply); each slide readable in ≤3 seconds.
220
+ - **Images:** 1:1 (square) or 4:5 (portrait) for maximum mobile feed real estate.
221
+ - **LinkedIn articles (long-form):** Headline ≤100 characters; lead paragraph passes the same hook test as a post; subheads every 200-300 words.
222
+ - **Comments on own posts:** Welsh treats the first comment as the second hook. If used for the link-in-comments pattern, place a sentence of context before the URL — never bare links.
151
223
 
152
224
  ---
153
225
 
154
226
  ## Examples
155
227
 
156
- ### Good: Strong Hook, Native Content, Engagement Question
228
+ ### Good 1 Welsh-flavored Counter-Conventional (Template C)
157
229
 
158
230
  ```
159
- We analyzed 847 B2B LinkedIn posts last quarter.
160
-
161
- The #1 predictor of engagement wasn't the topic.
162
- It wasn't the time of posting.
163
- It wasn't even the visual assets.
231
+ Stop posting every day on LinkedIn.
164
232
 
165
- It was the first line.
233
+ I posted daily for 18 months. The first 90 days
234
+ produced 80% of the followers.
166
235
 
167
- Posts that opened with a specific data point got 3.2x more comments
168
- than posts that opened with "I".
236
+ After that, daily posting started costing me late
237
+ nights, repeated angles, the slow drift into "content"
238
+ that's really just noise.
169
239
 
170
- Here's what the top-performing hooks had in common:
240
+ Here's what actually compounds after the first 90 days:
171
241
 
172
- 1. They challenged a common assumption
173
- 2. They included a number in the first 10 words
174
- 3. They created a knowledge gap the reader wanted to close
242
+ 3 posts a week, each one a real opinion
243
+ 30 minutes a day in the comments of bigger accounts
244
+ One long-form essay a month I can chop into 5 posts
245
+ — A profile that closes for me while I sleep
175
246
 
176
- The worst-performing hooks? Almost all started with:
177
- "I'm excited to announce..."
178
- "I was thinking about..."
179
- "I recently had the pleasure of..."
247
+ The algorithm doesn't reward the daily grind.
248
+ It rewards the post that earns the scroll.
180
249
 
181
- What's the strongest opening line you've ever written for a LinkedIn post?
250
+ What's the post you're proudest of in the last 90 days?
182
251
 
183
- #B2BMarketing #ContentStrategy #LinkedInTips
252
+ #OnePersonBusiness #LinkedInTips #Solopreneur
184
253
  ```
185
254
 
186
- **Why it works:** Opens with data (not "I"), hook completes before 210 chars, no external links, specific engagement question, good formatting with line breaks, 5 hashtags at end.
255
+ **Why it works:** Counter-conventional hook (Welsh's relatable-enemy flip), ≤120-char first line, rehook on line 2 with "18 months", specific numbers throughout, no external links, Template C structure, specific closing question with a clear reply path, 3 niche hashtags. Passes DISC-LINKEDIN-01 through 06.
187
256
 
188
- ### Good: Counterintuitive Claim with Carousel
257
+ ### Good 2 Welsh-flavored Story + Lesson (Template A)
189
258
 
190
259
  ```
191
- Stop writing LinkedIn posts.
260
+ I shipped my first paid offer at 11pm on a Sunday.
261
+
262
+ Eight people bought it that night. None of them
263
+ were on my email list.
192
264
 
193
- Seriously. If your last 10 posts got fewer than 20 comments each,
194
- writing more of the same won't fix it.
265
+ They all came from one LinkedIn comment I had left
266
+ on a viral post three weeks earlier — a 4-sentence
267
+ reply that disagreed with the OP, with a concrete
268
+ example from my own work.
195
269
 
196
- Here's what to do instead (carousel attached):
270
+ That comment got 87 likes. The post itself? Forgotten.
197
271
 
198
- Slide 1: Audit your last 10 posts for hook quality
199
- Slide 2: Identify which topics generated replies vs. just likes
200
- Slide 3: Double down on reply-generating topics
201
- Slide 4: Rewrite your weakest hook using the data-first formula
272
+ The lesson I keep relearning:
202
273
 
203
- The carousel breaks down each step with examples.
274
+ Your next customer is not in your audience yet.
275
+ They're in someone else's audience, watching how
276
+ you show up in the comments.
204
277
 
205
- What's your current average comments per post? (Be honest -- no judgment.)
278
+ Spend 30 minutes a day commenting on posts bigger
279
+ than yours, with a real opinion. Not "great post!" —
280
+ a sentence that disagrees and gives an example.
206
281
 
207
- #LinkedInStrategy #ContentMarketing
282
+ What's the best comment you ever left that turned
283
+ into a real conversation?
284
+
285
+ #Solopreneur #LinkedInGrowth #FounderLife
208
286
  ```
209
287
 
210
- **Why it works:** Bold claim opener, no "I", native content (carousel provides value without external link), specific question with low barrier to answer.
288
+ **Why it works:** Story-start hook with concrete time ("11pm on a Sunday"), rehook line 2 with "Eight people, none from my email list," teaches one transferable rule, specific CTA, Template A, voice is unmistakably one-person-business. Passes all six gates.
211
289
 
212
- ### Bad: "I" Opener with Link
290
+ ### Bad 1 — "I" Opener + Link Dump + Wall of Hashtags
213
291
 
214
292
  ```
215
- I'm excited to share that our team just published a new blog post
216
- about the future of B2B marketing.
293
+ I'm excited to share that our team just published a
294
+ new blog post about the future of B2B marketing in
295
+ 2026 and I think you're going to find it really
296
+ valuable.
217
297
 
218
- It covers some really interesting trends that I think you'll find
219
- valuable. We spent weeks researching this.
298
+ We spent weeks on this and it covers some really
299
+ interesting trends.
220
300
 
221
- Check it out here: https://example.com/blog/future-of-b2b
301
+ Check it out here: https://example.com/blog/future
222
302
 
223
303
  Let me know what you think!
224
304
 
225
- #Marketing #B2B #Future #Trends #Innovation #Digital #Strategy #Growth #Leadership #Tech
305
+ #Marketing #B2B #Future #Trends #Innovation #Digital #Strategy #Growth #Leadership #Tech #SaaS #Startup
226
306
  ```
227
307
 
228
- **Why it fails:** DISC-LI-01 FAIL (starts with "I'm excited"), DISC-LI-02 FAIL (link-centric post), DISC-LI-03 WARN ("Let me know what you think" is too vague), DISC-LI-04 WARN (10 hashtags).
308
+ **Why it fails:**
309
+ - DISC-LINKEDIN-01 FAIL — "I'm excited to share" is a banned opener.
310
+ - DISC-LINKEDIN-02 FAIL — link-centric, the post *is* the URL.
311
+ - DISC-LINKEDIN-04 FAIL — "Let me know what you think" is generic, not a specific question.
312
+ - DISC-LINKEDIN-05 FAIL — 12 hashtags.
313
+ - DISC-LINKEDIN-06 FAIL — no specifics, entirely abstract ("really valuable," "really interesting").
229
314
 
230
- ### Bad: Wall of Text, No Engagement
315
+ ### Bad 2 — Wall of Text, No Hook, No CTA
231
316
 
232
317
  ```
233
- The landscape of B2B marketing is rapidly evolving and companies need to adapt their strategies to stay competitive in 2026. With the rise of AI-powered tools, content marketing has become both easier to produce and harder to differentiate. Traditional approaches like gated whitepapers and webinar registrations are seeing declining conversion rates as buyers increasingly prefer ungated, freely available content that demonstrates expertise without requiring an email exchange. The companies that are winning are those that publish research, share data openly, and build trust through transparency rather than through form-fill gates. This shift requires a fundamental rethinking of how we measure marketing ROI since the traditional MQL model breaks down when your best content is freely accessible.
318
+ The landscape of B2B marketing is rapidly evolving and companies need to adapt their strategies to stay competitive in 2026. With the rise of AI-powered tools, content marketing has become both easier to produce and harder to differentiate. Traditional approaches like gated whitepapers and webinar registrations are seeing declining conversion rates as buyers increasingly prefer ungated freely available content that demonstrates expertise without requiring an email exchange. The companies that are winning are those that publish research, share data openly, and build trust through transparency rather than through form-fill gates.
234
319
  ```
235
320
 
236
- **Why it fails:** DISC-LI-01 FAIL (no hook -- just context), DISC-LI-03 FAIL (no engagement prompt), DISC-LI-04 FAIL (wall of text, no line breaks, single paragraph).
321
+ **Why it fails:**
322
+ - DISC-LINKEDIN-01 FAIL — no hook, just throat-clearing context. First 210 characters earn nothing.
323
+ - DISC-LINKEDIN-03 FAIL — wall of text, zero line breaks.
324
+ - DISC-LINKEDIN-04 FAIL — no engagement prompt.
325
+ - DISC-LINKEDIN-06 FAIL — no specifics, no number, no named entity. Reads as ghostwritten generic-thought-leadership filler.
237
326
 
238
327
  ---
239
328
 
240
329
  ## Anti-Patterns
241
330
 
242
- 1. **Starting with "I was thinking about..." or "I recently...":** These openers signal self-focused content. The reader has no reason to care about what you were thinking -- lead with what matters to them.
331
+ Welsh-style "do not do" list. Each pattern carries the failure mode so the producer knows *why*.
332
+
333
+ 1. **The "I'm excited to share" announcement opener.** Signals the post is about you, not the reader. Reader has no reason to expand. (DISC-LINKEDIN-01 fail.)
334
+
335
+ 2. **External link in the post body.** LinkedIn 2025-2026 algorithm suppresses link posts ~60%. The post is a 60% dead post the moment you paste the URL. Use first comment instead.
243
336
 
244
- 2. **Posting external links as the main content:** LinkedIn algorithm suppresses link posts by approximately 60%. If the post is just a wrapper around a URL, it will reach a fraction of your audience.
337
+ 3. **Engagement-bait CTAs.** "Agree? 👇" / "Comment YES if…" / "Repost if you agree." LinkedIn 2025 algorithm explicitly demotes inauthentic engagement clusters. Burns reach AND audience trust.
245
338
 
246
- 3. **Wall of text with no line breaks:** Mobile readers see a dense block of text and scroll past. Use whitespace aggressively -- every 1-2 sentences should have a line break.
339
+ 4. **Selling in every post.** Welsh's 20% promo ceiling is the disciplined number. Solopreneurs invert this when revenue dips; the inversion is the *cause* of the dip continuing.
247
340
 
248
- 4. **Ending with no engagement prompt:** A post that ends with a statement gives the reader no reason to comment. Always close with a specific question or invitation to share their experience.
341
+ 5. **Fake vulnerability without a lesson.** "I almost gave up" / "Lowest moment of my career" with no transferable insight reads as performance. Vulnerability earns trust only when paired with a teaching.
249
342
 
250
- 5. **Excessive hashtags (10+):** More than 5 hashtags looks spammy and does not improve discovery. Use 3-5 relevant hashtags at the end of the post.
343
+ 6. **Outsourced ghostwriter voice (early).** Outsourcing the writing before the audience knows your voice burns the one-person-business trust signal Welsh's entire system runs on. Outsource editing, not voice. Re-evaluate at 50K followers, not before.
344
+
345
+ 7. **Niche-hopping every 30 days.** The audience never compounds because the algorithm never settles your topic graph. Pick one topic for 90 days minimum.
346
+
347
+ 8. **Posting without commenting.** Commenting on 10 bigger posts before your own post drops is the warm-up. Skipping it makes the post a cold launch into an indifferent feed.
348
+
349
+ 9. **Long, unscannable paragraphs.** Mobile readers scroll past dense walls inside 2 seconds. Line break every 1-2 sentences, no exceptions. (DISC-LINKEDIN-03 fail.)
350
+
351
+ 10. **Controversy-for-controversy.** Picking fights with no real position attracts the wrong audience (rage-engagement) and burns the right one (peers who notice the bait). Pick fights you can defend with a concrete example, never just for the engagement spike.
352
+
353
+ 11. **Inline-header bold-colon lists** (`**Performance:**`, `**Security:**`). Reads as ChatGPT output, not LinkedIn voice. Use plain prose or dashed lists instead. (Documented in `references/linkedin-post-patterns.md` §Banned moves.)
354
+
355
+ 12. **Hooks longer than 12 words.** They get truncated in the mobile feed and waste the most expensive 210 characters in social media.
251
356
 
252
357
  ---
253
358
 
254
359
  ## Metrics
255
360
 
256
- What to measure post-ship for LinkedIn content:
361
+ What to measure post-ship for LinkedIn content. Track per-post and per-week.
362
+
363
+ | Metric | What it measures | Welsh-style benchmark |
364
+ |---|---|---|
365
+ | **Impressions** | Reach — how many feeds the post appeared in. | Varies by follower count; track 7-day rolling average, not single posts. |
366
+ | **Profile views (48h after post)** | Did the post send readers to the conversion page? | Spike of 2-5× baseline within 48h = strong post. |
367
+ | **Comments-to-likes ratio** | Welsh's preferred signal — comments are weighted heavier than likes in 2025-2026 algorithm and indicate dwell time. | Target ≥10% (10 comments per 100 likes). Above 20% = unusually resonant. |
368
+ | **"Save" rate** | Saves signal the reader treats the post as a reference asset — Welsh's actionable-content category should generate disproportionate saves. | Aim for ≥1 save per 50 impressions on actionable posts. |
369
+ | **Follower growth per post** | Net new followers within 48h of posting. | Sustained 5-20 new followers per post = compounding fit. |
370
+ | **DM volume (48h after post)** | The till. Posts that produce 1-on-1 inbound are converting attention to opportunity. | 1-3 substantive DMs per strong post is the leading indicator of revenue from LinkedIn. |
371
+ | **Repurpose count** | Per Welsh's Content OS — how many derivative pieces (X post, thread, newsletter section) did one LinkedIn post seed? | Target 3-5 derivatives per long-form post. |
372
+
373
+ After 50 posts (the apprenticeship), audit: which 3 hooks produced the top comments-to-likes ratio? Which 3 templates produced the most DM volume? Double down. Discard the bottom-3. Re-audit every 50 posts after that.
374
+
375
+ ---
376
+
377
+ ## Sources
257
378
 
258
- - **Impressions:** Reach and distribution -- how many feeds the post appeared in. Baseline varies by follower count.
259
- - **Engagement rate:** (Reactions + comments) / impressions. Benchmark: 2-5% is good for B2B.
260
- - **Comment quality:** Ratio of meaningful replies (2+ sentences, on-topic) vs. emoji-only or generic reactions. High-quality comments signal content resonance and drive algorithmic distribution.
261
- - **Profile views driven:** Awareness metric -- did the post drive people to learn more about the author/company? Track the spike in profile views within 48 hours of posting.
262
- - **Click-through to CTA in comments:** If using the link-in-comments strategy, track click-through rate on the comment link. Note: LinkedIn does not provide native analytics for comment links, so use UTM-tagged URLs.
263
- - **Follower growth:** Net new followers within 48 hours of posting. Sustained growth signals content-market fit.
379
+ - Justin Welsh, [The LinkedIn Operating System](https://learn.justinwelsh.me/linkedin) daily cadence, 50/30/20 content split, profile-as-conversion-page, PAIPS, hook body → CTA.
380
+ - Justin Welsh, [The Content OS](https://learn.justinwelsh.me/content) one long-form essay → 5-7 short posts cross-channel repurposing.
381
+ - Justin Welsh, [The Anatomy of a Viral LinkedIn Post](https://www.justinwelsh.me/newsletter/the-anatomy-of-a-viral-linkedin-post) scroll-stopper / flip / gasoline framework, 210-character truncation rule, "the first line is more important than 95% of the rest of the post."
382
+ - Justin Welsh, [justinwelsh.me](https://www.justinwelsh.me/) the public body of work: newsletter archive, free templates, the one-person-business framing.
383
+ - Josh Spector, [Breakdown of Justin Welsh's LinkedIn System](https://joshspector.com/justin-welsh-linkedin-system/) external decomposition of the LinkedIn OS by a peer creator.
384
+ - `references/linkedin-post-patterns.md` hook templates (7 patterns), post structure templates (A-E), length norms (800-1,900 char engagement peak), banned-move catalog. Required reading for every producer using this playbook.
385
+ - `references/humanizer-patterns.md` — overlapping AI-tell catalog enforced by DISC-LINKEDIN-05.