luckiest-co 1.0.47 → 1.0.49
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 +5 -0
- package/skills/ab-testing/SKILL.md +12 -9
- package/skills/ab-testing/evals/evals.json +18 -7
- package/skills/ab-testing/references/sample-size-guide.md +2 -2
- package/skills/ads/CHANGELOG.md +5 -0
- package/skills/ads/SKILL.md +4 -4
- package/skills/ai-seo/CHANGELOG.md +7 -0
- package/skills/ai-seo/SKILL.md +27 -20
- package/skills/analytics/CHANGELOG.md +6 -0
- package/skills/analytics/SKILL.md +4 -3
- package/skills/analytics/evals/evals.json +27 -0
- package/skills/analytics/references/ga4-implementation.md +7 -3
- package/skills/analytics/references/gtm-implementation.md +8 -2
- package/skills/aso/CHANGELOG.md +5 -0
- package/skills/aso/SKILL.md +4 -4
- package/skills/aso/evals/evals.json +15 -2
- package/skills/aso/references/benchmarks.md +4 -2
- package/skills/aso/references/google-play-specs.md +5 -1
- package/skills/brainstorm/SKILL.md +59 -16
- package/skills/brainstorm/builder-check-prompt.md +23 -0
- package/skills/churn-prevention/CHANGELOG.md +5 -0
- package/skills/churn-prevention/SKILL.md +3 -3
- package/skills/churn-prevention/evals/evals.json +14 -0
- package/skills/churn-prevention/references/dunning-playbook.md +6 -1
- package/skills/coder-brainstorming/CHANGELOG.md +10 -0
- package/skills/coder-brainstorming/SKILL.md +62 -20
- package/skills/coder-brainstorming/builder-check-prompt.md +23 -0
- package/skills/coder-brainstorming/scripts/server.cjs +1 -1
- package/skills/coder-debugging/CHANGELOG.md +4 -0
- package/skills/coder-debugging/SKILL.md +5 -5
- package/skills/coder-requesting-code-review/CHANGELOG.md +4 -0
- package/skills/coder-requesting-code-review/SKILL.md +4 -4
- package/skills/coder-subagent-driven-development/CHANGELOG.md +4 -0
- package/skills/coder-subagent-driven-development/SKILL.md +3 -3
- package/skills/coder-subagent-driven-development/scripts/sdd-workspace +3 -1
- package/skills/cold-email/CHANGELOG.md +7 -0
- package/skills/cold-email/SKILL.md +27 -7
- package/skills/cold-email/evals/evals.json +30 -0
- package/skills/cold-email/references/benchmarks.md +15 -11
- package/skills/cold-email/references/deliverability.md +110 -0
- package/skills/cold-email/references/linkedin-outreach.md +91 -0
- package/skills/cold-email/references/multichannel-cadence.md +79 -0
- package/skills/cold-email/references/outbound-plays.md +88 -0
- package/skills/cold-email/references/personalization.md +11 -0
- package/skills/cold-email/references/reply-handling.md +65 -0
- package/skills/competitor-profiling/CHANGELOG.md +5 -0
- package/skills/competitor-profiling/SKILL.md +4 -4
- package/skills/content-strategy/CHANGELOG.md +5 -0
- package/skills/content-strategy/SKILL.md +5 -3
- package/skills/copy-editing/CHANGELOG.md +5 -0
- package/skills/copy-editing/SKILL.md +5 -5
- package/skills/copy-editing/references/content-refresh.md +33 -0
- package/skills/cro/CHANGELOG.md +5 -0
- package/skills/cro/SKILL.md +14 -3
- package/skills/cro/references/form.md +1 -1
- package/skills/directory-submissions/CHANGELOG.md +5 -0
- package/skills/directory-submissions/SKILL.md +13 -4
- package/skills/directory-submissions/evals/evals.json +15 -1
- package/skills/directory-submissions/references/directory-list.md +2 -4
- package/skills/emails/CHANGELOG.md +5 -0
- package/skills/emails/SKILL.md +14 -4
- package/skills/launch/CHANGELOG.md +7 -0
- package/skills/launch/SKILL.md +8 -4
- package/skills/launch/evals/evals.json +29 -0
- package/skills/launch/references/shipped-changes.md +84 -0
- package/skills/launch/references/site-launch-qa.md +55 -0
- package/skills/lead-magnets/CHANGELOG.md +5 -0
- package/skills/lead-magnets/SKILL.md +6 -4
- package/skills/lead-magnets/evals/evals.json +18 -0
- package/skills/lead-magnets/references/content-to-skill-corpus-design.md +89 -0
- package/skills/lead-magnets/references/content-to-skill-release.md +71 -0
- package/skills/lead-magnets/references/content-to-skill.md +108 -0
- package/skills/marketing-plan/CHANGELOG.md +5 -0
- package/skills/marketing-plan/SKILL.md +3 -3
- package/skills/marketing-plan/evals/evals.json +13 -0
- package/skills/marketing-plan/references/budget-planning.md +26 -17
- package/skills/model-router/CHANGELOG.md +6 -0
- package/skills/model-router/SKILL.md +3 -3
- package/skills/model-router/scripts/route.py +1 -1
- package/skills/model-router/scripts/test_route.py +5 -0
- package/skills/pricing/CHANGELOG.md +5 -0
- package/skills/pricing/SKILL.md +4 -4
- package/skills/pricing/evals/evals.json +12 -0
- package/skills/pricing/references/research-methods.md +8 -4
- package/skills/programmatic-seo/CHANGELOG.md +5 -0
- package/skills/programmatic-seo/SKILL.md +8 -4
- package/skills/programmatic-seo/evals/evals.json +13 -0
- package/skills/programmatic-seo/references/implementation-platforms.md +37 -0
- package/skills/prospecting/CHANGELOG.md +7 -0
- package/skills/prospecting/SKILL.md +27 -13
- package/skills/prospecting/evals/evals.json +41 -0
- package/skills/prospecting/references/account-research.md +59 -0
- package/skills/prospecting/references/b2b-prospecting.md +1 -1
- package/skills/prospecting/references/compliance.md +44 -6
- package/skills/prospecting/references/data-sources.md +13 -15
- package/skills/prospecting/references/enrichment-playbook.md +61 -0
- package/skills/prospecting/references/saas-prospecting.md +1 -1
- package/skills/prospecting/references/signal-plays.md +99 -0
- package/skills/prospecting/references/sourcing-and-enrichment.md +89 -0
- package/skills/referrals/CHANGELOG.md +5 -0
- package/skills/referrals/SKILL.md +10 -4
- package/skills/referrals/evals/evals.json +99 -0
- package/skills/referrals/references/affiliate-operations.md +64 -0
- package/skills/referrals/references/affiliate-programs.md +2 -2
- package/skills/referrals/references/program-examples.md +14 -6
- package/skills/referrals/references/review-platform-rules.md +36 -0
- package/skills/referrals/references/review-program-operations.md +62 -0
- package/skills/referrals/references/review-programs.md +96 -0
- package/skills/revops/CHANGELOG.md +5 -0
- package/skills/revops/SKILL.md +10 -6
- package/skills/revops/evals/evals.json +13 -0
- package/skills/revops/references/automation-playbooks.md +1 -1
- package/skills/revops/references/inbound-routing.md +43 -0
- package/skills/revops/references/lifecycle-definitions.md +31 -0
- package/skills/sales-enablement/CHANGELOG.md +5 -0
- package/skills/sales-enablement/SKILL.md +6 -4
- package/skills/sales-enablement/evals/evals.json +14 -0
- package/skills/sales-enablement/references/cold-call-scripts.md +68 -0
- package/skills/schema/CHANGELOG.md +5 -0
- package/skills/schema/SKILL.md +20 -8
- package/skills/schema/evals/evals.json +40 -0
- package/skills/schema/references/schema-examples.md +9 -15
- package/skills/seo-audit/CHANGELOG.md +5 -0
- package/skills/seo-audit/SKILL.md +10 -16
- package/skills/seo-audit/evals/evals.json +68 -0
- package/skills/seo-audit/references/international-seo.md +9 -11
- package/skills/seo-audit/references/local-seo-pages-and-measurement.md +39 -0
- package/skills/seo-audit/references/local-seo-profile-and-citations.md +41 -0
- package/skills/seo-audit/references/local-seo.md +86 -0
- package/skills/seo-audit/references/rankings-push.md +62 -0
- package/skills/seo-audit/references/title-tags.md +89 -0
- package/skills/signup/CHANGELOG.md +5 -0
- package/skills/signup/SKILL.md +7 -3
- package/skills/site-architecture/CHANGELOG.md +5 -0
- package/skills/site-architecture/SKILL.md +5 -4
- package/skills/site-architecture/evals/evals.json +25 -0
- package/skills/site-architecture/references/platforms-and-migration.md +84 -0
- package/skills/social/CHANGELOG.md +5 -0
- package/skills/social/SKILL.md +4 -4
- package/skills/trends/.skillignore +3 -0
- package/skills/trends/CHANGELOG.md +20 -0
- package/skills/trends/SKILL.md +12 -8
- package/skills/trends/references/agent-mode.md +36 -0
- package/skills/trends/references/category-peers.md +38 -0
- package/skills/trends/references/comparison.md +227 -0
- package/skills/trends/references/competitors.md +29 -0
- package/skills/trends/references/discovery.md +90 -0
- package/skills/trends/references/engine-contract.md +111 -1889
- package/skills/trends/references/followups.md +112 -0
- package/skills/trends/references/grok-bot-x.md +55 -0
- package/skills/trends/references/hiring-signals.md +19 -0
- package/skills/trends/references/library-queue.md +33 -0
- package/skills/trends/references/recommendations.md +86 -0
- package/skills/trends/references/research-runbook.md +781 -0
- package/skills/trends/references/runtime.md +165 -0
- package/skills/trends/references/save-html-brief.md +39 -20
- package/skills/trends/references/setup-wizard.md +253 -0
- package/skills/trends/references/synthesis.md +289 -0
- package/skills/trends/scripts/box_chrome_login.py +209 -0
- package/skills/trends/scripts/briefing.py +9 -17
- package/skills/trends/scripts/last30days.py +3247 -280
- package/skills/trends/scripts/lib/agentcookie.py +196 -0
- package/skills/trends/scripts/lib/amazon.py +877 -0
- package/skills/trends/scripts/lib/arxiv.py +42 -8
- package/skills/trends/scripts/lib/backends.py +769 -0
- package/skills/trends/scripts/lib/bird_x.py +340 -57
- package/skills/trends/scripts/lib/bluesky.py +84 -10
- package/skills/trends/scripts/lib/bounded_get.py +156 -0
- package/skills/trends/scripts/lib/brightdata.py +291 -0
- package/skills/trends/scripts/lib/categories.py +7 -1
- package/skills/trends/scripts/lib/chrome_cdp.py +455 -0
- package/skills/trends/scripts/lib/chrome_cookies.py +132 -39
- package/skills/trends/scripts/lib/cluster.py +31 -54
- package/skills/trends/scripts/lib/competitors.py +10 -1
- package/skills/trends/scripts/lib/cookie_extract.py +221 -44
- package/skills/trends/scripts/lib/cookie_paths.py +27 -0
- package/skills/trends/scripts/lib/corpus.py +439 -0
- package/skills/trends/scripts/lib/devto.py +313 -0
- package/skills/trends/scripts/lib/discovery_handoff.py +988 -0
- package/skills/trends/scripts/lib/doctor.py +2166 -0
- package/skills/trends/scripts/lib/dripstack.py +203 -0
- package/skills/trends/scripts/lib/entity_extract.py +37 -0
- package/skills/trends/scripts/lib/env.py +1092 -138
- package/skills/trends/scripts/lib/fanout.py +11 -1
- package/skills/trends/scripts/lib/feed.py +61 -0
- package/skills/trends/scripts/lib/fetch_memo.py +135 -0
- package/skills/trends/scripts/lib/freshness.py +566 -0
- package/skills/trends/scripts/lib/fusion.py +314 -28
- package/skills/trends/scripts/lib/github.py +438 -24
- package/skills/trends/scripts/lib/grok_x.py +1237 -0
- package/skills/trends/scripts/lib/grounding.py +129 -11
- package/skills/trends/scripts/lib/hackernews.py +61 -4
- package/skills/trends/scripts/lib/health.py +373 -0
- package/skills/trends/scripts/lib/hosted.py +333 -0
- package/skills/trends/scripts/lib/html_publish.py +34 -0
- package/skills/trends/scripts/lib/html_render.py +169 -3
- package/skills/trends/scripts/lib/http.py +1215 -70
- package/skills/trends/scripts/lib/instagram.py +132 -9
- package/skills/trends/scripts/lib/jobs.py +4 -2
- package/skills/trends/scripts/lib/library.py +308 -0
- package/skills/trends/scripts/lib/library_index.py +477 -0
- package/skills/trends/scripts/lib/linkedin.py +271 -24
- package/skills/trends/scripts/lib/log.py +5 -2
- package/skills/trends/scripts/lib/meta_ads.py +982 -0
- package/skills/trends/scripts/lib/normalize.py +382 -28
- package/skills/trends/scripts/lib/parallel_mcp.py +234 -0
- package/skills/trends/scripts/lib/permission_preflight.py +42 -3
- package/skills/trends/scripts/lib/perplexity.py +1080 -468
- package/skills/trends/scripts/lib/pipeline.py +5079 -211
- package/skills/trends/scripts/lib/planner.py +396 -53
- package/skills/trends/scripts/lib/polymarket.py +285 -23
- package/skills/trends/scripts/lib/prescriptions.py +432 -0
- package/skills/trends/scripts/lib/private_files.py +21 -0
- package/skills/trends/scripts/lib/providers.py +231 -10
- package/skills/trends/scripts/lib/quality_nudge.py +122 -37
- package/skills/trends/scripts/lib/reddit.py +177 -12
- package/skills/trends/scripts/lib/reddit_arctic.py +146 -5
- package/skills/trends/scripts/lib/reddit_keyless.py +121 -60
- package/skills/trends/scripts/lib/reddit_listing.py +215 -14
- package/skills/trends/scripts/lib/reddit_public.py +12 -13
- package/skills/trends/scripts/lib/reddit_search.py +304 -0
- package/skills/trends/scripts/lib/reddit_shreddit.py +51 -7
- package/skills/trends/scripts/lib/registers.py +134 -0
- package/skills/trends/scripts/lib/relevance.py +17 -0
- package/skills/trends/scripts/lib/render.py +2161 -271
- package/skills/trends/scripts/lib/rerank.py +623 -55
- package/skills/trends/scripts/lib/resolve.py +50 -1
- package/skills/trends/scripts/lib/safari_cookies.py +42 -15
- package/skills/trends/scripts/lib/schema.py +782 -1
- package/skills/trends/scripts/lib/setup_wizard.py +779 -120
- package/skills/trends/scripts/lib/signals.py +206 -7
- package/skills/trends/scripts/lib/stocktwits.py +374 -0
- package/skills/trends/scripts/lib/subproc.py +307 -53
- package/skills/trends/scripts/lib/techmeme.py +89 -64
- package/skills/trends/scripts/lib/telegram.py +317 -0
- package/skills/trends/scripts/lib/tiktok.py +13 -9
- package/skills/trends/scripts/lib/topic_shape.py +340 -0
- package/skills/trends/scripts/lib/transcribe.py +12 -3
- package/skills/trends/scripts/lib/trustpilot.py +256 -5
- package/skills/trends/scripts/lib/truthsocial.py +9 -1
- package/skills/trends/scripts/lib/ui.py +6 -0
- package/skills/trends/scripts/lib/usage.py +132 -0
- package/skills/trends/scripts/lib/web_search_keyless.py +63 -4
- package/skills/trends/scripts/lib/windows_job.py +138 -0
- package/skills/trends/scripts/lib/x_api.py +824 -0
- package/skills/trends/scripts/lib/x_envelope.py +733 -0
- package/skills/trends/scripts/lib/x_judge.py +292 -0
- package/skills/trends/scripts/lib/xai_x.py +26 -3
- package/skills/trends/scripts/lib/xquik.py +89 -15
- package/skills/trends/scripts/lib/xurl_x.py +284 -91
- package/skills/trends/scripts/lib/youtube_yt.py +570 -119
- package/skills/trends/scripts/setup-keychain.sh +12 -4
- package/skills/trends/scripts/setup-pass.sh +3 -0
- package/skills/trends/scripts/store.py +444 -50
- package/skills/trends/scripts/watchlist.py +38 -11
- package/skills/trends/scripts/x_lane_parity.py +107 -0
- package/skills/video-studio/CHANGELOG.md +4 -0
- package/skills/video-studio/SKILL.md +4 -4
- package/skills/video-studio/references/styles/product-flight.md +45 -0
- package/skills/video-studio/references/styles.md +3 -1
- package/skills/video-studio-motion/ATTRIBUTION.md +1 -1
- package/skills/video-studio-motion/CHANGELOG.md +4 -0
- package/skills/video-studio-motion/SKILL.md +8 -5
- package/skills/youtube-planner/ATTRIBUTION.md +25 -0
- package/skills/youtube-planner/CHANGELOG.md +12 -0
- package/skills/youtube-planner/SKILL.md +191 -0
- package/skills/youtube-planner/references/plan-template.md +57 -0
- package/skills/youtube-planner/references/stages.md +119 -0
- package/skills/youtube-planner/scripts/floor_ceiling.py +132 -0
- package/skills/coder-brainstorming/spec-document-reviewer-prompt.md +0 -49
- package/skills/trends/scripts/lib/reddit_rss.py +0 -224
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Title Tags
|
|
2
|
+
|
|
3
|
+
How to write and audit titles for both rankings and clicks. The title is the strongest on-page relevance signal you control and the first thing a searcher reads, so it has two jobs. It has to match the query, and it has to win the click against nine other results.
|
|
4
|
+
|
|
5
|
+
## Start from the results page
|
|
6
|
+
|
|
7
|
+
Search the page's target query before writing. The titles already ranking tell you three things:
|
|
8
|
+
- **The format Google rewards** for this query: lists, guides, tools, product pages, comparisons.
|
|
9
|
+
- **The words searchers expect to see**: modifiers like "best," "free," "template," "vs," a year, a number.
|
|
10
|
+
- **The gap**: what every title promises, and what none of them do.
|
|
11
|
+
|
|
12
|
+
Match the format, use the expected words, and differentiate on the gap. A how-to title on a query where every result is a tool page loses no matter how well it's written.
|
|
13
|
+
|
|
14
|
+
## Default structure
|
|
15
|
+
|
|
16
|
+
```text
|
|
17
|
+
[Primary query] + [what makes this result worth clicking] + [brand, if it helps]
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
- **Query first.** Put it in the first few words, where both the ranking and the reader's scan start.
|
|
21
|
+
- **Then the reason to click**: a number, a specific outcome, a scope ("for Shopify stores"), freshness, or a format ("free template").
|
|
22
|
+
- **Brand last**, and only where it earns the space. A well-known brand adds clicks; an unknown one mostly adds truncation risk.
|
|
23
|
+
- **About 50–60 characters.** Google truncates by pixel width, not characters, so keep the important words in the first 50.
|
|
24
|
+
|
|
25
|
+
## Pattern by page type
|
|
26
|
+
|
|
27
|
+
Pick the page type first, then the pattern. Don't blend two patterns in one title unless the results page does.
|
|
28
|
+
|
|
29
|
+
| Page type | When | Pattern |
|
|
30
|
+
|-----------|------|---------|
|
|
31
|
+
| Product / feature | Commercial query for what you sell | `[Category] for [Audience] \| [Brand]` |
|
|
32
|
+
| Pricing | "[brand] pricing," "[category] cost" | `[Brand] Pricing: Plans and Costs` |
|
|
33
|
+
| Comparison | "X vs Y" | `[A] vs [B]: [the deciding difference]` |
|
|
34
|
+
| Alternatives | "[competitor] alternatives" | `[N] Best [Competitor] Alternatives ([Year])` |
|
|
35
|
+
| Listicle | "best [things]" | `[N] Best [Things] for [Audience] in [Year]` |
|
|
36
|
+
| How-to | Task query | `How to [Task]` or `How to [Task] Without [Obstacle]` |
|
|
37
|
+
| Definition | "what is [term]" | `What Is [Term]? [Short payoff]` |
|
|
38
|
+
| Guide / pillar | Broad topic | `[Topic]: A Complete Guide for [Audience]` |
|
|
39
|
+
| Template / tool | "[thing] template," "[thing] calculator" | `Free [Thing] [Template/Calculator] ([Format])` |
|
|
40
|
+
| Troubleshooting | Error or problem query | `How to Fix [Problem]` or `[Error]: What It Means and How to Fix It` |
|
|
41
|
+
|
|
42
|
+
Only use "free," a year, or a number when the page delivers on it. A "2026" title on a page last updated in 2024 is a promise the content breaks.
|
|
43
|
+
|
|
44
|
+
## Keep the set consistent
|
|
45
|
+
|
|
46
|
+
- **Title, H1, URL slug, and meta description** should all describe the same topic. They don't need identical wording, but a reader moving from the title to the page should never wonder whether they landed in the right place.
|
|
47
|
+
- **Every title is unique.** Duplicates split relevance and usually mean a template is filling in the same string everywhere.
|
|
48
|
+
- **Don't change slugs** to chase a year or a number. Change the title; leave the URL and its links alone.
|
|
49
|
+
|
|
50
|
+
## Google rewrites titles
|
|
51
|
+
|
|
52
|
+
Google replaces the title tag with its own text in a meaningful share of results, usually taking it from the H1 or anchor text. It does this most often when a title is:
|
|
53
|
+
- Much longer than the display width
|
|
54
|
+
- Stuffed with keywords or repeated boilerplate ("| Brand | Brand Blog | Home")
|
|
55
|
+
- Out of line with the page's H1 or content
|
|
56
|
+
- Generic ("Home," "Products," "Untitled")
|
|
57
|
+
|
|
58
|
+
If Search Console or a live search shows a different title than the one you wrote, treat it as a signal: tighten the title and align it with the H1.
|
|
59
|
+
|
|
60
|
+
## Fixing low click-through
|
|
61
|
+
|
|
62
|
+
A page in the top five with a click-through rate well below other pages at the same position has a title or description problem, not a content problem. Compare it to the results around it and rewrite to:
|
|
63
|
+
- State the specific outcome or answer, not the topic
|
|
64
|
+
- Add the qualifier the searcher is filtering for (audience, platform, price, format)
|
|
65
|
+
- Remove words that add length without meaning ("Ultimate," "Complete Guide to the Many...")
|
|
66
|
+
|
|
67
|
+
Change one page at a time and record the baseline CTR, so a gain is attributable. Allow 3–4 weeks before judging.
|
|
68
|
+
|
|
69
|
+
## Common fixes
|
|
70
|
+
|
|
71
|
+
| Problem | Before | After |
|
|
72
|
+
|---------|--------|-------|
|
|
73
|
+
| Says nothing | `Home` | `Invoicing Software for Freelancers \| Acme` |
|
|
74
|
+
| Bloated | `The Ultimate Complete Guide to Everything About Email Deliverability` | `Email Deliverability: 12 Fixes for Inbox Placement` |
|
|
75
|
+
| Wrong page type | `Plans That Grow With You` | `Acme Pricing: Plans and Costs` |
|
|
76
|
+
| Brand first on an unknown brand | `Acme \| Project Management for Agencies` | `Project Management for Agencies \| Acme` |
|
|
77
|
+
| Promise the page breaks | `Free CRM Templates` (one paid template) | `CRM Template for Small Teams (Google Sheets)` |
|
|
78
|
+
|
|
79
|
+
## Bulk audits
|
|
80
|
+
|
|
81
|
+
Work from a crawl export (URL, title, H1, length, indexable status) and, if available, Search Console queries per page. Return changes as a table the owner can approve line by line:
|
|
82
|
+
|
|
83
|
+
```markdown
|
|
84
|
+
| Page | Current title | Proposed title | Reason |
|
|
85
|
+
|------|---------------|----------------|--------|
|
|
86
|
+
| /pricing | Plans That Grow With You | Acme Pricing: Plans and Costs | Matches the "acme pricing" query |
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Give 2–3 options only for the pages that matter most (top revenue pages, top-5 rankings with weak CTR). For the long tail, one proposal per page keeps the review fast.
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Changelog — luckiest-signup
|
|
2
2
|
|
|
3
|
+
## 1.1.1 — 2026-10-16
|
|
4
|
+
From coreyhaines31/marketingskills at 1efedbc (issue #174, MIT).
|
|
5
|
+
|
|
6
|
+
- Sales-assist handoff points at the luckiest-revops inbound-routing playbook.
|
|
7
|
+
|
|
3
8
|
## 1.1.0 — 2026-07-06
|
|
4
9
|
Skill updater pass: analytics integration.
|
|
5
10
|
|
package/skills/signup/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: signup
|
|
|
3
3
|
description: Use when the user wants to optimize signup, registration, account creation, or trial activation flows. Reduces form friction, cuts fields, improves social auth and verification, and raises signup completion rates. Also use when the user mentions "signup conversions," "registration friction," "signup form optimization," "free trial signup," "reduce signup dropoff," "account creation flow," "people aren't signing up," "signup abandonment," "trial conversion rate," "nobody completes registration," "too many steps to sign up," or "simplify our signup." Use this whenever the user has a signup or registration flow that isn't performing. For post-signup onboarding, see luckiest-onboarding. For lead capture forms (not account creation), see luckiest-cro.
|
|
4
4
|
license: See ATTRIBUTION.md
|
|
5
5
|
metadata:
|
|
6
|
-
version: "1.1.
|
|
6
|
+
version: "1.1.1"
|
|
7
7
|
listing_id: luckiest-signup
|
|
8
8
|
author: luckiest
|
|
9
9
|
---
|
|
@@ -14,9 +14,9 @@ This skill optimizes signup and registration flows. The goal is to reduce fricti
|
|
|
14
14
|
|
|
15
15
|
## Staying current
|
|
16
16
|
|
|
17
|
-
On activation, call the Luckiest MCP check_updates tool with { listingId: "f1e643a0-85a4-4e3b-b6d9-2cbd99c6b2d2", installedSemver: "1.1.
|
|
17
|
+
On activation, call the Luckiest MCP check_updates tool with { listingId: "f1e643a0-85a4-4e3b-b6d9-2cbd99c6b2d2", 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-signup", skill_version: "1.1.
|
|
19
|
+
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-signup", 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
|
## Initial Assessment
|
|
22
22
|
|
|
@@ -374,6 +374,10 @@ After delivering a signup audit or redesign, offer (never auto-post): "Want me t
|
|
|
374
374
|
|
|
375
375
|
---
|
|
376
376
|
|
|
377
|
+
## Enrichment and Sales-Assisted Routing
|
|
378
|
+
|
|
379
|
+
If a signup needs enriched company data for a sales-assist handoff, use the inbound-routing playbook in the luckiest-revops skill (`references/inbound-routing.md`). Keep account creation separate from enrichment availability; a timeout or ambiguous company match must not become an implicit signup rejection.
|
|
380
|
+
|
|
377
381
|
## Related Skills
|
|
378
382
|
|
|
379
383
|
- **luckiest-onboarding**: For optimizing what happens after signup
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Changelog — luckiest-site-architecture
|
|
2
2
|
|
|
3
|
+
## 1.2.0 — 2026-10-16
|
|
4
|
+
From coreyhaines31/marketingskills at 1efedbc (issue #174, MIT).
|
|
5
|
+
|
|
6
|
+
- New platforms-and-migration reference (which website builder, migrating, adding a blog to an existing site). Partner plug removed.
|
|
7
|
+
|
|
3
8
|
## 1.1.0 — 2026-07-06
|
|
4
9
|
Skill updater pass: analytics integration.
|
|
5
10
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: site-architecture
|
|
3
|
-
description: When the user wants to plan, map, or restructure their website's page hierarchy, navigation, URL structure, or internal linking. Also use when the user mentions "sitemap," "site map," "visual sitemap," "site structure," "page hierarchy," "information architecture," "IA," "navigation design," "URL structure," "breadcrumbs," "internal linking strategy," "website planning," "what pages do I need," "how should I organize my site," "site navigation," "redirect map," "AEO,"
|
|
3
|
+
description: When the user wants to plan, map, or restructure their website's page hierarchy, navigation, URL structure, or internal linking. Also use when the user mentions "sitemap," "site map," "visual sitemap," "site structure," "page hierarchy," "information architecture," "IA," "navigation design," "URL structure," "breadcrumbs," "internal linking strategy," "website planning," "what pages do I need," "how should I organize my site," "site navigation," "redirect map," "AEO," "how AI search finds my pages," "which website builder should I use," "migrate my website," or "add a blog to my existing site." Use this whenever someone is planning what pages a website should have, how they connect, and where to build them. NOT for XML sitemaps (that's technical SEO — see luckiest-seo-audit). For SEO audits, see luckiest-seo-audit. For structured data, see luckiest-schema.
|
|
4
4
|
license: See ATTRIBUTION.md
|
|
5
5
|
metadata:
|
|
6
|
-
version: "1.
|
|
6
|
+
version: "1.2.0"
|
|
7
7
|
listing_id: luckiest-site-architecture
|
|
8
8
|
author: luckiest
|
|
9
9
|
---
|
|
@@ -14,9 +14,9 @@ This skill acts as an information architecture expert. Its goal is to help plan
|
|
|
14
14
|
|
|
15
15
|
## Staying current
|
|
16
16
|
|
|
17
|
-
On activation, call the Luckiest MCP check_updates tool with { listingId: "7a564054-6046-49dc-a0f4-cdf766496716", installedSemver: "1.
|
|
17
|
+
On activation, call the Luckiest MCP check_updates tool with { listingId: "7a564054-6046-49dc-a0f4-cdf766496716", installedSemver: "1.2.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-site-architecture", skill_version: "1.
|
|
19
|
+
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-site-architecture", 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.
|
|
20
20
|
|
|
21
21
|
## Before Planning
|
|
22
22
|
|
|
@@ -34,6 +34,7 @@ Gather this context (ask if not provided):
|
|
|
34
34
|
- New site or restructuring an existing one?
|
|
35
35
|
- If restructuring: what's broken? (high bounce, poor SEO, users can't find things)
|
|
36
36
|
- Existing URLs that must be preserved (for redirects)?
|
|
37
|
+
- What platform is it on, and is a platform change on the table? (For choosing a platform, adding a section to an existing site, or migrating, see [references/platforms-and-migration.md](references/platforms-and-migration.md).)
|
|
37
38
|
|
|
38
39
|
### 3. Site Type
|
|
39
40
|
- SaaS marketing site
|
|
@@ -83,6 +83,31 @@
|
|
|
83
83
|
"Explains site-architecture covers design, not technical SEO"
|
|
84
84
|
],
|
|
85
85
|
"files": []
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"id": 7,
|
|
89
|
+
"prompt": "We're a 20-person B2B SaaS on Webflow. Marketing wants a new blog and about 300 integration pages, and someone suggested moving the whole site to an AI website builder. What should we do?",
|
|
90
|
+
"expected_output": "Should start from the architecture and the questions in the platforms reference (who edits, page volume and data, integrations, lock-in, cost at real size) rather than naming a platform first. Should keep the current platform (Webflow) in the running and note that moving platforms often costs more than it fixes when the site works. Should compare a shortlist (e.g., staying on Webflow's CMS within its item limits, a reverse-proxied subpath from another tool, or an AI-native platform) with tradeoffs. Any Verified Partner tool named (e.g., Ploy) carries the disclosure and an alternative. Should cover subpath vs subdomain for the new sections and, if migrating, the redirect map and SEO checks.",
|
|
91
|
+
"assertions": [
|
|
92
|
+
"Asks or reasons through the platform criteria before recommending",
|
|
93
|
+
"Keeps the current platform as a real option",
|
|
94
|
+
"Gives a shortlist with tradeoffs, not a single answer",
|
|
95
|
+
"Discloses any partner tool and names an alternative",
|
|
96
|
+
"Covers subpath vs subdomain for the new sections"
|
|
97
|
+
],
|
|
98
|
+
"files": []
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
"id": 8,
|
|
102
|
+
"prompt": "We're migrating our marketing site from WordPress to a new platform next month. How do we not lose our SEO traffic?",
|
|
103
|
+
"expected_output": "Should lay out the migration plan from the platforms reference: crawl and save every URL with metadata, pull top pages by clicks/conversions/backlinks, keep URLs where possible, check what the CMS import carries (many don't move routes, metadata, redirects), build a one-to-one 301 map (never all to homepage), deploy redirects at switch time, submit the new sitemap, spot-check top pages, verify tracking and forms, and monitor Search Console for 404s afterwards.",
|
|
104
|
+
"assertions": [
|
|
105
|
+
"Crawls and saves current URLs and metadata first",
|
|
106
|
+
"Builds a one-to-one 301 redirect map",
|
|
107
|
+
"Warns that imports may not carry routes, metadata, or redirects",
|
|
108
|
+
"Includes launch-day checks and post-launch Search Console monitoring"
|
|
109
|
+
],
|
|
110
|
+
"files": []
|
|
86
111
|
}
|
|
87
112
|
]
|
|
88
113
|
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Platforms and Migration
|
|
2
|
+
|
|
3
|
+
Where the site gets built, how new pages join an existing site, and how to move platforms without losing search traffic. Load this when the user asks which builder or CMS to use, wants to add a section or landing pages to an existing site, or is planning a migration.
|
|
4
|
+
|
|
5
|
+
The architecture (pages, hierarchy, URLs, internal links) comes first and doesn't depend on the platform. Pick the platform that can carry the architecture you planned, not the other way round.
|
|
6
|
+
|
|
7
|
+
## Contents
|
|
8
|
+
- Choosing Where to Build
|
|
9
|
+
- The Options
|
|
10
|
+
- Adding Pages to an Existing Site
|
|
11
|
+
- Migrating Without Losing Traffic
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Choosing Where to Build
|
|
16
|
+
|
|
17
|
+
Ask these before naming any platform. The answers usually narrow the field to two or three.
|
|
18
|
+
|
|
19
|
+
1. **Who edits the site after launch?** A designer, a marketer who never touches code, an engineer, or an AI agent? The best platform for a designer-owned site is rarely the best for an engineer-owned one.
|
|
20
|
+
2. **What does the site have to do?** A marketing site, a blog or resource library, pages at scale from data, a store, logged-in product screens? Marketing builders handle the first three; stores and apps usually belong elsewhere and get linked or proxied.
|
|
21
|
+
3. **How many pages, and from what data?** A few dozen hand-built pages suit almost anything. Hundreds or thousands of templated pages need a CMS or database with the item limits to match (see the `luckiest-programmatic-seo` skill's platform reference).
|
|
22
|
+
4. **What has to connect?** CRM, forms, analytics, scheduling, ad pixels, the product's own login. Check the integrations that matter before falling for the editor.
|
|
23
|
+
5. **How much lock-in is acceptable?** Can you export the code and content and host it elsewhere? Hosted builders trade portability for convenience.
|
|
24
|
+
6. **What does it cost at the real size?** Per-site, per-seat, per-CMS-item, and usage-based pricing diverge fast as a site grows. Price the plan you'll need in a year.
|
|
25
|
+
|
|
26
|
+
## The Options
|
|
27
|
+
|
|
28
|
+
Characterizations as of 2026-10; check current plans and limits before committing.
|
|
29
|
+
|
|
30
|
+
| Option | What it is | Good fit | Watch out for |
|
|
31
|
+
|---|---|---|---|
|
|
32
|
+
| **Webflow** | Mature visual builder and CMS with hosting | Designer-owned marketing sites, rich CMS-driven content, sites that need fine visual control | CMS item limits by plan; ecommerce and localization are add-ons; designer skill needed to keep it clean |
|
|
33
|
+
| **Framer** | Design-led visual builder with CMS and fast publishing | Polished marketing sites and launches owned by designers or marketers | CMS item limits vary by plan (higher tiers reach tens of thousands); check the integrations you need |
|
|
34
|
+
| **WordPress** | Open-source CMS with the largest plugin ecosystem; self-hosted or managed | Content-heavy sites, full ownership, teams with WordPress experience, budgets that favor licensing over build time | Plugin sprawl, security and update upkeep, performance depends on hosting and theme |
|
|
35
|
+
| **Wix Studio, Squarespace** | All-in-one templated builders with built-in business apps | Small businesses and agencies that want hosting, commerce, and booking in one place | Less control over code and structure; harder to migrate off |
|
|
36
|
+
| **Landing-page tools** (Unbounce, Instapage, Leadpages) | Builders for campaign pages, usually with A/B testing; Leadpages also builds full multi-page small-business sites | Paid-traffic landing pages; small sites on Leadpages | Unbounce and Instapage pages usually live on a subdomain or separate system rather than hosting the whole site |
|
|
37
|
+
| **AI-native site platforms** (Flint and similar) | Hosted builders where an AI agent builds, edits, and operates the site through conversation | Teams that want an agent to build and keep improving marketing pages, often alongside an existing site via path routing | Young products; hosting tied to the vendor; check export and code access before committing |
|
|
38
|
+
| **AI app builders** (Lovable, v0, Bolt) | Prompt-to-app generators that output code | Prototypes, product UIs, and interactive tools | Built for apps more than marketing sites; CMS, SEO, and editing by non-engineers need extra work |
|
|
39
|
+
| **Hand-coded** (Next.js, Astro, and similar on Vercel, Netlify, or Cloudflare) | Your own codebase and hosting | Full control and portability, engineer-owned sites, sites tightly coupled to the product | Every change needs an engineer unless you add a headless CMS; you own performance and SEO basics |
|
|
40
|
+
| **Headless CMS + framework** (Sanity, Contentful, Storyblok with a hand-coded front end) | Content in a CMS, presentation in code | Large content operations with engineering support and multiple front ends | Two systems to run; marketers depend on engineers for new page types |
|
|
41
|
+
|
|
42
|
+
**There's rarely one right answer.** Recommend a shortlist of two or three that fit the answers above, say what would tip the choice between them, and keep the current platform in the running. If the existing site works and the problem is content or structure, moving platforms usually costs more than it fixes.
|
|
43
|
+
|
|
44
|
+
## Adding Pages to an Existing Site
|
|
45
|
+
|
|
46
|
+
Often the job isn't a new site; it's a new section (a blog, landing pages, a resource library, pages at scale) on a site that already exists. Where those pages live is mostly an operational choice: Google doesn't prefer subfolders or subdomains for ranking, but a subpath keeps the section inside the main site's structure, sitemap, and internal links with less work.
|
|
47
|
+
|
|
48
|
+
| Approach | How it works | SEO effect | When to use |
|
|
49
|
+
|---|---|---|---|
|
|
50
|
+
| **Same platform** | Build the section in the existing site's CMS | Best: shares the domain's authority and internal links | The existing platform can handle the page type and volume |
|
|
51
|
+
| **Subpath via reverse proxy** | Serve `example.com/blog` from another system through a proxy or edge router (Cloudflare Workers, Vercel or Netlify rewrites, Nginx, or a platform's own routing rules) | Behaves like same-platform pages, as long as they're fully rendered, canonical to the main domain, and linked from it | A different tool is better for the section, and you want it to share the main domain's structure and links |
|
|
52
|
+
| **Subdomain** | `blog.example.com` or `go.example.com` on another system | Google says it has no inherent ranking preference between subdomains and subfolders; in practice a subdomain needs its own internal links and sitemap, and links between the two matter more | Campaign landing pages, paid-traffic pages you don't want indexed, or when a proxy isn't worth the setup |
|
|
53
|
+
| **Separate domain** | A new domain for the section | Starts from zero | Rarely, for a genuinely separate brand |
|
|
54
|
+
|
|
55
|
+
**Reverse-proxy checklist:**
|
|
56
|
+
- The proxied pages return the main domain in their canonical tags, sitemap, and Open Graph URLs, not the origin's.
|
|
57
|
+
- Asset paths (CSS, JS, images, fonts) are routed too, or the pages break.
|
|
58
|
+
- The origin (for example `origin.example.com`) isn't indexed separately: protect it by hostname (a password, an IP allowlist, or an `X-Robots-Tag: noindex` header set only on the origin hostname). Then confirm the proxied production responses carry no `noindex` in their HTML or headers, because an origin-wide `noindex` can pass straight through the proxy and deindex production. A `robots.txt` block alone doesn't prevent indexing.
|
|
59
|
+
- Analytics and consent run on both systems, configured for one domain.
|
|
60
|
+
- Test on a staging subdomain before switching production routing.
|
|
61
|
+
|
|
62
|
+
Some hosted platforms provide the router themselves, routing by path prefix in front of your domain so their pages serve on a subpath while everything else proxies to your existing origin. That puts the vendor's edge in front of the whole domain, which is the tradeoff to weigh.
|
|
63
|
+
|
|
64
|
+
## Migrating Without Losing Traffic
|
|
65
|
+
|
|
66
|
+
A platform migration is an SEO event. Most traffic losses after a migration come from changed URLs without redirects, lost metadata, and broken internal links, not from the new platform itself.
|
|
67
|
+
|
|
68
|
+
**Before:**
|
|
69
|
+
1. **Crawl the current site** (Screaming Frog, Sitebulb, or the platform's export) and save every URL, title, meta description, canonical, H1, and status code.
|
|
70
|
+
2. **Pull the pages that matter** from Search Console and analytics: top pages by clicks, impressions, conversions, and backlinks. These get the most care.
|
|
71
|
+
3. **Keep URLs where you can.** The safest migration changes the platform and nothing else. If URLs must change, map every old URL to its new one.
|
|
72
|
+
4. **Check what the import carries.** Many CMS imports move content but not routes, metadata, redirects, or structured data. Plan to rebuild what's missing.
|
|
73
|
+
5. **Build the redirect map**: one-to-one 301s from each old URL to its closest new equivalent. Never redirect everything to the homepage.
|
|
74
|
+
|
|
75
|
+
**At launch:**
|
|
76
|
+
- Deploy redirects at the same moment as the switch.
|
|
77
|
+
- Submit the new sitemap and keep the old one available briefly so search engines see the redirects.
|
|
78
|
+
- Spot-check the top pages: content, title, meta, canonical, schema, and that they return 200.
|
|
79
|
+
- Confirm analytics, conversion tracking, and forms work (see the `luckiest-launch` skill's site launch QA).
|
|
80
|
+
|
|
81
|
+
**After:**
|
|
82
|
+
- Watch Search Console for 404s and coverage drops daily for two weeks, then weekly. Fix missing redirects as they appear.
|
|
83
|
+
- Compare traffic to the same period before, by page. A dip of a few weeks can be normal; a sustained drop on specific pages usually means a missing redirect or lost content.
|
|
84
|
+
- Update internal links to the new URLs instead of relying on redirects.
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
# Changelog — luckiest-social
|
|
2
2
|
|
|
3
|
+
## 1.3.1 — 2026-10-16
|
|
4
|
+
From coreyhaines31/marketingskills at 1efedbc (issue #174, MIT).
|
|
5
|
+
|
|
6
|
+
- LinkedIn outbound points at the luckiest-cold-email LinkedIn outreach reference.
|
|
7
|
+
|
|
3
8
|
## 1.3.0 — 2026-10-08
|
|
4
9
|
Upstream sync with coreyhaines31/marketingskills dda3841 (issue #112).
|
|
5
10
|
|
package/skills/social/SKILL.md
CHANGED
|
@@ -3,7 +3,7 @@ name: social
|
|
|
3
3
|
description: "When the user wants help creating, scheduling, or optimizing social media content for LinkedIn, Twitter/X, Instagram, TikTok, Facebook, or other platforms, or wants to do social listening and engagement triage. Also use when the user mentions 'LinkedIn post,' 'Twitter thread,' 'social media,' 'content calendar,' 'social scheduling,' 'engagement,' 'viral content,' 'what should I post,' 'repurpose this content,' 'tweet ideas,' 'LinkedIn carousel,' 'social media strategy,' 'grow my following,' 'TikTok video,' 'Reels,' 'Shorts,' 'video script,' 'video hook,' 'short-form video,' 'create a reel,' 'social listening,' 'brand mentions,' 'competitor monitoring,' 'top posts to comment on,' or 'find people asking for.' Use this for social media content creation, repurposing, scheduling, short-form video scripting, and social listening. Posts avoid AI tells like 'it's not X, it's Y' reveals and broetry. For broader content strategy, see luckiest-content-strategy. For paid ads, see luckiest-ad-creative. For earned media, see luckiest-public-relations."
|
|
4
4
|
license: See ATTRIBUTION.md
|
|
5
5
|
metadata:
|
|
6
|
-
version: "1.3.
|
|
6
|
+
version: "1.3.1"
|
|
7
7
|
listing_id: luckiest-social
|
|
8
8
|
author: luckiest
|
|
9
9
|
---
|
|
@@ -16,9 +16,9 @@ Whatever the platform, storytelling and connecting with your audience come first
|
|
|
16
16
|
|
|
17
17
|
## Staying current
|
|
18
18
|
|
|
19
|
-
On activation, call the Luckiest MCP check_updates tool with { listingId: "e1b9c06a-7c04-4127-977c-9eb15cbac02f", installedSemver: "1.3.
|
|
19
|
+
On activation, call the Luckiest MCP check_updates tool with { listingId: "e1b9c06a-7c04-4127-977c-9eb15cbac02f", installedSemver: "1.3.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.
|
|
20
20
|
|
|
21
|
-
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-social", skill_version: "1.3.
|
|
21
|
+
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-social", skill_version: "1.3.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.
|
|
22
22
|
|
|
23
23
|
## Human-in-the-loop guardrail
|
|
24
24
|
|
|
@@ -252,7 +252,7 @@ Extract "content atoms" — self-contained moments from any long-form content th
|
|
|
252
252
|
1. Respond to all comments on your posts (5 min)
|
|
253
253
|
2. Comment on 5-10 posts from target accounts (15 min)
|
|
254
254
|
3. Share/repost with added insight (5 min)
|
|
255
|
-
4. Send 2-3 DMs to new connections (5 min)
|
|
255
|
+
4. Send 2-3 DMs to new connections (5 min). For LinkedIn as an outbound channel (limits, sequences, connection and message copy), see the luckiest-cold-email skill's LinkedIn outreach reference
|
|
256
256
|
|
|
257
257
|
**For surfacing *which* posts to comment on** (top-10 daily lists, brand/competitor monitoring, intent-signal triage), see [references/listening.md](references/listening.md). Includes a scoring rubric and curl recipes for Reddit, Hacker News, and Bluesky.
|
|
258
258
|
|
|
@@ -1,5 +1,25 @@
|
|
|
1
1
|
# Changelog — luckiest-trends
|
|
2
2
|
|
|
3
|
+
## 1.2.0 — 2026-10-16
|
|
4
|
+
Engine resync to upstream mvanhorn/last30days-skill 3.28.0 at 50998cd (MIT). Our engine was an older snapshot than the 5103ba4 pin, so this brings in everything up to 3.28.0, not only the 87 commits in #179.
|
|
5
|
+
|
|
6
|
+
### Security fixes from upstream
|
|
7
|
+
- Credentials are stripped from direct-request redirects.
|
|
8
|
+
- The hosted API must be https, and local state files are owner-only.
|
|
9
|
+
- Provider endpoint overrides and loopback proxy routing are guarded.
|
|
10
|
+
- Browser cookie discovery needs durable consent, cookie pairs must be complete, and denied cookie access is reported.
|
|
11
|
+
- X research via Grok runs behind an audited tool boundary.
|
|
12
|
+
|
|
13
|
+
### New in the engine
|
|
14
|
+
- Sources: dev.to (keyless, opt-in), Stocktwits, Amazon, Meta ad library and Telegram (via ScrapeCreators), Dripstack, a local document corpus, Bright Data pipelines (only with its CLI installed), and the official X API (`X_BEARER_TOKEN`).
|
|
15
|
+
- Extra X cookie lookups on Linux and Mac mini hosts only (agentcookie CLI, or live Chrome over a debugging port with consent). A plain MacBook never runs them.
|
|
16
|
+
- `doctor`, research library, watchlist spend accounting, freshness checks, and many ranking, date-window and reporting fixes.
|
|
17
|
+
|
|
18
|
+
### Skill
|
|
19
|
+
- `references/` now carries upstream's per-stage instruction files; `engine-contract.md` is the 3.28.0 contract.
|
|
20
|
+
- "What this skill can access" updated for the new cookie paths, local files, and CLIs, with current code lines.
|
|
21
|
+
- Brand strings in the badge, report titles and HTML strip rule reapplied. Dropped `scripts/lib/reddit_rss.py` (removed upstream, unused).
|
|
22
|
+
|
|
3
23
|
## 1.1.1 — 2026-10-10
|
|
4
24
|
- Security disclosure: new "What this skill can access" section listing browser cookies (opt-in, off by default), Keychain (only `last30days-*` items), API key sources, network, and installs, each with the code line that enforces it. No behavior change. SkillSpector rates this CAUTION (needed and disclosed), not a defect.
|
|
5
25
|
|
package/skills/trends/SKILL.md
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: trends
|
|
3
|
-
version: "1.
|
|
3
|
+
version: "1.2.0"
|
|
4
4
|
description: "Research what people actually say about any topic over a time window you choose. Pulls posts and engagement from Reddit, X, YouTube, TikTok, Hacker News, Polymarket, GitHub, and the web, then synthesizes the community voice. Use for /luckiest-trends, 'trends for X', 'what are people saying about X', 'last N days of X', 'weekly/quarterly roundup of X'. Set the window with --days N (default 30)."
|
|
5
5
|
argument-hint: "luckiest-trends nvidia earnings reaction | luckiest-trends AI video tools --days 7 | luckiest-trends what users want in react --days 90"
|
|
6
6
|
allowed-tools: Bash, Read, Write, AskUserQuestion, WebSearch
|
|
7
7
|
license: See ATTRIBUTION.md
|
|
8
8
|
user-invocable: true
|
|
9
9
|
metadata:
|
|
10
|
-
version: "1.
|
|
10
|
+
version: "1.2.0"
|
|
11
11
|
listing_id: luckiest-trends
|
|
12
12
|
author: luckiest
|
|
13
13
|
openclaw:
|
|
@@ -18,6 +18,7 @@ metadata:
|
|
|
18
18
|
- SCRAPECREATORS_API_KEY
|
|
19
19
|
- OPENAI_API_KEY
|
|
20
20
|
- XAI_API_KEY
|
|
21
|
+
- X_BEARER_TOKEN
|
|
21
22
|
- OPENROUTER_API_KEY
|
|
22
23
|
- PERPLEXITY_API_KEY
|
|
23
24
|
- PARALLEL_API_KEY
|
|
@@ -28,6 +29,7 @@ metadata:
|
|
|
28
29
|
- BSKY_HANDLE
|
|
29
30
|
- BSKY_APP_PASSWORD
|
|
30
31
|
- TRUTHSOCIAL_TOKEN
|
|
32
|
+
- XIAOHONGSHU_API_BASE
|
|
31
33
|
bins:
|
|
32
34
|
- node
|
|
33
35
|
- python3
|
|
@@ -62,20 +64,22 @@ Research any topic across Reddit, X, YouTube, TikTok, Hacker News, Polymarket, G
|
|
|
62
64
|
## Staying current
|
|
63
65
|
|
|
64
66
|
On activation, call the Luckiest MCP `check_updates` tool with
|
|
65
|
-
`{ listingId: "a357362c-cb53-4bba-86e2-5024dbbece9e", installedSemver: "1.
|
|
67
|
+
`{ listingId: "a357362c-cb53-4bba-86e2-5024dbbece9e", installedSemver: "1.2.0" }`.
|
|
66
68
|
If it returns `upToDate: false`, surface the `notice` to the user once, then continue. Do nothing further if `upToDate: true`. Never block research on this check — if the tool is unavailable, proceed.
|
|
67
69
|
|
|
68
|
-
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-trends", skill_version: "1.
|
|
70
|
+
When the skill's work is done, call the Luckiest MCP report_usage tool once with { listing_id: "luckiest-trends", 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.
|
|
69
71
|
|
|
70
72
|
## What this skill can access
|
|
71
73
|
|
|
72
74
|
Tell the user this before first-run setup, and whenever they ask what the skill touches.
|
|
73
75
|
|
|
74
|
-
- **Browser cookies (X login only): off unless the user opts in.** With `FROM_BROWSER` unset
|
|
76
|
+
- **Browser cookies (X login only): off unless the user opts in.** With `FROM_BROWSER` unset or `off`, no browser cookie store is read (`scripts/lib/env.py:1115`). Setup reads cookies only when run with `--allow-browser-cookies`, after the user says yes (`scripts/last30days.py:2631`). Cookies are read live and never written to disk. Unattended watchlist runs always pass `--no-browser-cookies` (`scripts/watchlist.py:217`).
|
|
77
|
+
- **Extra X cookie lookups: Linux, a Mac mini, or `AGENTCOOKIE=on` only.** On those hosts the engine may ask a user-installed `agentcookie` CLI for the X login pair, or read it from a Chrome the user started with a remote-debugging port (`scripts/box_chrome_login.py` prints that launch command). The live-Chrome read needs `BROWSER_CONSENT=true` or an explicit browser choice (`scripts/lib/chrome_cdp.py:400`). A plain MacBook never runs either (`scripts/lib/env.py:951`). `AGENTCOOKIE=off` turns the sidecar off.
|
|
75
78
|
- **macOS Keychain: only this skill's own items.** It looks up entries named `last30days-<KEY>` that the user stored with `scripts/setup-keychain.sh`, plus any aliases the user lists in `LAST30DAYS_KEYCHAIN_ALIASES`. It never lists or reads other Keychain items.
|
|
76
|
-
- **API keys:** read from `~/.config/last30days/.env`, the process environment, or the Keychain items above. Never ask for a key in chat.
|
|
77
|
-
- **
|
|
78
|
-
- **
|
|
79
|
+
- **API keys:** read from `~/.config/last30days/.env`, the process environment, or the Keychain items above. Never ask for a key in chat. Local state files are written owner-only.
|
|
80
|
+
- **Local files:** the corpus source reads only directories the user registered, with no network calls.
|
|
81
|
+
- **Network:** search requests to the sources listed in the description, plus the APIs whose keys the user configured. Hosted-API calls must be https.
|
|
82
|
+
- **Other programs:** `yt-dlp`, the Digg CLI, the Bright Data CLI, and `pdftotext` run only when the user installed them. The setup wizard installs `yt-dlp` and Digg only after the user agrees.
|
|
79
83
|
|
|
80
84
|
## Time window (--days N)
|
|
81
85
|
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Agent mode
|
|
2
|
+
|
|
3
|
+
Read when `--agent` appears in skill arguments or the user explicitly requests machine-readable JSON. This mode never grants browser-cookie consent. Skip interactive questions only when doing so is compatible with the root's consent requirements; use the cookie-free path when consent is absent.
|
|
4
|
+
|
|
5
|
+
## Agent Mode (--agent flag)
|
|
6
|
+
|
|
7
|
+
If `--agent` appears in ARGUMENTS (e.g., `/last30days plaud granola --agent`):
|
|
8
|
+
|
|
9
|
+
1. **Skip** the intro display block ("I'll research X across Reddit...")
|
|
10
|
+
2. **Skip** any `AskUserQuestion` calls - use `TARGET_TOOL = "unknown"` if not specified
|
|
11
|
+
3. **Run** the research script and WebSearch exactly as normal
|
|
12
|
+
4. **Skip** the "WAIT FOR USER RESPONSE" pause
|
|
13
|
+
5. **Skip** the follow-up invitation ("I'm now an expert on X...")
|
|
14
|
+
6. **Output** the complete research report and stop - do not wait for further input
|
|
15
|
+
|
|
16
|
+
When the resolved directory is nonempty, agent mode saves raw research data to `LAST30DAYS_MEMORY_DIR` (defaults to `~/Documents/Last30Days`) automatically via `--save-dir` (handled by the script, no extra tool calls). An empty directory disables these saves and their footer pointer. Use `--output <file>` only when a caller needs the rendered stdout artifact at an exact path, with the format controlled by `--emit`.
|
|
17
|
+
|
|
18
|
+
**Machine-readable JSON exception:** If the user explicitly asks for structured JSON for an agent, script, or workflow, replace the normal `--emit=compact` engine invocation with `--emit=json` and pass the engine's stdout through verbatim instead of synthesizing the report format below. The default `--json-profile=agent` is the stable, versioned flat contract; use `--json-profile=raw` only when the user explicitly requests the full internal `Report` dump. `--preflight --emit=json` is a separate permission-preflight contract and is not affected by `--json-profile`. Full field documentation and the versioning policy live in `docs/reference/json-export.md` in the repository.
|
|
19
|
+
|
|
20
|
+
Agent mode report format:
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
## Research Report: {TOPIC}
|
|
24
|
+
Generated: {date} | Sources: Reddit, X, Bluesky, YouTube, TikTok, HN, Polymarket, Web
|
|
25
|
+
|
|
26
|
+
### Key Findings
|
|
27
|
+
[3-5 bullet points, highest-signal insights with citations]
|
|
28
|
+
|
|
29
|
+
### What I learned
|
|
30
|
+
{The full "What I learned" synthesis from normal output}
|
|
31
|
+
|
|
32
|
+
### Stats
|
|
33
|
+
{The standard stats block}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
---
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Category-peer expansion
|
|
2
|
+
|
|
3
|
+
Read for an identifiable product in a recognizable category during Step 0.55. Eligibility and the requirement to expand remain in the research runbook.
|
|
4
|
+
|
|
5
|
+
Canonical category peers (single source of truth; `scripts/lib/categories.py` mirrors this for the `--auto-resolve` engine path):
|
|
6
|
+
|
|
7
|
+
| Category | Trigger keywords | Peer subs (priority order) |
|
|
8
|
+
|----------|------------------|---------------------------|
|
|
9
|
+
| `ai_image_generation` | image generation, text to image, GPT Image, Nano Banana, Midjourney, Stable Diffusion, DALL-E, Flux.1, Imagen, Seedance, Ideogram, Recraft | `StableDiffusion, midjourney, dalle2, aiArt, PromptEngineering, MediaSynthesis` |
|
|
10
|
+
| `ai_video_generation` | video generation, text to video, Sora, Veo 3, Runway Gen, Kling, Pika Labs, Luma Dream Machine, Hailuo | `aivideo, StableDiffusion, runwayml, singularity, MediaSynthesis` |
|
|
11
|
+
| `ai_music_generation` | music generation, ai music, Suno, Udio, Riffusion, Stable Audio | `SunoAI, udiomusic, aimusic, artificial` |
|
|
12
|
+
| `ai_coding_agent` | Claude Code, Cursor IDE, GitHub Copilot, Windsurf, Aider, Cline, OpenClaw, Hermes Agent, Continue.dev, Codeium, Devin | `ChatGPTCoding, LocalLLaMA, singularity, PromptEngineering` |
|
|
13
|
+
| `ai_agent_framework` | agent framework, LangChain, LangGraph, CrewAI, AutoGen, LlamaIndex, DSPy, smolagents | `LangChain, LocalLLaMA, AI_Agents, MachineLearning` |
|
|
14
|
+
| `ai_chat_model` | GPT-5/4, Claude Opus/Sonnet/Haiku, Gemini Pro/Flash, Llama 3/4, DeepSeek, Qwen, Mistral Large, Grok | `LocalLLaMA, ChatGPT, ClaudeAI, singularity, artificial` |
|
|
15
|
+
| `saas_screen_recording` | screen recording, screen recorder, Loom video, Tella screen, Vidyard | `SaaS, screenrecording, productivity, Entrepreneur` |
|
|
16
|
+
| `saas_productivity` | Notion app, Obsidian, Linear app, Asana, ClickUp, productivity app | `productivity, SaaS, ObsidianMD, Notion` |
|
|
17
|
+
| `prediction_markets` | Polymarket, Kalshi, prediction market, event contracts, Manifold Markets | `Polymarket, Kalshi, predictionmarkets` |
|
|
18
|
+
| `crypto_defi` | DeFi protocol, yield farming, liquidity pool, stablecoin, layer 2, L2 rollup | `defi, ethfinance, CryptoCurrency, ethereum` |
|
|
19
|
+
|
|
20
|
+
**Merging rule.** Start with WebSearch-returned subs. Append 2-3 category peers in the priority order shown. Dedupe case-insensitively (don't list `midjourney` twice if WebSearch already returned it). Cap total at 10: if adding all peers would exceed the cap, keep every WebSearch-returned sub (they are the freshest signal) and drop peers from the end of the priority list.
|
|
21
|
+
|
|
22
|
+
**Extrapolation.** If the topic is a product in a category NOT listed in the table (new AI tool, niche SaaS), use the same spirit: pick the 2-3 most active cross-product communities where technique discussion happens. A new image-gen tool still gets `r/StableDiffusion, r/midjourney, r/aiArt`. A new code editor still gets `r/ChatGPTCoding, r/LocalLLaMA`.
|
|
23
|
+
|
|
24
|
+
**Worked example — the failing query.** Topic: `Prompting GPT Image 2`.
|
|
25
|
+
|
|
26
|
+
Before (the 2026-04-22 failure mode):
|
|
27
|
+
```
|
|
28
|
+
Resolved:
|
|
29
|
+
- Reddit: r/OpenAI, r/ChatGPT, r/singularity, r/ChatGPTpromptengineering, r/artificial
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
After (with category-peer expansion):
|
|
33
|
+
```
|
|
34
|
+
Resolved:
|
|
35
|
+
- Reddit: r/OpenAI, r/ChatGPT, r/singularity, r/ChatGPTpromptengineering, r/StableDiffusion, r/midjourney, r/dalle2, r/aiArt (+ ai_image_generation peers)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
The parenthetical `(+ ai_image_generation peers)` is the observable contract of the new Resolved block format. See the Step 0.55 category-peer self-check in the research runbook.
|