taketomarket 2.2.0 → 2.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +4 -4
- package/.claude-plugin/plugin.json +2 -2
- package/README.md +34 -11
- package/bin/lib/campaign.cjs +12 -8
- package/bin/lib/codebase-scan.cjs +86 -0
- package/bin/lib/config.cjs +129 -0
- package/bin/lib/deploy.cjs +36 -0
- package/bin/lib/deviation.cjs +1 -1
- package/bin/lib/drift-log.cjs +4 -4
- package/bin/lib/health.cjs +32 -31
- package/bin/lib/install-detect.cjs +62 -0
- package/bin/lib/legacy-folder.cjs +100 -0
- package/bin/lib/playwright-check.cjs +26 -0
- package/bin/lib/site-location.cjs +22 -0
- package/bin/lib/state.cjs +3 -3
- package/bin/lib/svg-render.cjs +42 -0
- package/bin/ttm-tools.cjs +136 -4
- package/gates/base-gates.md +8 -8
- package/gates/gate-evaluation.md +8 -8
- package/install.js +37 -3
- package/package.json +10 -6
- package/playbooks/aeo.md +218 -114
- package/playbooks/affiliate.md +225 -160
- package/playbooks/email.md +236 -174
- package/playbooks/events.md +303 -213
- package/playbooks/landing-pages.md +305 -0
- package/playbooks/linkedin.md +264 -142
- package/playbooks/manifesto.md +322 -0
- package/playbooks/paid-ads.md +240 -189
- package/playbooks/positioning.md +340 -0
- package/playbooks/pr-media.md +308 -168
- package/playbooks/pseo.md +426 -0
- package/playbooks/seo.md +251 -158
- package/playbooks/social.md +253 -182
- package/playbooks/youtube.md +286 -181
- package/references/brand-color-theory.md +48 -0
- package/references/codex-image-gen-research.md +58 -0
- package/references/context-loading.md +6 -6
- package/references/humanizer-patterns.md +433 -0
- package/references/inline-education-blurbs.md +461 -0
- package/references/landing-page-anatomy.md +64 -0
- package/references/linkedin-post-patterns.md +174 -0
- package/references/logo-design-principles.md +55 -0
- package/references/meta-gate-evaluation.md +3 -3
- package/references/obra-superpowers-conventions.md +170 -0
- package/references/playbook-leaders.md +472 -0
- package/references/playwright-mcp-setup.md +164 -0
- package/references/positioning-check-report.md +2 -2
- package/references/pseo-page-anatomy.md +56 -0
- package/references/pseo-templates/alternative-anatomy.md +31 -0
- package/references/pseo-templates/alternative-content-playbook.md +32 -0
- package/references/pseo-templates/blog-anatomy.md +28 -0
- package/references/pseo-templates/blog-content-playbook.md +36 -0
- package/references/pseo-templates/comparison-anatomy.md +29 -0
- package/references/pseo-templates/comparison-content-playbook.md +35 -0
- package/references/pseo-templates/use-case-anatomy.md +28 -0
- package/references/pseo-templates/use-case-content-playbook.md +30 -0
- package/skills/ttm-101/SKILL.md +25 -0
- package/skills/ttm-aeo-check/SKILL.md +17 -12
- package/skills/ttm-affiliate-kit/SKILL.md +5 -0
- package/skills/ttm-archive/SKILL.md +5 -0
- package/skills/ttm-brand-refresh/SKILL.md +5 -0
- package/skills/ttm-brief/SKILL.md +5 -0
- package/skills/ttm-competitor-scan/SKILL.md +5 -0
- package/skills/ttm-deploy/SKILL.md +22 -0
- package/skills/ttm-discover/SKILL.md +17 -0
- package/skills/ttm-email-check/SKILL.md +17 -0
- package/skills/ttm-email-preflight/SKILL.md +17 -11
- package/skills/ttm-fix/SKILL.md +5 -0
- package/skills/ttm-health/SKILL.md +6 -1
- package/skills/ttm-humanize/SKILL.md +33 -0
- package/skills/ttm-icp-refresh/SKILL.md +5 -0
- package/skills/ttm-improve-skill/SKILL.md +18 -0
- package/skills/ttm-init/SKILL.md +10 -3
- package/skills/ttm-keyword-map/SKILL.md +17 -11
- package/skills/ttm-landing/SKILL.md +19 -0
- package/skills/ttm-learn/SKILL.md +5 -0
- package/skills/ttm-linkedin-post/SKILL.md +26 -0
- package/skills/ttm-measure/SKILL.md +5 -0
- package/skills/ttm-new-campaign/SKILL.md +5 -0
- package/skills/ttm-next/SKILL.md +5 -0
- package/skills/ttm-playwright-setup/SKILL.md +18 -0
- package/skills/ttm-positioning-check/SKILL.md +5 -0
- package/skills/ttm-positioning-shift/SKILL.md +5 -0
- package/skills/ttm-produce/SKILL.md +5 -0
- package/skills/ttm-pseo/SKILL.md +26 -0
- package/skills/ttm-repurpose/SKILL.md +5 -0
- package/skills/ttm-request-skill/SKILL.md +18 -0
- package/skills/ttm-research/SKILL.md +18 -6
- package/skills/ttm-resume/SKILL.md +5 -0
- package/skills/ttm-review/SKILL.md +5 -0
- package/skills/ttm-seo/SKILL.md +64 -0
- package/skills/ttm-seo-audit/SKILL.md +17 -12
- package/skills/ttm-ship/SKILL.md +5 -0
- package/skills/ttm-state/SKILL.md +5 -0
- package/skills/ttm-update/SKILL.md +152 -4
- package/skills/ttm-verify/SKILL.md +5 -0
- package/templates/agents-md.md +14 -4
- package/templates/campaign-research.md +6 -6
- package/templates/campaign-state.md +1 -1
- package/templates/claude-md.md +14 -4
- package/templates/linkedin-base-template.md +48 -0
- package/templates/next-step-footer.md +13 -0
- package/templates/production-manifest.json +4 -4
- package/templates/pseo/alternative-cms-schema.json +65 -0
- package/templates/pseo/blog-cms-schema.json +55 -0
- package/templates/pseo/comparison-cms-schema.json +56 -0
- package/templates/pseo/use-case-cms-schema.json +62 -0
- package/templates/reference-files/brand.md +51 -0
- package/templates/reference-files/product-dna.md +73 -0
- package/templates/site-scaffold/app/globals.css +2 -0
- package/templates/site-scaffold/app/layout.tsx +17 -0
- package/templates/site-scaffold/app/page.tsx +33 -0
- package/templates/site-scaffold/app/robots.ts +8 -0
- package/templates/site-scaffold/app/sitemap.ts +10 -0
- package/templates/site-scaffold/app/tokens.css +21 -0
- package/templates/site-scaffold/components/Comparison.tsx +14 -0
- package/templates/site-scaffold/components/Faq.tsx +14 -0
- package/templates/site-scaffold/components/Features.tsx +14 -0
- package/templates/site-scaffold/components/FinalCta.tsx +17 -0
- package/templates/site-scaffold/components/Footer.tsx +12 -0
- package/templates/site-scaffold/components/Hero.tsx +22 -0
- package/templates/site-scaffold/components/HowItWorks.tsx +14 -0
- package/templates/site-scaffold/components/PricingTeaser.tsx +14 -0
- package/templates/site-scaffold/components/Problem.tsx +14 -0
- package/templates/site-scaffold/components/SocialProof.tsx +14 -0
- package/templates/site-scaffold/components/Solution.tsx +14 -0
- package/templates/site-scaffold/components/Testimonials.tsx +14 -0
- package/templates/site-scaffold/components/UseCases.tsx +14 -0
- package/templates/site-scaffold/content/.gitkeep +0 -0
- package/templates/site-scaffold/lib/.gitkeep +0 -0
- package/templates/site-scaffold/next.config.mjs +10 -0
- package/templates/site-scaffold/package.json +25 -0
- package/templates/site-scaffold/postcss.config.mjs +3 -0
- package/templates/site-scaffold/public/llms.txt +9 -0
- package/templates/site-scaffold/tsconfig.json +21 -0
- package/templates/verification-report.md +1 -1
- package/workflows/channel/linkedin-post.md +178 -0
- package/workflows/discipline/affiliate-kit.md +65 -6
- package/workflows/discipline/{email-preflight.md → email-check.md} +39 -4
- package/workflows/discipline/repurpose.md +82 -31
- package/workflows/discipline/{aeo-check.md → seo/aeo.md} +13 -6
- package/workflows/discipline/{seo-audit.md → seo/audit.md} +13 -6
- package/workflows/discipline/{keyword-map.md → seo/keyword-map.md} +13 -6
- package/workflows/education/ttm-101.md +114 -0
- package/workflows/lifecycle/brief-positioning-check.md +1 -1
- package/workflows/lifecycle/brief.md +64 -28
- package/workflows/lifecycle/{research.md → discover.md} +61 -19
- package/workflows/lifecycle/fix.md +72 -37
- package/workflows/lifecycle/humanize.md +280 -0
- package/workflows/lifecycle/learn.md +72 -35
- package/workflows/lifecycle/measure.md +54 -18
- package/workflows/lifecycle/produce.md +88 -37
- package/workflows/lifecycle/review.md +71 -25
- package/workflows/lifecycle/ship.md +62 -18
- package/workflows/lifecycle/verify.md +72 -26
- package/workflows/reference-mgmt/brand-refresh.md +50 -13
- package/workflows/reference-mgmt/competitor-scan.md +51 -15
- package/workflows/reference-mgmt/icp-refresh.md +48 -12
- package/workflows/reference-mgmt/positioning-check.md +55 -20
- package/workflows/reference-mgmt/positioning-shift.md +53 -17
- package/workflows/setup/init-brand-colors.md +75 -0
- package/workflows/setup/init-logo.md +113 -0
- package/workflows/setup/init-product-dna.md +83 -0
- package/workflows/setup/init-questions.md +166 -30
- package/workflows/setup/init-validation.md +22 -0
- package/workflows/setup/init.md +144 -39
- package/workflows/setup/new-campaign.md +48 -12
- package/workflows/site/deploy.md +98 -0
- package/workflows/site/landing.md +156 -0
- package/workflows/site/pseo.md +96 -0
- package/workflows/site/quality-gates.md +88 -0
- package/workflows/utility/archive.md +45 -9
- package/workflows/utility/health.md +77 -3
- package/workflows/utility/improve-skill.md +233 -0
- package/workflows/utility/next.md +38 -2
- package/workflows/utility/playwright-setup.md +128 -0
- package/workflows/utility/request-skill.md +218 -0
- package/workflows/utility/resume.md +40 -3
- package/workflows/utility/state.md +42 -7
package/playbooks/linkedin.md
CHANGED
|
@@ -1,136 +1,206 @@
|
|
|
1
1
|
---
|
|
2
2
|
discipline: linkedin
|
|
3
|
-
asset_types: [
|
|
4
|
-
version: "
|
|
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
|
-
|
|
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
|
|
48
|
+
### Hook → Body → CTA (and the 210-character truncation rule)
|
|
14
49
|
|
|
15
|
-
|
|
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
|
-
**
|
|
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
|
|
54
|
+
### The 1-2-1-2-1 Posting Cadence
|
|
24
55
|
|
|
25
|
-
|
|
56
|
+
Welsh's weekday cadence (Mon-Fri):
|
|
26
57
|
|
|
27
|
-
|
|
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
|
-
|
|
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
|
-
###
|
|
66
|
+
### Comment-Driven Distribution
|
|
34
67
|
|
|
35
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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-
|
|
97
|
+
### DISC-LINKEDIN-01: Hook Quality — Tier 1
|
|
62
98
|
|
|
63
|
-
**Checks:** First
|
|
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. **
|
|
69
|
-
- PASS:
|
|
70
|
-
- WARN:
|
|
71
|
-
- FAIL:
|
|
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:
|
|
75
|
-
- WARN: Hook
|
|
76
|
-
- FAIL: First 210 characters are setup
|
|
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-
|
|
114
|
+
### DISC-LINKEDIN-02: Native-Only Content — Tier 1
|
|
79
115
|
|
|
80
|
-
**Checks:** Absence of external
|
|
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:
|
|
87
|
-
- WARN: One
|
|
88
|
-
- FAIL:
|
|
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:
|
|
92
|
-
- WARN:
|
|
93
|
-
- FAIL:
|
|
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-
|
|
148
|
+
### DISC-LINKEDIN-04: Engagement Path — Tier 1
|
|
96
149
|
|
|
97
|
-
**Checks:** Conversation prompt and reply
|
|
98
|
-
**Against:** Post content (
|
|
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
|
|
104
|
-
- WARN:
|
|
105
|
-
- FAIL:
|
|
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. **
|
|
108
|
-
- PASS:
|
|
109
|
-
- WARN:
|
|
110
|
-
- FAIL:
|
|
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-
|
|
165
|
+
### DISC-LINKEDIN-05: Format Hygiene — Tier 2
|
|
113
166
|
|
|
114
|
-
**Checks:**
|
|
115
|
-
**Against:**
|
|
167
|
+
**Checks:** Hashtag count + placement, emoji discipline, no AI-tells.
|
|
168
|
+
**Against:** Post content.
|
|
116
169
|
|
|
117
170
|
#### Evaluation Criteria
|
|
118
171
|
|
|
119
|
-
1. **
|
|
120
|
-
- PASS:
|
|
121
|
-
- WARN:
|
|
122
|
-
- FAIL:
|
|
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
|
-
|
|
125
|
-
- PASS:
|
|
126
|
-
- WARN:
|
|
127
|
-
- FAIL:
|
|
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
|
|
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
|
-
- **
|
|
142
|
-
- **
|
|
143
|
-
- **
|
|
144
|
-
- **
|
|
145
|
-
- **
|
|
146
|
-
- **
|
|
147
|
-
- **
|
|
148
|
-
- **
|
|
149
|
-
- **
|
|
150
|
-
- **
|
|
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
|
|
228
|
+
### Good 1 — Welsh-flavored Counter-Conventional (Template C)
|
|
157
229
|
|
|
158
230
|
```
|
|
159
|
-
|
|
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
|
-
|
|
233
|
+
I posted daily for 18 months. The first 90 days
|
|
234
|
+
produced 80% of the followers.
|
|
166
235
|
|
|
167
|
-
|
|
168
|
-
|
|
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
|
|
240
|
+
Here's what actually compounds after the first 90 days:
|
|
171
241
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
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
|
|
177
|
-
|
|
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
|
|
250
|
+
What's the post you're proudest of in the last 90 days?
|
|
182
251
|
|
|
183
|
-
#
|
|
252
|
+
#OnePersonBusiness #LinkedInTips #Solopreneur
|
|
184
253
|
```
|
|
185
254
|
|
|
186
|
-
**Why it works:**
|
|
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
|
|
257
|
+
### Good 2 — Welsh-flavored Story + Lesson (Template A)
|
|
189
258
|
|
|
190
259
|
```
|
|
191
|
-
|
|
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
|
-
|
|
194
|
-
|
|
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
|
-
|
|
270
|
+
That comment got 87 likes. The post itself? Forgotten.
|
|
197
271
|
|
|
198
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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:**
|
|
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
|
|
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
|
|
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
|
-
|
|
219
|
-
|
|
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
|
|
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:**
|
|
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
|
|
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
|
|
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:**
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
-
|
|
259
|
-
-
|
|
260
|
-
-
|
|
261
|
-
-
|
|
262
|
-
-
|
|
263
|
-
-
|
|
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.
|