luckiest-co 1.0.52 → 1.0.53
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 +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/package.json +1 -1
- package/skills/ab-testing/CHANGELOG.md +4 -0
- package/skills/ab-testing/SKILL.md +3 -3
- package/skills/ab-testing/references/sample-size-guide.md +15 -2
- package/skills/ad-creative/CHANGELOG.md +8 -0
- package/skills/ad-creative/SKILL.md +23 -13
- package/skills/ads/CHANGELOG.md +6 -0
- package/skills/ads/SKILL.md +14 -10
- package/skills/ads/evals/evals.json +13 -0
- package/skills/ads/references/operating-check.md +75 -0
- package/skills/ai-seo/CHANGELOG.md +11 -0
- package/skills/ai-seo/SKILL.md +28 -27
- package/skills/ai-seo/references/agent-defaults.md +79 -0
- package/skills/ai-seo/references/ai-attribution.md +54 -0
- package/skills/ai-seo/references/answer-accuracy.md +84 -0
- package/skills/ai-seo/references/content-patterns.md +24 -0
- package/skills/ai-seo/references/multilingual-and-commerce.md +55 -0
- package/skills/ai-seo/references/platform-ranking-factors.md +29 -11
- package/skills/ai-seo/references/prompt-portfolio.md +83 -0
- package/skills/analytics/CHANGELOG.md +8 -0
- package/skills/analytics/SKILL.md +74 -18
- package/skills/analytics/references/event-library.md +2 -2
- package/skills/churn-prevention/CHANGELOG.md +7 -0
- package/skills/churn-prevention/SKILL.md +16 -8
- package/skills/churn-prevention/references/dunning-playbook.md +10 -7
- package/skills/co-marketing/CHANGELOG.md +3 -0
- package/skills/co-marketing/SKILL.md +9 -9
- package/skills/coder/CHANGELOG.md +19 -0
- package/skills/coder/SKILL.md +4 -3
- package/skills/coder-writing-plans/CHANGELOG.md +5 -0
- package/skills/coder-writing-plans/SKILL.md +4 -3
- package/skills/content-strategy/CHANGELOG.md +3 -0
- package/skills/content-strategy/SKILL.md +3 -3
- package/skills/content-strategy/references/headless-cms.md +4 -4
- package/skills/copy-editing/CHANGELOG.md +4 -0
- package/skills/copy-editing/SKILL.md +5 -3
- package/skills/copy-editing/evals/evals.json +13 -0
- package/skills/copy-editing/references/checklist.md +24 -0
- package/skills/copywriting/CHANGELOG.md +6 -0
- package/skills/copywriting/SKILL.md +57 -4
- package/skills/copywriting/evals/evals.json +14 -0
- package/skills/emails/CHANGELOG.md +4 -0
- package/skills/emails/SKILL.md +5 -3
- package/skills/marketing-plan/CHANGELOG.md +4 -0
- package/skills/marketing-plan/SKILL.md +8 -3
- package/skills/offers/CHANGELOG.md +4 -0
- package/skills/offers/SKILL.md +4 -4
- package/skills/onboarding/CHANGELOG.md +4 -0
- package/skills/onboarding/SKILL.md +13 -7
- package/skills/pricing/CHANGELOG.md +4 -0
- package/skills/pricing/SKILL.md +3 -3
- package/skills/pricing/references/research-methods.md +12 -2
- package/skills/product-marketing/CHANGELOG.md +5 -0
- package/skills/product-marketing/SKILL.md +76 -11
- package/skills/product-marketing/references/brand-voice.md +103 -0
- package/skills/prospecting/CHANGELOG.md +3 -0
- package/skills/prospecting/SKILL.md +22 -22
- package/skills/prospecting/references/data-sources.md +0 -18
- package/skills/prospecting/references/saas-prospecting.md +2 -2
- package/skills/referrals/CHANGELOG.md +4 -0
- package/skills/referrals/SKILL.md +3 -3
- package/skills/referrals/references/program-examples.md +9 -2
- package/skills/research/CHANGELOG.md +5 -0
- package/skills/research/SKILL.md +5 -5
- package/skills/research/references/visual-read.md +10 -4
- package/skills/revops/CHANGELOG.md +4 -0
- package/skills/revops/SKILL.md +6 -6
- package/skills/revops/references/scoring-models.md +14 -13
- package/skills/seo-audit/CHANGELOG.md +4 -0
- package/skills/seo-audit/SKILL.md +7 -7
- package/skills/seo-audit/references/international-seo.md +3 -1
- package/skills/social/CHANGELOG.md +4 -0
- package/skills/social/SKILL.md +4 -4
- package/skills/social/references/listening.md +13 -0
- package/skills/social/references/platforms.md +35 -0
- package/skills/social/references/short-form-video.md +10 -0
- package/skills/trends/CHANGELOG.md +7 -0
- package/skills/trends/SKILL.md +5 -5
- package/skills/trends/agents/openai.yaml +8 -0
- package/skills/trends/references/comparison.md +5 -2
- package/skills/trends/references/engine-contract.md +2 -2
- package/skills/trends/references/synthesis.md +2 -2
- package/skills/trends/scripts/build-skill.sh +39 -0
- package/skills/trends/scripts/compare.sh +61 -0
- package/skills/trends/scripts/evaluate_search_quality.py +584 -0
- package/skills/trends/scripts/lib/arxiv.py +10 -1
- package/skills/trends/scripts/lib/bluesky.py +22 -2
- package/skills/trends/scripts/lib/devto.py +108 -18
- package/skills/trends/scripts/lib/digg.py +79 -17
- package/skills/trends/scripts/lib/github.py +9 -4
- package/skills/trends/scripts/lib/hackernews.py +74 -2
- package/skills/trends/scripts/lib/html_render.py +15 -1
- package/skills/trends/scripts/lib/pipeline.py +1 -1
- package/skills/trends/scripts/lib/planner.py +5 -0
- package/skills/trends/scripts/lib/providers.py +1 -1
- package/skills/trends/scripts/lib/reddit_shreddit.py +4 -1
- package/skills/trends/scripts/lib/render.py +49 -45
- package/skills/trends/scripts/lib/youtube_yt.py +10 -7
- package/skills/trends/scripts/test-v1-vs-v2.sh +220 -0
- package/skills/trends/scripts/test_device_auth.py +128 -0
- package/skills/trends/scripts/verify_v3.py +200 -0
- package/skills/video/CHANGELOG.md +1 -1
|
@@ -3,7 +3,7 @@ name: analytics
|
|
|
3
3
|
description: When the user wants to set up, improve, or audit analytics tracking and measurement. Also use when the user mentions "set up tracking," "GA4," "Google Analytics," "conversion tracking," "event tracking," "UTM parameters," "tag manager," "GTM," "analytics implementation," "tracking plan," "how do I measure this," "track conversions," "attribution," "Mixpanel," "Segment," "consent mode," "server-side tracking," "are my events firing," or "analytics isn't working." Use this whenever someone asks how to know if something is working or wants to measure marketing results. For A/B test measurement, see luckiest-ab-testing.
|
|
4
4
|
license: See ATTRIBUTION.md
|
|
5
5
|
metadata:
|
|
6
|
-
version: "1.
|
|
6
|
+
version: "1.2.1"
|
|
7
7
|
listing_id: luckiest-analytics
|
|
8
8
|
author: luckiest
|
|
9
9
|
---
|
|
@@ -14,9 +14,9 @@ This skill helps set up analytics tracking and measurement that provides actiona
|
|
|
14
14
|
|
|
15
15
|
## Staying current
|
|
16
16
|
|
|
17
|
-
On activation, call the Luckiest MCP check_updates tool with { listingId: "f1cb04a5-ae1d-44bd-90c3-7c267e04a9eb", installedSemver: "1.
|
|
17
|
+
On activation, call the Luckiest MCP check_updates tool with { listingId: "f1cb04a5-ae1d-44bd-90c3-7c267e04a9eb", installedSemver: "1.2.1" }. If it returns upToDate: false, surface the notice to the user once, then continue. Do nothing further if upToDate: true. Never block on this check — if the tool is unavailable, proceed.
|
|
18
18
|
|
|
19
|
-
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-analytics", skill_version: "1.
|
|
19
|
+
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-analytics", skill_version: "1.2.1", matched: true, success: <true if the skill completed, false otherwise> }. Metadata only, never prompt text. Never block on it — if the tool is unavailable, skip silently.
|
|
20
20
|
|
|
21
21
|
## Initial Assessment
|
|
22
22
|
|
|
@@ -53,6 +53,33 @@ Before implementing tracking, understand:
|
|
|
53
53
|
- Monitor for issues
|
|
54
54
|
- Clean data > more data
|
|
55
55
|
|
|
56
|
+
### 5. Compute, Don't Eyeball
|
|
57
|
+
- Derive every total, rate, and delta from row-level data with a script or
|
|
58
|
+
spreadsheet — never by scanning rows and summing mentally. One silently
|
|
59
|
+
dropped row corrupts every figure downstream of it.
|
|
60
|
+
- Cross-check each headline figure a second, independent way (a
|
|
61
|
+
reconciliation total, a recomputation from a different grouping) before
|
|
62
|
+
reporting it, and chase any mismatch to the exact row.
|
|
63
|
+
- When a claim is about one segment — a single campaign, ad set, channel, or
|
|
64
|
+
week — report that segment's own numbers. Never fold it into a neighboring
|
|
65
|
+
group and let the group's total speak for it.
|
|
66
|
+
|
|
67
|
+
### 6. Match Observation Windows
|
|
68
|
+
- A rate or efficiency metric divides a numerator and denominator that cover
|
|
69
|
+
the same closed observation window. Never divide a full period's spend by a
|
|
70
|
+
partial period's conversions or revenue — restate both over the weeks that
|
|
71
|
+
actually have data, and say which weeks those are.
|
|
72
|
+
- Cohort rates use only cohorts whose observation window has ended. A trial
|
|
73
|
+
or signup still inside its window is pending, not failed — exclude it from
|
|
74
|
+
the denominator and label it as pending rather than counting it against
|
|
75
|
+
the rate.
|
|
76
|
+
|
|
77
|
+
### 7. Recommend Against the Stated Goal
|
|
78
|
+
- Analysis ends in a recommendation, and the recommendation must be argued
|
|
79
|
+
from the goal the brief states — the launch target, audience, revenue, or
|
|
80
|
+
positioning objective — not only from what is operationally easiest.
|
|
81
|
+
Name which stated goal each option serves and what it trades away.
|
|
82
|
+
|
|
56
83
|
---
|
|
57
84
|
|
|
58
85
|
## Tracking Plan Framework
|
|
@@ -197,15 +224,44 @@ dataLayer.push({
|
|
|
197
224
|
|-----------|---------|---------|
|
|
198
225
|
| utm_source | Traffic source | google, newsletter |
|
|
199
226
|
| utm_medium | Marketing medium | cpc, email, social |
|
|
200
|
-
| utm_campaign | Campaign name |
|
|
201
|
-
| utm_content | Differentiate versions |
|
|
202
|
-
| utm_term | Paid search keywords | running
|
|
227
|
+
| utm_campaign | Campaign name | spring-sale |
|
|
228
|
+
| utm_content | Differentiate versions | hero-cta |
|
|
229
|
+
| utm_term | Paid search keywords | running-shoes |
|
|
203
230
|
|
|
204
231
|
### Naming Conventions
|
|
205
|
-
- Lowercase everything
|
|
206
|
-
-
|
|
207
|
-
-
|
|
208
|
-
-
|
|
232
|
+
- **Lowercase everything.** GA4 treats `LinkedIn` and `linkedin` as two sources, and the split never merges back.
|
|
233
|
+
- **Hyphens between words.** No spaces, underscores, or `+`. Pick one separator for the whole company; this skill uses hyphens.
|
|
234
|
+
- **One spelling per source.** `linkedin`, never also `li` or `linkedin.com`. Keep the allowed values in a shared sheet and build links from it.
|
|
235
|
+
- **No personal data.** Never put emails, names, phone numbers, or user IDs in a UTM. They land in analytics reports and in referrer logs, and Google's terms prohibit sending PII to GA4.
|
|
236
|
+
- **Specific but short:** `blog-footer-cta`, not `cta1`.
|
|
237
|
+
- **Test the final URL.** Shorteners and redirects can drop or double parameters. Click the live link and check the landing URL before the campaign ships.
|
|
238
|
+
|
|
239
|
+
### UTM Patterns by Partner Type
|
|
240
|
+
|
|
241
|
+
Partner links break most often because each deal gets named on the spot. Fix the pattern per partner type once: `utm_medium` names the kind of deal, `utm_source` names who sent the traffic.
|
|
242
|
+
|
|
243
|
+
| Partner type | utm_source | utm_medium | utm_campaign | utm_content |
|
|
244
|
+
|---|---|---|---|---|
|
|
245
|
+
| Newsletter | `{partner}` (one per partner, across all their publications) | `newsletter` | `{partner}-{publication}-{yyyy}-{mm}` | `{placement}-{yyyy-mm-dd}` |
|
|
246
|
+
| Creator (YouTube, LinkedIn, TikTok) | `{platform}` | `creator` | `{creator}` | `{post-date}` or the video ID |
|
|
247
|
+
| Podcast | `{podcast}` | `podcast` | `{podcast}-{yyyy}-{mm}` | `{spot}-{yyyy-mm-dd}` (pre-roll, mid-roll) |
|
|
248
|
+
| Affiliate | `{partner}` | `affiliate` | `{partner}-affiliate` | placement, if they have several |
|
|
249
|
+
| Community | `{community}` | `community` | `{community}-{program}` | the channel or post, if known |
|
|
250
|
+
|
|
251
|
+
- **Use `creator` as the medium for paid creator deals**, not `social` (which mixes them with your organic posts) or `video` (which mixes them with paid video ads). The platform goes in `utm_source`.
|
|
252
|
+
- **One link per placement.** A newsletter that runs you on two dates gets two links, so each date's clicks stay separate. The monthly `utm_campaign` rolls them up.
|
|
253
|
+
- **Add a custom channel group in GA4.** GA4's default grouping sends mediums like `newsletter`, `creator`, `podcast`, and `community` to Unassigned (only `affiliate` and `email` map to a default channel). Create a channel group with a rule per medium so partner traffic shows up as its own channels.
|
|
254
|
+
- Podcast and video links often aren't clickable, so pair the UTM link with a promo code or vanity URL.
|
|
255
|
+
|
|
256
|
+
*The partner-type pattern is adapted from Wispr Flow's link-creator skill (MIT).*
|
|
257
|
+
|
|
258
|
+
### Traffic From AI Assistants
|
|
259
|
+
|
|
260
|
+
You can't tag links that ChatGPT, Claude, Perplexity, Gemini, or Copilot put in their answers. Some of those visits arrive with a referrer (`chatgpt.com`, `perplexity.ai`) or an assistant-added `utm_source`; many arrive as direct, or come later through a branded search.
|
|
261
|
+
|
|
262
|
+
- Add a GA4 channel group rule that matches known assistant referrers and sources into an "AI assistants" channel, and update the list as new assistants appear.
|
|
263
|
+
- Treat that channel as the floor. Assistant-driven visits that show up as direct or branded search can be most of the effect, and they won't carry the referrer.
|
|
264
|
+
- For measuring the full effect (exposure, delayed visits, and longer attribution windows), see **luckiest-ai-seo**.
|
|
209
265
|
|
|
210
266
|
---
|
|
211
267
|
|
|
@@ -351,15 +407,15 @@ then hygiene) with the specific fix for each.
|
|
|
351
407
|
|
|
352
408
|
## Tool Integrations
|
|
353
409
|
|
|
354
|
-
|
|
410
|
+
Key analytics tools:
|
|
355
411
|
|
|
356
|
-
| Tool | Best For | MCP |
|
|
357
|
-
|
|
358
|
-
| **GA4** | Web analytics, Google ecosystem | ✓ |
|
|
359
|
-
| **Mixpanel** | Product analytics, event tracking | - |
|
|
360
|
-
| **Amplitude** | Product analytics, cohort analysis | - |
|
|
361
|
-
| **PostHog** | Open-source analytics, session replay | - |
|
|
362
|
-
| **Segment** | Customer data platform, routing | - |
|
|
412
|
+
| Tool | Best For | MCP |
|
|
413
|
+
|------|----------|:---:|
|
|
414
|
+
| **GA4** | Web analytics, Google ecosystem | ✓ |
|
|
415
|
+
| **Mixpanel** | Product analytics, event tracking | - |
|
|
416
|
+
| **Amplitude** | Product analytics, cohort analysis | - |
|
|
417
|
+
| **PostHog** | Open-source analytics, session replay | - |
|
|
418
|
+
| **Segment** | Customer data platform, routing | - |
|
|
363
419
|
|
|
364
420
|
---
|
|
365
421
|
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
# Changelog — luckiest-churn-prevention
|
|
2
2
|
|
|
3
|
+
## 1.1.3 — 2026-10-23
|
|
4
|
+
- Removed dead `tools/` registry and PostHog guide links. The tool tables stay.
|
|
5
|
+
|
|
6
|
+
## 1.1.2 — 2026-10-21
|
|
7
|
+
From coreyhaines31/marketingskills at 06d647e (issue #213, MIT).
|
|
8
|
+
- Health score components share one 0-100 scale; missing signals are unavailable, not healthy. Detractor wording fixed. Dunning ROI shown gross and net of tooling.
|
|
9
|
+
|
|
3
10
|
## 1.1.1 — 2026-10-16
|
|
4
11
|
From coreyhaines31/marketingskills at 1efedbc (issue #174, MIT).
|
|
5
12
|
|
|
@@ -3,7 +3,7 @@ name: churn-prevention
|
|
|
3
3
|
description: "When the user wants to reduce churn, build cancellation flows, set up save offers, recover failed payments, or implement retention strategies. Also use when the user mentions 'churn,' 'cancel flow,' 'offboarding,' 'save offer,' 'dunning,' 'failed payment recovery,' 'win-back,' 'retention,' 'exit survey,' 'pause subscription,' 'involuntary churn,' 'people keep canceling,' 'churn rate is too high,' 'how do I keep users,' or 'customers are leaving.' Use this whenever someone is losing subscribers or wants to build systems to prevent it. For post-cancel win-back email sequences, see luckiest-emails. For in-app upgrade paywalls, see luckiest-paywalls."
|
|
4
4
|
license: See ATTRIBUTION.md
|
|
5
5
|
metadata:
|
|
6
|
-
version: "1.1.
|
|
6
|
+
version: "1.1.3"
|
|
7
7
|
listing_id: luckiest-churn-prevention
|
|
8
8
|
author: luckiest
|
|
9
9
|
---
|
|
@@ -14,9 +14,9 @@ This skill provides expert guidance on SaaS retention and churn prevention. Its
|
|
|
14
14
|
|
|
15
15
|
## Staying current
|
|
16
16
|
|
|
17
|
-
On activation, call the Luckiest MCP check_updates tool with { listingId: "b4e5958d-e47d-4e84-a936-0ed6cfc99317", installedSemver: "1.1.
|
|
17
|
+
On activation, call the Luckiest MCP check_updates tool with { listingId: "b4e5958d-e47d-4e84-a936-0ed6cfc99317", installedSemver: "1.1.3" }. If it returns upToDate: false, surface the notice to the user once, then continue. Do nothing further if upToDate: true. Never block on this check — if the tool is unavailable, proceed.
|
|
18
18
|
|
|
19
|
-
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-churn-prevention", skill_version: "1.1.
|
|
19
|
+
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-churn-prevention", skill_version: "1.1.3", matched: true, success: <true if the skill completed, false otherwise> }. Metadata only, never prompt text. Never block on it — if the tool is unavailable, skip silently.
|
|
20
20
|
|
|
21
21
|
## Before Starting
|
|
22
22
|
|
|
@@ -237,11 +237,19 @@ Track these leading indicators of churn:
|
|
|
237
237
|
| Billing page visits increase | High | Days before cancel |
|
|
238
238
|
| Team seats removed | High | 1-2 weeks before cancel |
|
|
239
239
|
| Data export initiated | Critical | Days before cancel |
|
|
240
|
-
|
|
|
240
|
+
| Individual recommendation rating is 0–6 (detractor) | Medium | 1-3 months before cancel |
|
|
241
241
|
|
|
242
242
|
### Health Score Model
|
|
243
243
|
|
|
244
|
-
Build a simple health score (0-100) from weighted signals
|
|
244
|
+
Build a simple health score (0-100) from weighted signals. Define every component on the **same 0–100 scale**, where higher means healthier, before applying weights. Use documented product-specific mappings for raw usage, sentiment, and billing values; do not add login counts, a 1–5 sentiment rating, and a percentage directly. The weights below are an illustrative starting point, not validated churn predictions.
|
|
245
|
+
|
|
246
|
+
Treat missing or stale signals as unavailable, rather than automatically healthy or zero. Set freshness windows and a minimum coverage policy before using the score. If the policy permits a partial score, compute `sum(weight × observed score) / sum(observed weights)` and report coverage (the sum of observed weights) alongside it; otherwise return “insufficient data.” All unavailable means no score. For example, only login (80) and feature usage (60) produce `(0.30×80 + 0.25×60)/0.55 = 70.91`, with 55% coverage. Do not promote that partial score into a healthy-account action without meeting the coverage policy.
|
|
247
|
+
|
|
248
|
+
An individual rating of 0–6 is a detractor; aggregate NPS (−100 to 100) is a different measure.
|
|
249
|
+
|
|
250
|
+
[Gainsight's measure-weight documentation](https://support.gainsight.com/gainsight_nxt/05Scorecards/02Admin_Guides/Measure_Weights_in_Scorecards) explains redistribution for unavailable measures.
|
|
251
|
+
|
|
252
|
+
Illustrative complete-data model:
|
|
245
253
|
|
|
246
254
|
```
|
|
247
255
|
Health Score = (
|
|
@@ -253,6 +261,8 @@ Health Score = (
|
|
|
253
261
|
)
|
|
254
262
|
```
|
|
255
263
|
|
|
264
|
+
Validate score mappings and intervention thresholds against later observed renewal/churn outcomes before operational use; the following tiers are illustrative.
|
|
265
|
+
|
|
256
266
|
| Score | Status | Action |
|
|
257
267
|
|-------|--------|--------|
|
|
258
268
|
| 80-100 | Healthy | Upsell opportunities |
|
|
@@ -375,7 +385,7 @@ Test one variable at a time:
|
|
|
375
385
|
| Offer presentation (modal vs full page) | Full page gets more attention | Save rate |
|
|
376
386
|
| Copy tone (empathetic vs direct) | Empathetic reduces friction | Save rate |
|
|
377
387
|
|
|
378
|
-
**How to run cancel flow experiments:** Use the **luckiest-ab-testing** skill to design statistically rigorous tests. PostHog is a good fit for cancel flow experiments — its feature flags can split users into different flows server-side, and its funnel analytics track each step of the cancel flow (survey → offer → accept/decline → confirm).
|
|
388
|
+
**How to run cancel flow experiments:** Use the **luckiest-ab-testing** skill to design statistically rigorous tests. PostHog is a good fit for cancel flow experiments — its feature flags can split users into different flows server-side, and its funnel analytics track each step of the cancel flow (survey → offer → accept/decline → confirm).
|
|
379
389
|
|
|
380
390
|
---
|
|
381
391
|
|
|
@@ -396,8 +406,6 @@ Test one variable at a time:
|
|
|
396
406
|
|
|
397
407
|
## Tool Integrations
|
|
398
408
|
|
|
399
|
-
For implementation, see the [tools registry](../../tools/REGISTRY.md).
|
|
400
|
-
|
|
401
409
|
### Retention Platforms
|
|
402
410
|
|
|
403
411
|
| Tool | Best For | Key Feature |
|
|
@@ -403,11 +403,14 @@ Don't rely on email alone. Show payment failures in the app:
|
|
|
403
403
|
### ROI Calculation
|
|
404
404
|
|
|
405
405
|
```
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
406
|
+
Assumed failed invoice amount: $10,000/month
|
|
407
|
+
Baseline collected amount: 30% ($3,000/month)
|
|
408
|
+
Scenario collected amount: 60% ($6,000/month)
|
|
409
|
+
Additional recovered cash: $3,000/month
|
|
410
|
+
If repeated for 12 months: $36,000/year
|
|
411
|
+
Assumed incremental tooling cost: $200-500/month
|
|
412
|
+
Recovered-revenue / tooling ratio: 6-15x
|
|
413
|
+
After tooling alone / tooling cost: 5-14x (500-1,400%)
|
|
413
414
|
```
|
|
415
|
+
|
|
416
|
+
The 6–15x is recovered cash ÷ tooling cost. Net of tooling it is 5–14x (`(3,000 - 500) / 500 = 5`; `(3,000 - 200) / 200 = 14`), before labor and payment fees. Validate the 60% recovery target against your own baseline. See [gross versus net profit](https://stripe.com/resources/more/gross-vs-net-profit-what-businesses-need-to-know).
|
|
@@ -3,7 +3,7 @@ name: co-marketing
|
|
|
3
3
|
description: "When the user wants to find co-marketing partners, plan joint campaigns, or brainstorm partnership opportunities. Use when the user says 'co-marketing,' 'partner marketing,' 'joint campaign,' 'who should we partner with,' 'integration marketing,' 'cross-promotion,' 'collaborate with another company,' 'partnership ideas,' or 'co-brand.' Identifies ideal partners, scores fit, screens for channel conflict, brainstorms campaigns, drafts outreach, and structures agreements. For customer referral programs, see luckiest-referrals. For launch-specific partnerships, see luckiest-launch."
|
|
4
4
|
license: See ATTRIBUTION.md
|
|
5
5
|
metadata:
|
|
6
|
-
version: "1.1.
|
|
6
|
+
version: "1.1.1"
|
|
7
7
|
listing_id: luckiest-co-marketing
|
|
8
8
|
author: luckiest
|
|
9
9
|
---
|
|
@@ -14,9 +14,9 @@ Acts as a co-marketing strategist who helps SaaS companies identify ideal partne
|
|
|
14
14
|
|
|
15
15
|
## Staying current
|
|
16
16
|
|
|
17
|
-
On activation, call the Luckiest MCP `check_updates` tool with `{ listingId: "cb4293c1-e599-4621-b5b0-18c41b8224f4", installedSemver: "1.1.
|
|
17
|
+
On activation, call the Luckiest MCP `check_updates` tool with `{ listingId: "cb4293c1-e599-4621-b5b0-18c41b8224f4", installedSemver: "1.1.1" }`. If it returns `upToDate: false`, surface the notice to the user once, then continue. Do nothing further if `upToDate: true`. Never block on this check — if the tool is unavailable, proceed.
|
|
18
18
|
|
|
19
|
-
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-co-marketing", skill_version: "1.1.
|
|
19
|
+
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-co-marketing", skill_version: "1.1.1", matched: true, success: <true if the skill completed, false otherwise> }. Metadata only, never prompt text. Never block on it — if the tool is unavailable, skip silently.
|
|
20
20
|
|
|
21
21
|
## Before Starting
|
|
22
22
|
|
|
@@ -313,13 +313,13 @@ After you have identified partners or built a campaign plan, offer (never auto-p
|
|
|
313
313
|
|
|
314
314
|
## Tool Integrations
|
|
315
315
|
|
|
316
|
-
|
|
316
|
+
Key tools for co-marketing:
|
|
317
317
|
|
|
318
|
-
| Tool | Best For |
|
|
319
|
-
|
|
320
|
-
| **Crossbeam** | Account overlap with partners |
|
|
321
|
-
| **Introw** | Partner program management, deal registration |
|
|
322
|
-
| **PartnerStack** | Partner and affiliate program management |
|
|
318
|
+
| Tool | Best For |
|
|
319
|
+
|------|----------|
|
|
320
|
+
| **Crossbeam** | Account overlap with partners |
|
|
321
|
+
| **Introw** | Partner program management, deal registration |
|
|
322
|
+
| **PartnerStack** | Partner and affiliate program management |
|
|
323
323
|
|
|
324
324
|
---
|
|
325
325
|
|
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog — luckiest-coder
|
|
2
2
|
|
|
3
|
+
## 1.3.0 — 2026-10-12
|
|
4
|
+
Skill updater pass: component reuse, ideas from BuilderIO Mitosis (MIT).
|
|
5
|
+
|
|
6
|
+
### Added
|
|
7
|
+
- Skill Priority route: "build a component" goes to the new
|
|
8
|
+
`luckiest-coder-components` sub-skill first, so a proven component from this
|
|
9
|
+
project or the shared cross-project library is adapted instead of rewritten.
|
|
10
|
+
- New sub-skill `luckiest-coder-components` 1.0.0: reuse-first lookup, shared
|
|
11
|
+
library at `~/.luckiest/components/` with a `uses` count, save-back after a
|
|
12
|
+
verified build, Mitosis multi-framework authoring checklist, and a shadcn
|
|
13
|
+
registry path for sharing the library across machines.
|
|
14
|
+
|
|
15
|
+
### Security
|
|
16
|
+
- No new findings in the kernel. The sub-skill treats library files as data,
|
|
17
|
+
scans for secrets before saving, and never installs on lookup.
|
|
18
|
+
|
|
19
|
+
### Analytics
|
|
20
|
+
- `check_updates` installedSemver and `report_usage` skill_version -> 1.3.0.
|
|
21
|
+
|
|
3
22
|
## 1.2.0 — 2026-09-22
|
|
4
23
|
Skill updater pass: best practices pulled from BuilderOS, Compound Engineering,
|
|
5
24
|
and firstmate (analysis in the PR description).
|
package/skills/coder/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: coder
|
|
|
3
3
|
description: Use when starting ANY coding conversation or task — establishes how to find and invoke the right Luckiest Coder skill before you do anything else, including clarifying questions, reading files, or exploring the codebase. Trigger phrases: "start coding", "let's build", "help me implement", "how should I approach this", or the very first message of any dev session. Requires skill invocation BEFORE any response.
|
|
4
4
|
license: See ATTRIBUTION.md
|
|
5
5
|
metadata:
|
|
6
|
-
version: "1.
|
|
6
|
+
version: "1.3.0"
|
|
7
7
|
listing_id: luckiest-coder
|
|
8
8
|
author: luckiest
|
|
9
9
|
---
|
|
@@ -34,6 +34,7 @@ When multiple skills apply, process skills come first — they set the approach,
|
|
|
34
34
|
|
|
35
35
|
- "Let's build X" → luckiest-coder-brainstorming first, then implementation skills.
|
|
36
36
|
- "Fix this bug" → luckiest-coder-debugging first, then domain skills.
|
|
37
|
+
- "Build a component" (modal, card, form, table, nav) → luckiest-coder-components lookup first, so a proven component is adapted instead of rewritten.
|
|
37
38
|
|
|
38
39
|
Gates: if `.luckiest/constitution.md` exists, run the luckiest-coder-constitution Check before finalizing any plan and before finishing any review. Before finishing a branch or opening a PR on multi-step work, run luckiest-coder-consistency to confirm the build matches the plan.
|
|
39
40
|
|
|
@@ -83,7 +84,7 @@ User instructions (CLAUDE.md, AGENTS.md, GEMINI.md, etc, direct requests) take p
|
|
|
83
84
|
## Staying current
|
|
84
85
|
|
|
85
86
|
On activation, call the Luckiest MCP `check_updates` tool with
|
|
86
|
-
`{ listingId: "3cb8177a-23bc-413a-9055-c419329096bb", installedSemver: "1.
|
|
87
|
+
`{ listingId: "3cb8177a-23bc-413a-9055-c419329096bb", installedSemver: "1.3.0" }`.
|
|
87
88
|
If it returns `upToDate: false`, surface the `notice` to the user. Do nothing if `upToDate: true`.
|
|
88
89
|
|
|
89
|
-
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-coder", skill_version: "1.
|
|
90
|
+
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-coder", skill_version: "1.3.0", matched: true, success: <true if the skill completed, false otherwise> }. Metadata only, never prompt text. Never block on it — if the tool is unavailable, skip silently.
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Changelog — luckiest-coder-writing-plans
|
|
2
2
|
|
|
3
|
+
## 1.3.0 — 2026-10-12
|
|
4
|
+
- File Structure: each planned UI component is marked "reuse: <library entry>" or
|
|
5
|
+
"new: no match" after a `luckiest-coder-components` lookup.
|
|
6
|
+
- `check_updates` and `report_usage` -> 1.3.0.
|
|
7
|
+
|
|
3
8
|
## 1.2.0 — 2026-09-22
|
|
4
9
|
Practices adopted from BuilderOS, Compound Engineering, and firstmate.
|
|
5
10
|
|
|
@@ -3,7 +3,7 @@ name: coder-writing-plans
|
|
|
3
3
|
description: Use when you have a spec or requirements for a multi-step coding task and need a detailed implementation plan before touching code. Trigger phrases include "write a plan", "plan this feature", "break this into tasks", "create an implementation plan", "turn this spec into steps", or "/luckiest-coder-writing-plans". Produces a bite-sized, TDD-structured, fully-specified plan an engineer with zero codebase context can execute task-by-task.
|
|
4
4
|
license: See ATTRIBUTION.md
|
|
5
5
|
metadata:
|
|
6
|
-
version: "1.
|
|
6
|
+
version: "1.3.0"
|
|
7
7
|
listing_id: luckiest-coder-writing-plans
|
|
8
8
|
author: luckiest
|
|
9
9
|
---
|
|
@@ -35,6 +35,7 @@ Before defining tasks, map out which files will be created or modified and what
|
|
|
35
35
|
- You reason best about code you can hold in context at once, and your edits are more reliable when files are focused. Prefer smaller, focused files over large ones that do too much.
|
|
36
36
|
- Files that change together should live together. Split by responsibility, not by technical layer.
|
|
37
37
|
- In existing codebases, follow established patterns. If the codebase uses large files, don't unilaterally restructure - but if a file you're modifying has grown unwieldy, including a split in the plan is reasonable.
|
|
38
|
+
- For every UI component the plan creates, run the luckiest-coder-components lookup first. Mark the file as "reuse: <library entry>" or "new: no match", so the executor adapts instead of rewriting.
|
|
38
39
|
|
|
39
40
|
This structure informs the task decomposition. Each task should produce self-contained changes that make sense independently.
|
|
40
41
|
|
|
@@ -187,7 +188,7 @@ After saving the plan, you may offer: "Want to share this plan with your tribe v
|
|
|
187
188
|
## Staying current
|
|
188
189
|
|
|
189
190
|
On activation, call the Luckiest MCP `check_updates` tool with
|
|
190
|
-
`{ listingId: "6d9ecc50-d84a-44ef-b6d6-6425affe0fca", installedSemver: "1.
|
|
191
|
+
`{ listingId: "6d9ecc50-d84a-44ef-b6d6-6425affe0fca", installedSemver: "1.3.0" }`.
|
|
191
192
|
If it returns `upToDate: false`, surface the `notice` to the user. Do nothing if `upToDate: true`.
|
|
192
193
|
|
|
193
|
-
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-coder-writing-plans", skill_version: "1.
|
|
194
|
+
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-coder-writing-plans", skill_version: "1.3.0", matched: true, success: <true if the skill completed, false otherwise> }. Metadata only, never prompt text. Never block on it — if the tool is unavailable, skip silently.
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# Changelog — luckiest-content-strategy
|
|
2
2
|
|
|
3
|
+
## 1.1.2 — 2026-10-23
|
|
4
|
+
- Removed dead `tools/` integration links from the headless CMS reference. Sanity, Contentful, and Strapi stay as plain names.
|
|
5
|
+
|
|
3
6
|
## 1.1.1 — 2026-10-16
|
|
4
7
|
From coreyhaines31/marketingskills at 1efedbc (issue #174, MIT).
|
|
5
8
|
|
|
@@ -3,7 +3,7 @@ name: content-strategy
|
|
|
3
3
|
description: Plans what content to create — content pillars, topic clusters, buyer-stage keyword mapping, and prioritization — so a brand builds traffic, authority, and leads through searchable and shareable content. Use when the user wants to plan a content strategy, decide what to create, audit and refresh an existing library, or figure out what topics to cover. Also use when the user mentions "content strategy," "what should I write about," "content ideas," "blog strategy," "topic clusters," "content planning," "editorial calendar," "content marketing," "content roadmap," "what content should I create," "blog topics," "content pillars," "content audit," "our content feels random," or "I don't know what to write." Use this whenever someone needs help deciding what content to produce, not just writing it. For writing individual pieces, see luckiest-copywriting. For SEO-specific audits, see luckiest-seo-audit.
|
|
4
4
|
license: See ATTRIBUTION.md
|
|
5
5
|
metadata:
|
|
6
|
-
version: "1.1.
|
|
6
|
+
version: "1.1.2"
|
|
7
7
|
listing_id: luckiest-content-strategy
|
|
8
8
|
author: luckiest
|
|
9
9
|
---
|
|
@@ -14,9 +14,9 @@ The agent acts as a content strategist. The goal is to plan content that drives
|
|
|
14
14
|
|
|
15
15
|
## Staying current
|
|
16
16
|
|
|
17
|
-
On activation, call the Luckiest MCP check_updates tool with { listingId: "72a19125-282a-4954-b958-4d71934ce77f", installedSemver: "1.1.
|
|
17
|
+
On activation, call the Luckiest MCP check_updates tool with { listingId: "72a19125-282a-4954-b958-4d71934ce77f", installedSemver: "1.1.2" }. If it returns upToDate: false, surface the notice to the user once, then continue. Do nothing further if upToDate: true. Never block on this check — if the tool is unavailable, proceed.
|
|
18
18
|
|
|
19
|
-
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-content-strategy", skill_version: "1.1.
|
|
19
|
+
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-content-strategy", skill_version: "1.1.2", matched: true, success: <true if the skill completed, false otherwise> }. Metadata only, never prompt text. Never block on it — if the tool is unavailable, skip silently.
|
|
20
20
|
|
|
21
21
|
## Before Planning
|
|
22
22
|
|
|
@@ -187,8 +187,8 @@ Pull CMS content into email templates for consistent messaging across web and em
|
|
|
187
187
|
|
|
188
188
|
---
|
|
189
189
|
|
|
190
|
-
## Relevant
|
|
190
|
+
## Relevant Integrations
|
|
191
191
|
|
|
192
|
-
-
|
|
193
|
-
-
|
|
194
|
-
-
|
|
192
|
+
- **Sanity** — GROQ queries, mutations, CLI
|
|
193
|
+
- **Contentful** — Delivery/Management APIs, publishing
|
|
194
|
+
- **Strapi** — REST CRUD, filters, document API
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# Changelog — luckiest-copy-editing
|
|
2
2
|
|
|
3
|
+
## 1.3.0 — 2026-10-21
|
|
4
|
+
From coreyhaines31/marketingskills at 06d647e (issue #213, MIT).
|
|
5
|
+
- Pick the edit mode before editing. A point edit skips the Seven Sweeps and returns only the changed lines. New point-edit eval.
|
|
6
|
+
|
|
3
7
|
## 1.2.1 — 2026-10-16
|
|
4
8
|
From coreyhaines31/marketingskills at 1efedbc (issue #174, MIT).
|
|
5
9
|
|
|
@@ -3,7 +3,7 @@ name: copy-editing
|
|
|
3
3
|
description: "When the user wants to edit, review, or improve existing marketing copy, or refresh outdated content. Also use when the user mentions 'edit this copy,' 'review my copy,' 'copy feedback,' 'proofread,' 'polish this,' 'make this better,' 'copy sweep,' 'tighten this up,' 'this reads awkwardly,' 'clean up this text,' 'too wordy,' 'sharpen the messaging,' 'refresh this content,' 'update this page,' 'this content is outdated,' or 'content audit,' 'this sounds like AI,' 'AI slop,' 'de-slop this,' or 'make it sound human.' Use this when the user already has copy and wants it improved or refreshed rather than rewritten from scratch. For writing new copy, see luckiest-copywriting."
|
|
4
4
|
license: See ATTRIBUTION.md
|
|
5
5
|
metadata:
|
|
6
|
-
version: "1.
|
|
6
|
+
version: "1.3.0"
|
|
7
7
|
listing_id: luckiest-copy-editing
|
|
8
8
|
author: luckiest
|
|
9
9
|
---
|
|
@@ -14,9 +14,9 @@ This skill acts as an expert copy editor specializing in marketing and conversio
|
|
|
14
14
|
|
|
15
15
|
## Staying current
|
|
16
16
|
|
|
17
|
-
On activation, call the Luckiest MCP check_updates tool with { listingId: "8f895dc3-9d85-4b40-9c80-2b1d396bc579", installedSemver: "1.
|
|
17
|
+
On activation, call the Luckiest MCP check_updates tool with { listingId: "8f895dc3-9d85-4b40-9c80-2b1d396bc579", installedSemver: "1.3.0" }. If it returns upToDate: false, surface the notice to the user once, then continue. Do nothing further if upToDate: true. Never block on this check — if the tool is unavailable, proceed.
|
|
18
18
|
|
|
19
|
-
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-copy-editing", skill_version: "1.
|
|
19
|
+
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-copy-editing", skill_version: "1.3.0", matched: true, success: <true if the skill completed, false otherwise> }. Metadata only, never prompt text. Never block on it — if the tool is unavailable, skip silently.
|
|
20
20
|
|
|
21
21
|
## Core Philosophy
|
|
22
22
|
|
|
@@ -39,6 +39,8 @@ Show edits as diffs, not silent rewrites. For each change, present the original
|
|
|
39
39
|
|
|
40
40
|
The Prove It and Specificity sweeps ask for numbers, timeframes, testimonials, and named results. Never invent these. If a claim needs proof that isn't in the source or the product context, do one of two things: (1) mark it as a placeholder the author must fill in (e.g. `[insert response-time SLA]`), or (2) soften the claim so it no longer asserts an unsupported fact. Fabricated stats and made-up testimonials are a hard no, even when they would make the copy stronger.
|
|
41
41
|
|
|
42
|
+
**Pick the mode before editing.** Diagnose the input: A, blank or slop (rebuild from the facts); B, a real voice (restore it, keep their argument and words); C, a point edit (one line, word, or section). **A point edit skips the Seven Sweeps**: change only what was asked plus the minimum around it, return just the changed lines with a reason, and leave everything else as written. Run the full sweeps for A and B. See [references/checklist.md](references/checklist.md#pick-the-edit-mode).
|
|
43
|
+
|
|
42
44
|
---
|
|
43
45
|
|
|
44
46
|
## The Seven Sweeps Framework
|
|
@@ -84,6 +84,19 @@
|
|
|
84
84
|
"Does not attempt to write full page copy from scratch"
|
|
85
85
|
],
|
|
86
86
|
"files": []
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"id": 9,
|
|
90
|
+
"prompt": "Just fix the headline, it feels flat. Leave the rest alone.\n\nHeadline: Better invoicing for small agencies\nSubhead: Ledgerly sends invoices the day a project milestone closes and chases late payers for you, so most clients pay within 9 days.\nBody: We built Ledgerly after our own agency waited 61 days on a $40k invoice. Connect Asana or ClickUp, pick which milestones bill, and Ledgerly drafts the invoice for you to approve.\nCTA: Start a 14-day trial",
|
|
91
|
+
"expected_output": "Should treat this as a point edit (Situation C). Should rewrite only the headline, drawing on facts already in the copy (milestone-triggered invoices, 9-day payment, the 61-day story), and return just the new headline with a one-line reason, optionally one alternative. Should not run or report the Seven Sweeps, and should not rewrite the subhead, body, or CTA. May flag a serious problem elsewhere in one line without fixing it.",
|
|
92
|
+
"assertions": [
|
|
93
|
+
"Changes only the headline",
|
|
94
|
+
"Does not rewrite or return edited versions of the subhead, body, or CTA",
|
|
95
|
+
"Does not produce a seven-sweep report",
|
|
96
|
+
"New headline uses facts already present in the copy and invents no new stats",
|
|
97
|
+
"Gives a short reason for the change"
|
|
98
|
+
],
|
|
99
|
+
"files": []
|
|
87
100
|
}
|
|
88
101
|
]
|
|
89
102
|
}
|
|
@@ -2,8 +2,32 @@
|
|
|
2
2
|
|
|
3
3
|
Use this checklist alongside the Seven Sweeps Framework (see SKILL.md) as a final QA pass before delivering edited copy.
|
|
4
4
|
|
|
5
|
+
## Pick the Edit Mode
|
|
6
|
+
|
|
7
|
+
Decide what you were handed before running any sweep. The mode sets how much you're allowed to change.
|
|
8
|
+
|
|
9
|
+
| Mode | Signs | What to do |
|
|
10
|
+
|---|---|---|
|
|
11
|
+
| **A. Blank or slop** | Generic company-speak, AI mush, no point of view | Run all seven sweeps. You may rebuild sentences from the underlying facts; never invent stats, customers, or results |
|
|
12
|
+
| **B. Real voice** | A clear angle or opinion, recognizable word choices, rough execution | Run all seven sweeps as restoration. Keep their argument, vocabulary, and emphasis. Fix the buried lead, vague lines, AI tells, and structure |
|
|
13
|
+
| **C. Point edit** | "Fix this headline," "is this sentence OK?", "tighten paragraph two" | Skip the sweeps. Use point-edit mode below |
|
|
14
|
+
|
|
15
|
+
**Point-edit mode**
|
|
16
|
+
- [ ] Change only the line, word, or section named, plus the minimum around it needed for the edit to read cleanly (a pronoun, a transition)
|
|
17
|
+
- [ ] Check the edit against the AI Tells list and the surrounding voice, so the new line doesn't stand out
|
|
18
|
+
- [ ] Return only the changed text with a one-line reason per change, and offer one alternative if the choice is close
|
|
19
|
+
- [ ] Mention a serious problem elsewhere in one line at the end (a false claim, a broken CTA) without fixing it unasked
|
|
20
|
+
- [ ] Don't rewrite neighboring lines, add sections, or run a full sweep report
|
|
21
|
+
|
|
22
|
+
**Reading taste (B and C).** What the author gave you is evidence of their choices. Their vocabulary is a voice decision ("stuff" and "ship" stay), where they spent words is a priority decision, and what they left out is a scope decision. Match those; don't swap in your own.
|
|
23
|
+
|
|
24
|
+
**Leave-it-alone test (all modes).** For each change, ask whether it's measurably better or just different. Revert anything you can't give a reason for.
|
|
25
|
+
|
|
26
|
+
*Modes adapted from Profound's `improved-copywriting` and Wispr Flow's `copy-editing` skills ([skills-marketing-library](https://github.com/retieedra-profound/skills-marketing-library), MIT).*
|
|
27
|
+
|
|
5
28
|
## Before You Start
|
|
6
29
|
|
|
30
|
+
- [ ] Pick the edit mode (above); for a point edit, stop here and use point-edit mode
|
|
7
31
|
- [ ] Understand the goal of this copy
|
|
8
32
|
- [ ] Know the target audience
|
|
9
33
|
- [ ] Identify the desired action
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog — luckiest-copywriting
|
|
2
2
|
|
|
3
|
+
## 1.3.0 — 2026-10-21
|
|
4
|
+
From coreyhaines31/marketingskills at 06d647e (issue #213, MIT).
|
|
5
|
+
- Diagnose the situation first (blank, real voice, point edit), drafting protocol with the three-question gate, supportable claims with an unlock path.
|
|
6
|
+
- Reads the Learnings section before drafting. New real-voice eval.
|
|
7
|
+
- Skipped: references/ai-tells.md (luckiest-copywriting-humanize covers it).
|
|
8
|
+
|
|
3
9
|
## 1.2.0 — 2026-10-08
|
|
4
10
|
Upstream sync with coreyhaines31/marketingskills dda3841 (issue #112).
|
|
5
11
|
|