@opendirectory.dev/skills 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (212) hide show
  1. package/.claude/skills/claude-md-generator/.env.example +7 -0
  2. package/.claude/skills/claude-md-generator/README.md +78 -0
  3. package/.claude/skills/claude-md-generator/SKILL.md +248 -0
  4. package/.claude/skills/claude-md-generator/evals/evals.json +35 -0
  5. package/.claude/skills/claude-md-generator/references/section-guide.md +175 -0
  6. package/dist/e2e.test.d.ts +1 -0
  7. package/dist/e2e.test.js +62 -0
  8. package/dist/fs-adapters.d.ts +4 -0
  9. package/dist/fs-adapters.js +101 -0
  10. package/dist/fs-adapters.test.d.ts +1 -0
  11. package/dist/fs-adapters.test.js +108 -0
  12. package/dist/index.d.ts +2 -0
  13. package/dist/index.js +211 -0
  14. package/dist/transformers.d.ts +6 -0
  15. package/dist/transformers.js +2 -0
  16. package/package.json +25 -0
  17. package/registry.json +226 -0
  18. package/skills/blog-cover-image-cli/.github/workflows/publish.yml +19 -0
  19. package/skills/blog-cover-image-cli/LICENSE +15 -0
  20. package/skills/blog-cover-image-cli/README.md +126 -0
  21. package/skills/blog-cover-image-cli/SKILL.md +7 -0
  22. package/skills/blog-cover-image-cli/agent-skill/blog-cover-generator/README.md +30 -0
  23. package/skills/blog-cover-image-cli/agent-skill/blog-cover-generator/SKILL.md +72 -0
  24. package/skills/blog-cover-image-cli/bin/cli.js +226 -0
  25. package/skills/blog-cover-image-cli/examples/100x_UX_Research_AI_Agent.png +0 -0
  26. package/skills/blog-cover-image-cli/examples/Firecrawl-supabase-bolt.png +0 -0
  27. package/skills/blog-cover-image-cli/examples/Git-City_Case_study_Cover_Image.jpg +0 -0
  28. package/skills/blog-cover-image-cli/examples/THE DISTRIBUTION LAYER (2).png +0 -0
  29. package/skills/blog-cover-image-cli/examples/canva-perplexity-duolingo-cover-image.png +0 -0
  30. package/skills/blog-cover-image-cli/examples/gamma-mistral-veed.png +0 -0
  31. package/skills/blog-cover-image-cli/examples/server-survival-case-study-cover-image(1).png +0 -0
  32. package/skills/blog-cover-image-cli/examples/viral-meme-automation.png +0 -0
  33. package/skills/blog-cover-image-cli/index.js +2 -0
  34. package/skills/blog-cover-image-cli/package-lock.json +2238 -0
  35. package/skills/blog-cover-image-cli/package.json +37 -0
  36. package/skills/blog-cover-image-cli/src/geminiGenerator.js +126 -0
  37. package/skills/blog-cover-image-cli/src/imageValidator.js +54 -0
  38. package/skills/blog-cover-image-cli/src/logoFetcher.js +86 -0
  39. package/skills/claude-md-generator/.env.example +7 -0
  40. package/skills/claude-md-generator/README.md +78 -0
  41. package/skills/claude-md-generator/SKILL.md +254 -0
  42. package/skills/claude-md-generator/evals/evals.json +35 -0
  43. package/skills/claude-md-generator/references/section-guide.md +175 -0
  44. package/skills/cook-the-blog/README.md +86 -0
  45. package/skills/cook-the-blog/SKILL.md +130 -0
  46. package/skills/dependency-update-bot/.env.example +13 -0
  47. package/skills/dependency-update-bot/README.md +101 -0
  48. package/skills/dependency-update-bot/SKILL.md +376 -0
  49. package/skills/dependency-update-bot/evals/evals.json +45 -0
  50. package/skills/dependency-update-bot/references/changelog-patterns.md +201 -0
  51. package/skills/docs-from-code/.env.example +13 -0
  52. package/skills/docs-from-code/README.md +97 -0
  53. package/skills/docs-from-code/SKILL.md +160 -0
  54. package/skills/docs-from-code/evals/evals.json +29 -0
  55. package/skills/docs-from-code/references/extraction-guide.md +174 -0
  56. package/skills/docs-from-code/references/output-template.md +135 -0
  57. package/skills/docs-from-code/scripts/extract_py.py +238 -0
  58. package/skills/docs-from-code/scripts/extract_ts.ts +284 -0
  59. package/skills/docs-from-code/scripts/package.json +18 -0
  60. package/skills/explain-this-pr/README.md +74 -0
  61. package/skills/explain-this-pr/SKILL.md +130 -0
  62. package/skills/explain-this-pr/evals/evals.json +35 -0
  63. package/skills/google-trends-api-skills/README.md +78 -0
  64. package/skills/google-trends-api-skills/SKILL.md +7 -0
  65. package/skills/google-trends-api-skills/google-trends-api/SKILL.md +163 -0
  66. package/skills/google-trends-api-skills/google-trends-api/references/api-responses.md +188 -0
  67. package/skills/google-trends-api-skills/google-trends-api/scripts/discover_keywords.py +344 -0
  68. package/skills/google-trends-api-skills/seo-keyword-research/SKILL.md +205 -0
  69. package/skills/google-trends-api-skills/seo-keyword-research/references/keyword-placement-guide.md +89 -0
  70. package/skills/google-trends-api-skills/seo-keyword-research/references/tech-blog-examples.md +207 -0
  71. package/skills/google-trends-api-skills/seo-keyword-research/scripts/blog_seo_research.py +373 -0
  72. package/skills/hackernews-intel/.env.example +33 -0
  73. package/skills/hackernews-intel/README.md +161 -0
  74. package/skills/hackernews-intel/SKILL.md +156 -0
  75. package/skills/hackernews-intel/evals/evals.json +35 -0
  76. package/skills/hackernews-intel/package.json +15 -0
  77. package/skills/hackernews-intel/scripts/monitor-hn.js +258 -0
  78. package/skills/kill-the-standup/.env.example +22 -0
  79. package/skills/kill-the-standup/README.md +84 -0
  80. package/skills/kill-the-standup/SKILL.md +169 -0
  81. package/skills/kill-the-standup/evals/evals.json +35 -0
  82. package/skills/kill-the-standup/references/standup-format.md +102 -0
  83. package/skills/linkedin-post-generator/.env.example +14 -0
  84. package/skills/linkedin-post-generator/README.md +107 -0
  85. package/skills/linkedin-post-generator/SKILL.md +228 -0
  86. package/skills/linkedin-post-generator/evals/evals.json +35 -0
  87. package/skills/linkedin-post-generator/references/linkedin-format.md +216 -0
  88. package/skills/linkedin-post-generator/references/output-template.md +154 -0
  89. package/skills/llms-txt-generator/.env.example +18 -0
  90. package/skills/llms-txt-generator/README.md +142 -0
  91. package/skills/llms-txt-generator/SKILL.md +176 -0
  92. package/skills/llms-txt-generator/evals/evals.json +35 -0
  93. package/skills/llms-txt-generator/references/llms-txt-spec.md +88 -0
  94. package/skills/llms-txt-generator/references/output-template.md +76 -0
  95. package/skills/llms-txt-generator/test-output/genzcareer.in/llms.txt +31 -0
  96. package/skills/luma-attendees-scraper/README.md +170 -0
  97. package/skills/luma-attendees-scraper/SKILL.md +7 -0
  98. package/skills/luma-attendees-scraper/luma_attendees_export.js +223 -0
  99. package/skills/meeting-brief-generator/.env.example +21 -0
  100. package/skills/meeting-brief-generator/README.md +90 -0
  101. package/skills/meeting-brief-generator/SKILL.md +275 -0
  102. package/skills/meeting-brief-generator/evals/evals.json +35 -0
  103. package/skills/meeting-brief-generator/references/brief-format.md +114 -0
  104. package/skills/meeting-brief-generator/references/output-template.md +150 -0
  105. package/skills/meta-ads-skill/README.md +100 -0
  106. package/skills/meta-ads-skill/SKILL.md +7 -0
  107. package/skills/meta-ads-skill/meta-ads-skill/SKILL.md +41 -0
  108. package/skills/meta-ads-skill/meta-ads-skill/references/report_templates.md +47 -0
  109. package/skills/meta-ads-skill/meta-ads-skill/references/workflows.md +51 -0
  110. package/skills/meta-ads-skill/meta-ads-skill/scripts/auth_check.py +22 -0
  111. package/skills/meta-ads-skill/meta-ads-skill/scripts/formatters.py +46 -0
  112. package/skills/newsletter-digest/.env.example +20 -0
  113. package/skills/newsletter-digest/README.md +147 -0
  114. package/skills/newsletter-digest/SKILL.md +221 -0
  115. package/skills/newsletter-digest/evals/evals.json +35 -0
  116. package/skills/newsletter-digest/feeds.json +7 -0
  117. package/skills/newsletter-digest/package.json +15 -0
  118. package/skills/newsletter-digest/references/digest-format.md +123 -0
  119. package/skills/newsletter-digest/references/output-template.md +136 -0
  120. package/skills/newsletter-digest/scripts/fetch-feeds.js +141 -0
  121. package/skills/newsletter-digest/scripts/ghost-publish.js +147 -0
  122. package/skills/noise2blog/.env.example +16 -0
  123. package/skills/noise2blog/README.md +107 -0
  124. package/skills/noise2blog/SKILL.md +229 -0
  125. package/skills/noise2blog/evals/evals.json +35 -0
  126. package/skills/noise2blog/references/blog-format.md +188 -0
  127. package/skills/noise2blog/references/output-template.md +184 -0
  128. package/skills/outreach-sequence-builder/.env.example +12 -0
  129. package/skills/outreach-sequence-builder/README.md +108 -0
  130. package/skills/outreach-sequence-builder/SKILL.md +248 -0
  131. package/skills/outreach-sequence-builder/evals/evals.json +36 -0
  132. package/skills/outreach-sequence-builder/references/output-template.md +171 -0
  133. package/skills/outreach-sequence-builder/references/sequence-format.md +167 -0
  134. package/skills/outreach-sequence-builder/references/signal-playbook.md +117 -0
  135. package/skills/position-me/README.md +71 -0
  136. package/skills/position-me/SKILL.md +7 -0
  137. package/skills/position-me/position-me/SKILL.md +50 -0
  138. package/skills/position-me/position-me/references/EVALUATION_SOP.md +40 -0
  139. package/skills/position-me/position-me/references/REPORT_TEMPLATE.md +58 -0
  140. package/skills/position-me/position-me/scripts/extract_links.py +49 -0
  141. package/skills/pr-description-writer/README.md +81 -0
  142. package/skills/pr-description-writer/SKILL.md +141 -0
  143. package/skills/pr-description-writer/evals/evals.json +35 -0
  144. package/skills/pr-description-writer/references/pr-format-guide.md +145 -0
  145. package/skills/producthunt-launch-kit/.env.example +7 -0
  146. package/skills/producthunt-launch-kit/README.md +95 -0
  147. package/skills/producthunt-launch-kit/SKILL.md +380 -0
  148. package/skills/producthunt-launch-kit/evals/evals.json +35 -0
  149. package/skills/producthunt-launch-kit/references/copy-rules.md +124 -0
  150. package/skills/reddit-icp-monitor/.env.example +16 -0
  151. package/skills/reddit-icp-monitor/README.md +117 -0
  152. package/skills/reddit-icp-monitor/SKILL.md +271 -0
  153. package/skills/reddit-icp-monitor/evals/evals.json +40 -0
  154. package/skills/reddit-icp-monitor/references/icp-format.md +131 -0
  155. package/skills/reddit-icp-monitor/references/reply-rules.md +110 -0
  156. package/skills/reddit-post-engine/.env.example +13 -0
  157. package/skills/reddit-post-engine/README.md +103 -0
  158. package/skills/reddit-post-engine/SKILL.md +303 -0
  159. package/skills/reddit-post-engine/evals/evals.json +35 -0
  160. package/skills/reddit-post-engine/references/subreddit-playbook.md +156 -0
  161. package/skills/schema-markup-generator/.env.example +19 -0
  162. package/skills/schema-markup-generator/README.md +114 -0
  163. package/skills/schema-markup-generator/SKILL.md +192 -0
  164. package/skills/schema-markup-generator/evals/evals.json +35 -0
  165. package/skills/schema-markup-generator/references/json-ld-spec.md +263 -0
  166. package/skills/schema-markup-generator/references/output-template.md +556 -0
  167. package/skills/show-hn-writer/.env.example +14 -0
  168. package/skills/show-hn-writer/README.md +88 -0
  169. package/skills/show-hn-writer/SKILL.md +303 -0
  170. package/skills/show-hn-writer/evals/evals.json +35 -0
  171. package/skills/show-hn-writer/references/hn-rules.md +74 -0
  172. package/skills/show-hn-writer/references/title-formulas.md +93 -0
  173. package/skills/stargazer/README.md +79 -0
  174. package/skills/stargazer/SKILL.md +7 -0
  175. package/skills/stargazer/stargazer-skill/SKILL.md +58 -0
  176. package/skills/stargazer/stargazer-skill/assets/.env.example +18 -0
  177. package/skills/stargazer/stargazer-skill/scripts/convert_to_csv.py +63 -0
  178. package/skills/stargazer/stargazer-skill/scripts/count_emails.py +52 -0
  179. package/skills/stargazer/stargazer-skill/scripts/stargazer_deep_extractor.py +450 -0
  180. package/skills/tweet-thread-from-blog/.env.example +14 -0
  181. package/skills/tweet-thread-from-blog/README.md +109 -0
  182. package/skills/tweet-thread-from-blog/SKILL.md +177 -0
  183. package/skills/tweet-thread-from-blog/evals/evals.json +35 -0
  184. package/skills/tweet-thread-from-blog/references/output-template.md +193 -0
  185. package/skills/tweet-thread-from-blog/references/thread-format.md +107 -0
  186. package/skills/twitter-GTM-find-skill/README.md +43 -0
  187. package/skills/twitter-GTM-find-skill/SKILL.md +7 -0
  188. package/skills/twitter-GTM-find-skill/twitter-GTM-find/SKILL.md +37 -0
  189. package/skills/twitter-GTM-find-skill/twitter-GTM-find/references/icp-checklist.md +35 -0
  190. package/skills/twitter-GTM-find-skill/twitter-GTM-find/scripts/package.json +23 -0
  191. package/skills/twitter-GTM-find-skill/twitter-GTM-find/scripts/run_pipeline.sh +8 -0
  192. package/skills/twitter-GTM-find-skill/twitter-GTM-find/scripts/src/debug.ts +23 -0
  193. package/skills/twitter-GTM-find-skill/twitter-GTM-find/scripts/src/extractor.ts +79 -0
  194. package/skills/twitter-GTM-find-skill/twitter-GTM-find/scripts/src/icp-filter.ts +87 -0
  195. package/skills/twitter-GTM-find-skill/twitter-GTM-find/scripts/src/index.ts +94 -0
  196. package/skills/twitter-GTM-find-skill/twitter-GTM-find/scripts/src/scraper.ts +41 -0
  197. package/skills/twitter-GTM-find-skill/twitter-GTM-find/scripts/tsconfig.json +13 -0
  198. package/skills/yc-intent-radar-skill/README.md +39 -0
  199. package/skills/yc-intent-radar-skill/SKILL.md +7 -0
  200. package/skills/yc-intent-radar-skill/yc-jobs-scraper/SKILL.md +59 -0
  201. package/skills/yc-intent-radar-skill/yc-jobs-scraper/scripts/auth.js +29 -0
  202. package/skills/yc-intent-radar-skill/yc-jobs-scraper/scripts/db.js +62 -0
  203. package/skills/yc-intent-radar-skill/yc-jobs-scraper/scripts/export_radar_candidates.js +40 -0
  204. package/skills/yc-intent-radar-skill/yc-jobs-scraper/scripts/package-lock.json +1525 -0
  205. package/skills/yc-intent-radar-skill/yc-jobs-scraper/scripts/package.json +12 -0
  206. package/skills/yc-intent-radar-skill/yc-jobs-scraper/scripts/scraper.js +217 -0
  207. package/src/e2e.test.ts +35 -0
  208. package/src/fs-adapters.test.ts +91 -0
  209. package/src/fs-adapters.ts +65 -0
  210. package/src/index.ts +182 -0
  211. package/src/transformers.ts +6 -0
  212. package/tsconfig.json +8 -0
@@ -0,0 +1,380 @@
1
+ ---
2
+ name: producthunt-launch-kit
3
+ description: ''
4
+ compatibility: [claude-code, gemini-cli, github-copilot]
5
+ author: OpenDirectory
6
+ version: 1.0.0
7
+ ---
8
+
9
+ # Product Hunt Launch Kit
10
+
11
+ Generate every asset you need for a Product Hunt launch: listing copy, maker comment, and day-one social posts.
12
+
13
+ ---
14
+
15
+ **Critical rule:** Product Hunt taglines are maximum 60 characters. Descriptions are maximum 500 characters. Never make factual claims that cannot be verified. Never mention competitor names. Never say "free" unless the product is permanently free (not just a trial).
16
+
17
+ ---
18
+
19
+ ## Step 1: Gather Product Details
20
+
21
+ You need:
22
+
23
+ - Product name
24
+ - What it does (technical description, one sentence)
25
+ - Primary use case and target user
26
+ - Key differentiator from existing tools
27
+ - Pricing: free, freemium, paid (starting price)
28
+ - Open source: yes/no
29
+ - Launch date (for scheduling context)
30
+ - Any credentials, launch discount, or promo code to offer
31
+ - 2-3 things that make it worth upvoting (honest reasons, not marketing)
32
+
33
+ If any of these are missing, ask in one message before proceeding.
34
+
35
+ Also check for project context files:
36
+
37
+ ```bash
38
+ ls README.md 2>/dev/null && echo "README found"
39
+ ls package.json 2>/dev/null && echo "package.json found"
40
+ ```
41
+
42
+ If README.md exists, read the first 80 lines to extract product description and key features before asking questions.
43
+
44
+ ---
45
+
46
+ ## Step 2: Gallery Strategy
47
+
48
+ Product Hunt requires screenshots. Most listings fail because of weak or missing gallery images. Plan these before writing copy.
49
+
50
+ **Spec:** 1270×760px, PNG or JPG, max 8 images. The first image is the hero: it appears in feeds and cards.
51
+
52
+ **Five-position framework:**
53
+
54
+ | Position | Purpose | What to show |
55
+ |----------|---------|-------------|
56
+ | 1 (Hero) | First impression in feeds | Product in use, clean UI or terminal output, no text overlays |
57
+ | 2 (Feature demo) | Show the core action | The thing that makes the product click: the "aha" moment |
58
+ | 3 (Before/After) | Show the problem being solved | Split screen: messy/slow state vs. clean/fast state |
59
+ | 4 (Social proof) | Build credibility | A real quote, a stat, or a before/after metric from a real user |
60
+ | 5 (Technical differentiator) | Address skeptics | Architecture diagram, benchmark, or the unusual technical decision |
61
+
62
+ If the product is a CLI tool or library, screenshots of terminal output work well. Annotate with arrows pointing to the important part.
63
+
64
+ **Video (optional but high-impact):** A 60-90 second demo. Under 2 minutes. No voiceover required: screen capture with captions works.
65
+
66
+ Tell the user: "Plan [N] gallery images before launch day. The hero image (position 1) is the most important. Here's what to capture for each position: [list above, customized for this product]."
67
+
68
+ ---
69
+
70
+ ## Step 3: Generate Tagline Variants
71
+
72
+ The tagline appears directly under the product name on Product Hunt. It is the most read copy on your listing.
73
+
74
+ **Hard limits:**
75
+ - Maximum 60 characters (including spaces)
76
+ - No period at the end
77
+ - No hashtags
78
+ - Do not start with the product name
79
+ - No superlatives: "best", "fastest", "easiest", "most powerful"
80
+ - No questions
81
+
82
+ **Tagline formula:** `[Action verb] + [what it does] + [key differentiator]`
83
+
84
+ Generate five tagline variants:
85
+
86
+ 1. **Outcome-first:** What the user achieves ("Ship docs without leaving your codebase")
87
+ 2. **Problem-first:** Names the pain that is solved ("No more copy-pasting between Figma and code")
88
+ 3. **Technical-angle:** For developer tools, lead with the tech ("SQLite to shareable web app in one command")
89
+ 4. **Comparison-free alternative:** Positions without naming competitors ("Git-native code review that works inside VS Code")
90
+ 5. **Plain-English:** No jargon, widest possible audience ("Turns any RSS feed into a daily email digest")
91
+
92
+ After generating, count characters for each. Flag any that exceed 60 characters and revise.
93
+
94
+ ---
95
+
96
+ ## Step 4: Write the Listing Description
97
+
98
+ The description appears below the tagline. Maximum 500 characters. It displays in search results and link previews.
99
+
100
+ **Structure:**
101
+ - Sentence 1: What it does and who it's for (specific)
102
+ - Sentence 2: The key feature or technical approach that makes it work
103
+ - Sentence 3 (optional): Pricing or availability
104
+
105
+ **Description rules:**
106
+ - 280-500 characters (shorter is fine; longer is truncated in previews)
107
+ - Present tense throughout
108
+ - No hype adjectives
109
+ - No "I": write in third person or imperative ("Turns your...", "Connects to...", not "I built...")
110
+ - No links (they do not render)
111
+ - If open source, say so: "Open source and self-hostable."
112
+
113
+ ---
114
+
115
+ ## Step 5: Write the Maker Comment
116
+
117
+ The maker comment is the most important driver of Product Hunt success. It is your first reply to your own post, posted within 60 seconds of launch.
118
+
119
+ **Hard limits:**
120
+ - 300-400 words
121
+ - Must be posted within 60 seconds of the product going live
122
+ - First-person, conversational
123
+ - Tell the origin story
124
+ - Acknowledge the obvious alternative and explain why you built this anyway
125
+ - End with a specific question to invite comments
126
+
127
+ **Structure:**
128
+
129
+ **Opening (2-3 sentences):** Why you built this. The real story: what frustrated you, what gap you noticed, what problem you kept hitting. No "I'm thrilled to announce."
130
+
131
+ **What it does (3-5 sentences):** Explain the core mechanic. What happens when someone uses it for the first time. Include one specific technical detail that shows you thought hard about the problem.
132
+
133
+ **Who it's for (2-3 sentences):** Describe the specific person who will get the most value. Not "everyone who needs X": a specific persona: "If you're a solo dev who deploys on Friday afternoons and dreads..." or "If you've ever spent 20 minutes explaining the same PR context to three different reviewers..."
134
+
135
+ **Honest caveat (1-2 sentences):** What it does NOT do. What is still rough. This builds trust and filters in the right early users.
136
+
137
+ **Call for feedback (1-2 sentences):** Ask a specific question. "We haven't figured out the right approach for [specific edge case]: would love to know how you've handled it." or "The thing I'm most unsure about is [X]: does that matter to you?"
138
+
139
+ ---
140
+
141
+ ## Step 6: Generate All Assets with Gemini
142
+
143
+ Write all assets in one Gemini call:
144
+
145
+ ```bash
146
+ cat > /tmp/ph-launch-request.json << 'ENDJSON'
147
+ {
148
+ "system_instruction": {
149
+ "parts": [{
150
+ "text": "You are writing Product Hunt launch copy. Generate all assets in sequence, clearly labeled. Rules: taglines max 60 chars, description max 500 chars, maker comment 300-400 words first-person. No marketing words: 'revolutionary', 'game-changing', 'powerful', 'robust', 'seamless', 'innovative', 'best-in-class', 'streamline'. No competitor names. No superlatives in taglines. Do not use em dashes. For social posts: tweets max 280 chars, no hashtags in tweet threads (they reduce signal quality on technical posts). LinkedIn post 150-300 words, professional but not stiff. Email sequence: 4 emails, each under 150 words, subject line under 50 chars. Output each asset with a clear header. No commentary between sections."
151
+ }]
152
+ },
153
+ "contents": [{
154
+ "parts": [{
155
+ "text": "PRODUCT_DETAILS_HERE"
156
+ }]
157
+ }],
158
+ "generationConfig": {
159
+ "temperature": 0.7,
160
+ "maxOutputTokens": 4096
161
+ }
162
+ }
163
+ ENDJSON
164
+
165
+ curl -s -X POST \
166
+ "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=$GEMINI_API_KEY" \
167
+ -H "Content-Type: application/json" \
168
+ -d @/tmp/ph-launch-request.json \
169
+ | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['candidates'][0]['content']['parts'][0]['text'])"
170
+ ```
171
+
172
+ Replace `PRODUCT_DETAILS_HERE` with all gathered context: product name, description, use case, differentiator, pricing, and any maker notes from Step 1.
173
+
174
+ Request these assets in the prompt:
175
+ 1. Five tagline variants (with character counts)
176
+ 2. Listing description (with character count)
177
+ 3. Maker comment (300-400 words)
178
+ 4. Tweet thread for launch day (5-7 tweets, 280 chars each)
179
+ 5. LinkedIn post (150-300 words)
180
+ 6. Email sequence (4 emails: existing users, newsletter, day-of reminder, follow-up)
181
+
182
+ ---
183
+
184
+ ## Step 7: Self-QA
185
+
186
+ Before presenting:
187
+
188
+ **Taglines:**
189
+ - [ ] All under 60 characters (count each)
190
+ - [ ] None start with the product name
191
+ - [ ] None contain superlatives
192
+ - [ ] None contain marketing words
193
+
194
+ **Description:**
195
+ - [ ] Under 500 characters (count)
196
+ - [ ] Third person or imperative voice (no "I")
197
+ - [ ] No links
198
+
199
+ **Maker comment:**
200
+ - [ ] 300-400 words (count)
201
+ - [ ] Opens with the real origin story (not "I'm excited to...")
202
+ - [ ] Includes one honest caveat
203
+ - [ ] Ends with a specific question
204
+ - [ ] No marketing language
205
+ - [ ] No em dashes
206
+
207
+ **Tweet thread:**
208
+ - [ ] Each tweet under 280 characters (count)
209
+ - [ ] No hashtags
210
+ - [ ] First tweet is the hook: most compelling thing about the product
211
+
212
+ If any item fails, revise before presenting. Do not present drafts with QA failures.
213
+
214
+ ---
215
+
216
+ ## Step 8: Present the Full Launch Kit
217
+
218
+ Present in this exact order:
219
+
220
+ ```
221
+ ## Product Hunt Launch Kit: [Product Name]
222
+
223
+ ---
224
+
225
+ ### Taglines (choose one)
226
+ 1. [tagline]: [char count]
227
+ 2. [tagline]: [char count]
228
+ 3. [tagline]: [char count]
229
+ 4. [tagline]: [char count]
230
+ 5. [tagline]: [char count]
231
+
232
+ **Recommendation:** [one-sentence reason to prefer tagline X]
233
+
234
+ ---
235
+
236
+ ### Listing Description
237
+ [description text]
238
+ [char count] / 500
239
+
240
+ ---
241
+
242
+ ### Maker Comment (post within 60 seconds of launch)
243
+ [maker comment text]
244
+
245
+ ---
246
+
247
+ ### Launch Day Tweets
248
+ Tweet 1/6: [text]
249
+ Tweet 2/6: [text]
250
+ ...
251
+
252
+ ---
253
+
254
+ ### LinkedIn Post
255
+ [post text]
256
+
257
+ ---
258
+
259
+ ### Email Sequence
260
+
261
+ **Email 1: Existing Users (send 1 week before)**
262
+ Subject: [subject]
263
+ [body]
264
+
265
+ **Email 2: Newsletter / Audience (send day before)**
266
+ Subject: [subject]
267
+ [body]
268
+
269
+ **Email 3: Day-of Reminder (send at 12:01 AM PST)**
270
+ Subject: [subject]
271
+ [body]
272
+
273
+ **Email 4: Follow-up (send 48 hours after launch)**
274
+ Subject: [subject]
275
+ [body]
276
+
277
+ ---
278
+
279
+ ### Self-Hunt vs. Top Hunter Decision
280
+
281
+ Answer these questions to decide:
282
+
283
+ | Question | Self-Hunt | Get a Hunter |
284
+ |----------|-----------|--------------|
285
+ | Do you have 500+ Twitter/LinkedIn followers in your target audience? | Yes | No |
286
+ | Does your product have an existing user base to rally? | Yes | No |
287
+ | Is your product technical and you have a personal brand in dev communities? | Yes | No |
288
+ | Is this your first launch with no audience yet? | No | Yes |
289
+ | Does a top hunter (500+ followers on PH) already use your product? | No | Yes |
290
+
291
+ If 3+ answers point to "Get a Hunter": reach out to hunters at least 2 weeks before launch day. Frame the ask as sharing something you built that they would genuinely want to know about: not asking for a favor.
292
+
293
+ ---
294
+
295
+ ### 30-Day Pre-Launch Preparation
296
+
297
+ **Day 30-21: Teaser Phase**
298
+ - [ ] Post a "building in public" update on Twitter/LinkedIn: what problem you are solving and why
299
+ - [ ] Identify 3-5 hunters with 500+ PH followers who match your product category
300
+ - [ ] Start building a supporter list (everyone who would upvote on launch day): team, users, investors, friends in tech
301
+ - [ ] Set up a simple "notify me on launch" page (even a TypeForm or Google Form)
302
+
303
+ **Day 20-8: Asset Phase**
304
+ - [ ] Capture all 5 gallery images at 1270×760px (see gallery strategy above)
305
+ - [ ] Record 60-90 second demo video if applicable
306
+ - [ ] Draft all copy from this kit: tagline, description, maker comment, social posts, emails
307
+ - [ ] Send Email 1 (existing users) at Day 8
308
+
309
+ **Day 7-2: Final Prep**
310
+ - [ ] Send Email 2 (newsletter) at Day 2
311
+ - [ ] Message your supporter list directly (Slack, DM, email): not a mass blast, personal messages
312
+ - [ ] Schedule tweet thread and LinkedIn post
313
+ - [ ] Do a dry run: check PH listing preview, verify all gallery images display correctly
314
+ - [ ] Confirm maker comment is under 400 words and saved somewhere you can paste instantly
315
+
316
+ **Day 1: Launch Day**
317
+ - [ ] Post goes live at 12:01 AM PST
318
+ - [ ] Send Email 3 (day-of reminder) immediately after going live
319
+ - [ ] Maker comment posted within 60 seconds of launch
320
+ - [ ] Tweet thread posted in the first 30 minutes
321
+ - [ ] LinkedIn post published
322
+ - [ ] Reply to every comment within 2 hours: PH algorithm rewards active makers
323
+ - [ ] Do not ask for upvotes directly: ask people to "check it out" or "share feedback"
324
+ - [ ] DM your supporter list with a direct link: not "go upvote" but "we just launched, would love your thoughts"
325
+ - [ ] First comment with any promo code posted within 5 minutes of launch
326
+
327
+ **Day 2: Follow-Up**
328
+ - [ ] Send Email 4 (48-hour follow-up) with results and thank-you
329
+ - [ ] Post a results update on Twitter/LinkedIn: upvotes, comments, lessons
330
+ - [ ] Reply to any overnight comments you missed
331
+
332
+ ---
333
+
334
+ ### Upvote Benchmarks
335
+
336
+ | Upvotes | Outcome |
337
+ |---------|---------|
338
+ | 50-100 | Listed but not front page |
339
+ | 200-400 | Competitive front page placement |
340
+ | 500-800 | Top 5 of the day |
341
+ | 800+ | Product of the Day |
342
+ | 1500+ | Product of the Week contender |
343
+
344
+ First-hour velocity matters more than final count. 100 upvotes in the first hour beats 400 spread over 24 hours.
345
+
346
+ ---
347
+
348
+ ### Hour-by-Hour Launch Day Timeline
349
+
350
+ | Time (PST) | Action |
351
+ |------------|--------|
352
+ | 12:01 AM | Post goes live. Do not schedule: be awake and click manually. |
353
+ | 12:02 AM | Maker comment posted (have it in clipboard, paste and submit immediately) |
354
+ | 12:05 AM | First comment (promo code or context) posted |
355
+ | 12:15 AM | Tweet thread live |
356
+ | 12:30 AM | LinkedIn post live |
357
+ | 12:30 AM | Personal DMs to your 10 most-engaged supporters |
358
+ | 1:00 AM | Check for first comments, reply to all |
359
+ | 7:00 AM | Morning US traffic peak. Check ranking. Reply to overnight comments. |
360
+ | 9:00 AM | Send Email 3 (day-of reminder) if you held it for morning send |
361
+ | 12:00 PM | Midday check. Reply to all comments. Post a "midday update" tweet if trending. |
362
+ | 5:00 PM | Evening US traffic peak. Final push to supporter list if needed. |
363
+ | 11:59 PM | Results final. Screenshot your placement. |
364
+
365
+ ---
366
+
367
+ ### Launch Checklist
368
+ - [ ] Post goes live at 12:01 AM PST on launch day (manual click, not scheduled)
369
+ - [ ] Maker comment copied to clipboard, posted within 60 seconds of launch
370
+ - [ ] Supporter list of 200+ people ready to message personally on launch day
371
+ - [ ] Gallery images and video (if any) uploaded and previewed before launch
372
+ - [ ] All 4 emails drafted and scheduled
373
+ - [ ] Reply to every comment on launch day: PH rewards active makers
374
+ - [ ] Do not ask for upvotes directly: ask people to "check it out" or "share feedback"
375
+ - [ ] First comment (with any promo code) posted within 5 minutes of launch
376
+ ```
377
+
378
+
379
+
380
+
@@ -0,0 +1,35 @@
1
+ {
2
+ "skill_name": "producthunt-launch-kit",
3
+ "evals": [
4
+ {
5
+ "id": 1,
6
+ "prompt": "Generate a Product Hunt launch kit for my product: Replyflow. It drafts personalized cold email replies using AI. Target user: sales reps who get 50+ emails a day. Freemium: free for 10 replies/month, $29/month unlimited. I'm launching next Tuesday.",
7
+ "expected_output": "Agent gathers all required context (has enough from the prompt). Generates: 5 tagline variants all under 60 characters with character counts shown, listing description under 500 characters, maker comment 300-400 words opening with origin story not 'Hi PH!', tweet thread of 5-7 tweets each under 280 characters with no hashtags, LinkedIn post 150-300 words, 4-email sequence with subject lines under 50 chars. All copy avoids marketing adjectives. Maker comment includes honest caveat and ends with specific question. Launch checklist included at end.",
8
+ "files": []
9
+ },
10
+ {
11
+ "id": 2,
12
+ "prompt": "Write my Product Hunt tagline. Product: Doppler: a secrets manager that syncs env vars across environments.",
13
+ "expected_output": "Agent generates 5 tagline variants. All are under 60 characters (agent counts each one). None start with 'Doppler'. None contain adjectives like 'powerful', 'simple', 'easy'. Each follows a different formula: outcome-first, problem-first, technical-angle, comparison-free alternative, plain-English. Agent recommends one with a one-sentence reason. All variants describe what Doppler does, not what it is.",
14
+ "files": []
15
+ },
16
+ {
17
+ "id": 3,
18
+ "prompt": "Write my maker comment for Product Hunt. My product is Raycast, a launcher app for Mac.",
19
+ "expected_output": "Agent writes maker comment that is 300-400 words. Does NOT open with 'Hi Product Hunt!' or 'Thrilled to announce'. Opens with origin story or personal motivation. Includes at least one technical detail about how it works. Identifies who should NOT use it or what it does not do. Ends with a specific question for the community. No marketing language. No em dashes. Reads like a thoughtful HN-style comment, not a press release.",
20
+ "files": []
21
+ },
22
+ {
23
+ "id": 4,
24
+ "prompt": "Generate a Product Hunt kit. My README is attached.",
25
+ "expected_output": "Agent reads README.md to extract: product name, what it does, key features, pricing, tech stack. Asks only for information not found in the README (typically: personal motivation/origin story, launch discount if any, specific launch date). Does not re-ask for information visible in the file. Generates full kit using README + user answers. All copy respects the 60/500 char limits.",
26
+ "files": ["README.md"]
27
+ },
28
+ {
29
+ "id": 5,
30
+ "prompt": "Write a Product Hunt description that says our tool is free.",
31
+ "expected_output": "Agent checks what 'free' means in context. If the product has paid tiers, flags this: 'You mentioned free: does the product have paid plans too? If so, I'll use \"Free to start\" instead of \"free\" to avoid misleading PH visitors.' If the product is genuinely permanently free, writes 'Free and open source' or similar. Never writes 'free' when the context indicates freemium. Explains the reason for the distinction.",
32
+ "files": []
33
+ }
34
+ ]
35
+ }
@@ -0,0 +1,124 @@
1
+ # Product Hunt Copy Rules
2
+
3
+ ## Tagline
4
+
5
+ **The tagline is the second thing people read after the product name.**
6
+
7
+ It appears:
8
+ - Under the product name on the listing
9
+ - In Twitter/X cards when the listing is shared
10
+ - In email digests Product Hunt sends to subscribers
11
+
12
+ **Hard constraints:**
13
+ - 60 characters maximum (enforced by PH)
14
+ - No period at the end
15
+ - Do not start with the product name (it appears just above already)
16
+ - No hashtags
17
+
18
+ **What makes a tagline work:**
19
+
20
+ It names a specific action or outcome. Not what the product IS: what it DOES.
21
+
22
+ Good:
23
+ - "Turn changelogs into product announcements" (60 chars)
24
+ - "Open source Heroku alternative built on Kubernetes" (51 chars)
25
+ - "Ship faster by keeping your docs next to your code" (52 chars)
26
+
27
+ Bad:
28
+ - "The best tool for developer productivity" (adjective, vague)
29
+ - "A powerful platform for modern teams" (filler words, no specifics)
30
+ - "Your new favorite way to manage tasks" (second-person, sounds like an ad)
31
+
32
+ **Formula:** `[Active verb] + [specific object] + [optional context or differentiator]`
33
+
34
+ Count characters before submitting. The submission form will reject anything over 60.
35
+
36
+ ---
37
+
38
+ ## Description
39
+
40
+ **The description appears below the tagline. Maximum 500 characters.**
41
+
42
+ This is your elevator pitch. It has to work in the notification email, in search results, and on the listing page.
43
+
44
+ **Structure:**
45
+ 1. What it does and who it's for (specific)
46
+ 2. Key capability or technical differentiator
47
+ 3. Pricing or availability (optional but helpful)
48
+
49
+ **Rules:**
50
+ - Third person or imperative voice
51
+ - No "I" or "we" (save that for the maker comment)
52
+ - No links (they do not render in the description field)
53
+ - No list formatting (it does not render well in all contexts)
54
+ - 280-500 characters is the ideal range
55
+ - Present tense
56
+
57
+ Good example (312 chars):
58
+ > Datasette is a tool for exploring and publishing data. It helps data journalists, scientists, and developers share SQLite databases as interactive websites. Open source. Works with any SQLite file. Deploy to any server in minutes.
59
+
60
+ Bad example:
61
+ > We built this amazing tool that will completely change how you work with data! Our powerful platform makes it easy for anyone to share data in a beautiful, seamless, innovative way!
62
+
63
+ ---
64
+
65
+ ## Maker Comment
66
+
67
+ **The maker comment is the single highest-leverage action on launch day.**
68
+
69
+ PH ranks products partly on engagement. A maker who responds to every comment in the first two hours sends a strong signal.
70
+
71
+ **Mechanics:**
72
+ - Post it as a comment on your own listing, within 60 seconds of launch
73
+ - This is not the time for polished marketing copy: write like a human
74
+ - It will be the first comment on the listing
75
+
76
+ **What the comment should contain:**
77
+
78
+ 1. Why you built it (the honest version, not the press release version)
79
+ 2. The core mechanic: what happens when someone uses it
80
+ 3. A specific technical decision or tradeoff you made
81
+ 4. Who should NOT use it (or what it does not do): this builds trust
82
+ 5. A specific question for the community
83
+
84
+ **What kills maker comments:**
85
+ - "Hi PH! Thrilled to share..." (sounds like an announcement, not a human)
86
+ - "Our product is the best solution for..." (sounds like marketing)
87
+ - Not responding to any comments for the first 2 hours
88
+ - Asking people to upvote ("if you like this, please upvote!")
89
+
90
+ **Tone reference:** Think of the tone of a thoughtful comment on Hacker News. Not a pitch. Not a tutorial. A practitioner talking to peers.
91
+
92
+ ---
93
+
94
+ ## Promo Codes
95
+
96
+ If you have a promo code for PH users:
97
+ - Post it in a separate comment after the maker comment (not in the maker comment itself)
98
+ - Format: "Product Hunt special: use [CODE] for [discount/free tier/extended trial]"
99
+ - Include expiry date if there is one
100
+ - Lifetime deals tend to perform well on PH
101
+
102
+ ---
103
+
104
+ ## What NOT to Do
105
+
106
+ **Vote ring:** Do not ask friends, Discord members, Slack groups, or anyone else to upvote your launch. PH detects coordinated voting. It will bury your product. "Vote rings" are the fastest way to get your listing penalized.
107
+
108
+ **Correct ask:** "We launched on PH today: would love your feedback" or "Check it out if it's relevant to you." That is fine. Asking specifically for upvotes is not.
109
+
110
+ **Hashtags:** Product Hunt does not use hashtags. Do not include them in copy.
111
+
112
+ **Competitor naming:** Do not name competitors in your listing. Focus on what you do, not what you are not.
113
+
114
+ **Free vs freemium:** If it has a free tier but also paid plans, say "Free to start" or "Free tier available." Do not say "free" unless it is permanently, completely free.
115
+
116
+ ---
117
+
118
+ ## Launch Timing
119
+
120
+ - Products launch at 12:01 AM Pacific Time on the selected day
121
+ - The first 4 hours determine front page placement
122
+ - Tuesday, Wednesday, Thursday are the highest-traffic days
123
+ - Avoid holiday weeks and major tech conference days (everyone is heads-down)
124
+ - Notify your audience the night before so they are ready at launch time
@@ -0,0 +1,16 @@
1
+ # reddit-icp-monitor — Environment Variables
2
+ # ============================================
3
+ # Gemini is required. Reddit credentials are optional (higher rate limit).
4
+
5
+ # Required: Google Gemini API key for relevance scoring and reply drafting
6
+ # Get it: aistudio.google.com, Get API key
7
+ GEMINI_API_KEY=your_gemini_api_key_here
8
+
9
+ # Optional: Reddit OAuth credentials for 60 RPM (vs 10 RPM with public endpoints)
10
+ # Register a "script"-type app at: reddit.com/prefs/apps
11
+ # Select "script" app type, fill in a redirect URI (http://localhost works)
12
+ # Note: App approval may take several days as of November 2025
13
+ REDDIT_CLIENT_ID=your_reddit_client_id_here
14
+ REDDIT_CLIENT_SECRET=your_reddit_client_secret_here
15
+ REDDIT_USERNAME=your_reddit_username_here
16
+ REDDIT_PASSWORD=your_reddit_password_here
@@ -0,0 +1,117 @@
1
+ # reddit-icp-monitor
2
+
3
+ <img width="1280" height="640" alt="reddit-icp-monitor" src="https://github.com/user-attachments/assets/8182b73f-1f8d-4812-9061-165fd8aeb0e8" />
4
+
5
+
6
+ Watch subreddits for people describing the exact problem you solve. Score each post for ICP relevance. Draft a helpful, non-spammy reply for every high-signal match.
7
+
8
+ ## What It Does
9
+
10
+ - Reads your ICP definition from docs/icp.md (or asks 3 questions to build it)
11
+ - Searches specified subreddits for posts matching your pain point phrases
12
+ - Scores each candidate post 1-5 using Gemini (how clearly does this person have the problem you solve?)
13
+ - Drafts a helpful reply for every post scoring 4 or 5, in the correct mode (vent, how-do-you, or tool recommendation)
14
+ - Enforces a hard rule: replies never name your product unless the post explicitly asks for tool recommendations
15
+ - Saves the full report to docs/reddit-intel/YYYY-MM-DD.md
16
+
17
+ ## Requirements
18
+
19
+ | Requirement | Purpose | How to Set Up |
20
+ |------------|---------|--------------|
21
+ | Gemini API key | Relevance scoring and reply drafting | aistudio.google.com, Get API key |
22
+ | Reddit credentials (optional) | Higher rate limit (60 RPM vs 10 RPM) | reddit.com/prefs/apps, create a script app |
23
+
24
+ Reddit credentials are optional. The skill uses Reddit's public JSON endpoints by default, which require no setup and support 10 RPM. That is enough for most monitoring sessions.
25
+
26
+ ## Setup
27
+
28
+ ```bash
29
+ cp .env.example .env
30
+ ```
31
+
32
+ Fill in:
33
+ - `GEMINI_API_KEY` (required)
34
+ - Reddit credentials (optional, see OAuth Upgrade below)
35
+
36
+ ## How to Use
37
+
38
+ First run (no docs/icp.md yet):
39
+ ```
40
+ "Monitor Reddit for my ICP signals"
41
+ "Scan subreddits for people who need my product"
42
+ ```
43
+
44
+ The skill asks 3 questions to build your ICP definition and saves it to docs/icp.md.
45
+
46
+ Subsequent runs (docs/icp.md exists):
47
+ ```
48
+ "Check Reddit for buying signals"
49
+ "Run the Reddit ICP monitor for this week"
50
+ "Find ICP posts from the last month"
51
+ ```
52
+
53
+ Specify a time window:
54
+ ```
55
+ "Monitor Reddit for ICP signals from the last 24 hours"
56
+ "Check Reddit for this month's pain point posts"
57
+ ```
58
+
59
+ ## Output
60
+
61
+ Each run produces a report with:
62
+ - All subreddits monitored and time window
63
+ - Each high-signal post: title, URL, upvotes, signal quote, matched keyword, post type
64
+ - A drafted reply for each match (2-5 sentences, mode-appropriate)
65
+ - A list of subreddits that returned 0 results (for tuning)
66
+
67
+ Reports are saved to `docs/reddit-intel/YYYY-MM-DD.md`.
68
+
69
+ ## Reply Modes
70
+
71
+ The skill classifies each post and drafts in the appropriate mode:
72
+
73
+ | Mode | Post Type | Can Name Product? |
74
+ |------|-----------|------------------|
75
+ | Mode 1 | Venting / frustration | Never |
76
+ | Mode 2 | "How do you handle X?" | Never |
77
+ | Mode 3 | "What tool does X?" | Yes, with one alternative |
78
+
79
+ ## Choosing Good Subreddits
80
+
81
+ **Where to monitor (people describing problems):**
82
+ - r/devops, r/ExperiencedDevs, r/sysadmin: engineers asking operational questions
83
+ - r/startups, r/SaaS, r/EntrepreneurRideAlong: founders and operators venting about scaling
84
+ - r/sales, r/marketing: GTM practitioners asking how others handle things
85
+
86
+ **Where not to monitor:**
87
+ - Topic subreddits (r/programming, r/MachineLearning): discussions, not pain points
88
+ - Your product's own subreddit: not monitoring your own community
89
+ - Broad consumer subreddits: not your B2B ICP
90
+
91
+ ## OAuth Upgrade
92
+
93
+ If you need more than 10 RPM (large subreddits or frequent runs):
94
+
95
+ 1. Go to reddit.com/prefs/apps and create a "script" app
96
+ 2. Note: app approval may take several days as of late 2025
97
+ 3. Fill in REDDIT_CLIENT_ID, REDDIT_CLIENT_SECRET, REDDIT_USERNAME, REDDIT_PASSWORD in .env
98
+
99
+ With OAuth, the skill fetches a Bearer token at session start and uses the `oauth.reddit.com` endpoint for 60 RPM.
100
+
101
+ ## Project Structure
102
+
103
+ ```
104
+ reddit-icp-monitor/
105
+ ├── SKILL.md
106
+ ├── README.md
107
+ ├── .env.example
108
+ ├── evals/
109
+ │ └── evals.json
110
+ └── references/
111
+ ├── icp-format.md
112
+ └── reply-rules.md
113
+ ```
114
+
115
+ ## License
116
+
117
+ MIT