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.
Files changed (104) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/package.json +1 -1
  4. package/skills/ab-testing/CHANGELOG.md +4 -0
  5. package/skills/ab-testing/SKILL.md +3 -3
  6. package/skills/ab-testing/references/sample-size-guide.md +15 -2
  7. package/skills/ad-creative/CHANGELOG.md +8 -0
  8. package/skills/ad-creative/SKILL.md +23 -13
  9. package/skills/ads/CHANGELOG.md +6 -0
  10. package/skills/ads/SKILL.md +14 -10
  11. package/skills/ads/evals/evals.json +13 -0
  12. package/skills/ads/references/operating-check.md +75 -0
  13. package/skills/ai-seo/CHANGELOG.md +11 -0
  14. package/skills/ai-seo/SKILL.md +28 -27
  15. package/skills/ai-seo/references/agent-defaults.md +79 -0
  16. package/skills/ai-seo/references/ai-attribution.md +54 -0
  17. package/skills/ai-seo/references/answer-accuracy.md +84 -0
  18. package/skills/ai-seo/references/content-patterns.md +24 -0
  19. package/skills/ai-seo/references/multilingual-and-commerce.md +55 -0
  20. package/skills/ai-seo/references/platform-ranking-factors.md +29 -11
  21. package/skills/ai-seo/references/prompt-portfolio.md +83 -0
  22. package/skills/analytics/CHANGELOG.md +8 -0
  23. package/skills/analytics/SKILL.md +74 -18
  24. package/skills/analytics/references/event-library.md +2 -2
  25. package/skills/churn-prevention/CHANGELOG.md +7 -0
  26. package/skills/churn-prevention/SKILL.md +16 -8
  27. package/skills/churn-prevention/references/dunning-playbook.md +10 -7
  28. package/skills/co-marketing/CHANGELOG.md +3 -0
  29. package/skills/co-marketing/SKILL.md +9 -9
  30. package/skills/coder/CHANGELOG.md +19 -0
  31. package/skills/coder/SKILL.md +4 -3
  32. package/skills/coder-writing-plans/CHANGELOG.md +5 -0
  33. package/skills/coder-writing-plans/SKILL.md +4 -3
  34. package/skills/content-strategy/CHANGELOG.md +3 -0
  35. package/skills/content-strategy/SKILL.md +3 -3
  36. package/skills/content-strategy/references/headless-cms.md +4 -4
  37. package/skills/copy-editing/CHANGELOG.md +4 -0
  38. package/skills/copy-editing/SKILL.md +5 -3
  39. package/skills/copy-editing/evals/evals.json +13 -0
  40. package/skills/copy-editing/references/checklist.md +24 -0
  41. package/skills/copywriting/CHANGELOG.md +6 -0
  42. package/skills/copywriting/SKILL.md +57 -4
  43. package/skills/copywriting/evals/evals.json +14 -0
  44. package/skills/emails/CHANGELOG.md +4 -0
  45. package/skills/emails/SKILL.md +5 -3
  46. package/skills/marketing-plan/CHANGELOG.md +4 -0
  47. package/skills/marketing-plan/SKILL.md +8 -3
  48. package/skills/offers/CHANGELOG.md +4 -0
  49. package/skills/offers/SKILL.md +4 -4
  50. package/skills/onboarding/CHANGELOG.md +4 -0
  51. package/skills/onboarding/SKILL.md +13 -7
  52. package/skills/pricing/CHANGELOG.md +4 -0
  53. package/skills/pricing/SKILL.md +3 -3
  54. package/skills/pricing/references/research-methods.md +12 -2
  55. package/skills/product-marketing/CHANGELOG.md +5 -0
  56. package/skills/product-marketing/SKILL.md +76 -11
  57. package/skills/product-marketing/references/brand-voice.md +103 -0
  58. package/skills/prospecting/CHANGELOG.md +3 -0
  59. package/skills/prospecting/SKILL.md +22 -22
  60. package/skills/prospecting/references/data-sources.md +0 -18
  61. package/skills/prospecting/references/saas-prospecting.md +2 -2
  62. package/skills/referrals/CHANGELOG.md +4 -0
  63. package/skills/referrals/SKILL.md +3 -3
  64. package/skills/referrals/references/program-examples.md +9 -2
  65. package/skills/research/CHANGELOG.md +5 -0
  66. package/skills/research/SKILL.md +5 -5
  67. package/skills/research/references/visual-read.md +10 -4
  68. package/skills/revops/CHANGELOG.md +4 -0
  69. package/skills/revops/SKILL.md +6 -6
  70. package/skills/revops/references/scoring-models.md +14 -13
  71. package/skills/seo-audit/CHANGELOG.md +4 -0
  72. package/skills/seo-audit/SKILL.md +7 -7
  73. package/skills/seo-audit/references/international-seo.md +3 -1
  74. package/skills/social/CHANGELOG.md +4 -0
  75. package/skills/social/SKILL.md +4 -4
  76. package/skills/social/references/listening.md +13 -0
  77. package/skills/social/references/platforms.md +35 -0
  78. package/skills/social/references/short-form-video.md +10 -0
  79. package/skills/trends/CHANGELOG.md +7 -0
  80. package/skills/trends/SKILL.md +5 -5
  81. package/skills/trends/agents/openai.yaml +8 -0
  82. package/skills/trends/references/comparison.md +5 -2
  83. package/skills/trends/references/engine-contract.md +2 -2
  84. package/skills/trends/references/synthesis.md +2 -2
  85. package/skills/trends/scripts/build-skill.sh +39 -0
  86. package/skills/trends/scripts/compare.sh +61 -0
  87. package/skills/trends/scripts/evaluate_search_quality.py +584 -0
  88. package/skills/trends/scripts/lib/arxiv.py +10 -1
  89. package/skills/trends/scripts/lib/bluesky.py +22 -2
  90. package/skills/trends/scripts/lib/devto.py +108 -18
  91. package/skills/trends/scripts/lib/digg.py +79 -17
  92. package/skills/trends/scripts/lib/github.py +9 -4
  93. package/skills/trends/scripts/lib/hackernews.py +74 -2
  94. package/skills/trends/scripts/lib/html_render.py +15 -1
  95. package/skills/trends/scripts/lib/pipeline.py +1 -1
  96. package/skills/trends/scripts/lib/planner.py +5 -0
  97. package/skills/trends/scripts/lib/providers.py +1 -1
  98. package/skills/trends/scripts/lib/reddit_shreddit.py +4 -1
  99. package/skills/trends/scripts/lib/render.py +49 -45
  100. package/skills/trends/scripts/lib/youtube_yt.py +10 -7
  101. package/skills/trends/scripts/test-v1-vs-v2.sh +220 -0
  102. package/skills/trends/scripts/test_device_auth.py +128 -0
  103. package/skills/trends/scripts/verify_v3.py +200 -0
  104. 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.1.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.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.
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.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.
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 | spring_sale |
201
- | utm_content | Differentiate versions | hero_cta |
202
- | utm_term | Paid search keywords | running+shoes |
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
- - Use underscores or hyphens consistently
207
- - Be specific but concise: `blog_footer_cta`, not `cta1`
208
- - Document all UTMs in a spreadsheet
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
- For implementation, see the [tools registry](../../tools/REGISTRY.md). Key analytics tools:
410
+ Key analytics tools:
355
411
 
356
- | Tool | Best For | MCP | Guide |
357
- |------|----------|:---:|-------|
358
- | **GA4** | Web analytics, Google ecosystem | ✓ | [ga4.md](../../tools/integrations/ga4.md) |
359
- | **Mixpanel** | Product analytics, event tracking | - | [mixpanel.md](../../tools/integrations/mixpanel.md) |
360
- | **Amplitude** | Product analytics, cohort analysis | - | [amplitude.md](../../tools/integrations/amplitude.md) |
361
- | **PostHog** | Open-source analytics, session replay | - | [posthog.md](../../tools/integrations/posthog.md) |
362
- | **Segment** | Customer data platform, routing | - | [segment.md](../../tools/integrations/segment.md) |
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
 
@@ -211,8 +211,8 @@ referrer: "https://google.com"
211
211
  ```
212
212
  source: "google"
213
213
  medium: "cpc"
214
- campaign: "spring_sale"
215
- content: "hero_cta"
214
+ campaign: "spring-sale"
215
+ content: "hero-cta"
216
216
  ```
217
217
 
218
218
  **Product Context (E-commerce):**
@@ -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.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.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.
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.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.
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
- | NPS score drops below 6 | Medium | 1-3 months before cancel |
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). See the [PostHog integration guide](../../tools/integrations/posthog.md) for setup.
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
- Monthly failed payment MRR: $10,000
407
- Current recovery rate: 30% ($3,000 recovered)
408
- Target recovery rate: 60% ($6,000 recovered)
409
- Monthly improvement: $3,000/month
410
- Annual improvement: $36,000/year
411
- Cost of dunning optimization: ~$200-500/month (tooling)
412
- ROI: 6-15x
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).
@@ -1,5 +1,8 @@
1
1
  # Changelog — luckiest-co-marketing
2
2
 
3
+ ## 1.1.1 — 2026-10-23
4
+ - Removed dead `tools/` registry and integration links. The tool table keeps names and use cases.
5
+
3
6
  ## 1.1.0 — 2026-07-06
4
7
  Skill updater pass: analytics integration.
5
8
 
@@ -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.0"
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.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.
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.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.
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
- For implementation, see the [tools registry](../../tools/REGISTRY.md). Key tools for co-marketing:
316
+ Key tools for co-marketing:
317
317
 
318
- | Tool | Best For | Guide |
319
- |------|----------|-------|
320
- | **Crossbeam** | Account overlap with partners | [crossbeam.md](../../tools/integrations/crossbeam.md) |
321
- | **Introw** | Partner program management, deal registration | [introw.md](../../tools/integrations/introw.md) |
322
- | **PartnerStack** | Partner and affiliate program management | [partnerstack.md](../../tools/integrations/partnerstack.md) |
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).
@@ -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.2.0"
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.2.0" }`.
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.2.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.
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.2.0"
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.2.0" }`.
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.2.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.
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.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.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.
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.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.
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 Integration Guides
190
+ ## Relevant Integrations
191
191
 
192
- - [Sanity](../../../tools/integrations/sanity.md) — GROQ queries, mutations, CLI
193
- - [Contentful](../../../tools/integrations/contentful.md) — Delivery/Management APIs, publishing
194
- - [Strapi](../../../tools/integrations/strapi.md) — REST CRUD, filters, document API
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.2.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.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.
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.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.
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