@nano-step/skill-manager 5.0.1 → 5.2.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 (67) hide show
  1. package/dist/utils.d.ts +1 -1
  2. package/dist/utils.js +1 -1
  3. package/package.json +1 -1
  4. package/skills/blog-workflow/SKILL.md +522 -0
  5. package/skills/blog-workflow/skill.json +16 -0
  6. package/skills/comprehensive-feature-builder/SKILL.md +558 -0
  7. package/skills/comprehensive-feature-builder/skill.json +9 -0
  8. package/skills/idea-workflow/SKILL.md +229 -0
  9. package/skills/idea-workflow/skill.json +14 -0
  10. package/skills/reddit-workflow/SKILL.md +187 -0
  11. package/skills/reddit-workflow/skill.json +14 -0
  12. package/skills/rri-t-testing/SKILL.md +76 -0
  13. package/skills/rri-t-testing/assets/rri-t-coverage-dashboard.md +101 -0
  14. package/skills/rri-t-testing/assets/rri-t-persona-interview.md +226 -0
  15. package/skills/rri-t-testing/assets/rri-t-stress-matrix.md +100 -0
  16. package/skills/rri-t-testing/assets/rri-t-test-case.md +155 -0
  17. package/skills/rri-t-testing/skill.json +9 -0
  18. package/skills/security-workflow/SKILL.md +258 -0
  19. package/skills/security-workflow/skill.json +15 -0
  20. package/skills/skill-creator/LICENSE.txt +202 -0
  21. package/skills/skill-creator/SKILL.md +309 -0
  22. package/skills/skill-creator/references/metadata-quality-criteria.md +76 -0
  23. package/skills/skill-creator/references/plugin-marketplace-hosting.md +101 -0
  24. package/skills/skill-creator/references/plugin-marketplace-overview.md +55 -0
  25. package/skills/skill-creator/references/plugin-marketplace-schema.md +88 -0
  26. package/skills/skill-creator/references/plugin-marketplace-sources.md +103 -0
  27. package/skills/skill-creator/references/plugin-marketplace-troubleshooting.md +80 -0
  28. package/skills/skill-creator/references/script-quality-criteria.md +106 -0
  29. package/skills/skill-creator/references/structure-organization-criteria.md +114 -0
  30. package/skills/skill-creator/references/token-efficiency-criteria.md +74 -0
  31. package/skills/skill-creator/references/validation-checklist.md +83 -0
  32. package/skills/skill-creator/scripts/encoding_utils.py +36 -0
  33. package/skills/skill-creator/scripts/init_skill.py +308 -0
  34. package/skills/skill-creator/scripts/package_skill.py +115 -0
  35. package/skills/skill-creator/scripts/quick_validate.py +69 -0
  36. package/skills/skill-creator/skill.json +14 -0
  37. package/skills/team-workflow/SKILL.md +227 -0
  38. package/skills/team-workflow/skill.json +15 -0
  39. package/skills/ui-ux-pro-max/SKILL.md +292 -0
  40. package/skills/ui-ux-pro-max/data/charts.csv +26 -0
  41. package/skills/ui-ux-pro-max/data/colors.csv +97 -0
  42. package/skills/ui-ux-pro-max/data/icons.csv +101 -0
  43. package/skills/ui-ux-pro-max/data/landing.csv +31 -0
  44. package/skills/ui-ux-pro-max/data/products.csv +97 -0
  45. package/skills/ui-ux-pro-max/data/react-performance.csv +45 -0
  46. package/skills/ui-ux-pro-max/data/stacks/astro.csv +54 -0
  47. package/skills/ui-ux-pro-max/data/stacks/flutter.csv +53 -0
  48. package/skills/ui-ux-pro-max/data/stacks/html-tailwind.csv +56 -0
  49. package/skills/ui-ux-pro-max/data/stacks/jetpack-compose.csv +53 -0
  50. package/skills/ui-ux-pro-max/data/stacks/nextjs.csv +53 -0
  51. package/skills/ui-ux-pro-max/data/stacks/nuxt-ui.csv +51 -0
  52. package/skills/ui-ux-pro-max/data/stacks/nuxtjs.csv +59 -0
  53. package/skills/ui-ux-pro-max/data/stacks/react-native.csv +52 -0
  54. package/skills/ui-ux-pro-max/data/stacks/react.csv +54 -0
  55. package/skills/ui-ux-pro-max/data/stacks/shadcn.csv +61 -0
  56. package/skills/ui-ux-pro-max/data/stacks/svelte.csv +54 -0
  57. package/skills/ui-ux-pro-max/data/stacks/swiftui.csv +51 -0
  58. package/skills/ui-ux-pro-max/data/stacks/vue.csv +50 -0
  59. package/skills/ui-ux-pro-max/data/styles.csv +68 -0
  60. package/skills/ui-ux-pro-max/data/typography.csv +58 -0
  61. package/skills/ui-ux-pro-max/data/ui-reasoning.csv +101 -0
  62. package/skills/ui-ux-pro-max/data/ux-guidelines.csv +100 -0
  63. package/skills/ui-ux-pro-max/data/web-interface.csv +31 -0
  64. package/skills/ui-ux-pro-max/scripts/core.py +253 -0
  65. package/skills/ui-ux-pro-max/scripts/design_system.py +1067 -0
  66. package/skills/ui-ux-pro-max/scripts/search.py +114 -0
  67. package/skills/ui-ux-pro-max/skill.json +16 -0
package/dist/utils.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export declare const MANAGER_VERSION = "5.0.1";
1
+ export declare const MANAGER_VERSION = "5.2.0";
2
2
  export interface SkillManifest {
3
3
  name: string;
4
4
  version: string;
package/dist/utils.js CHANGED
@@ -13,7 +13,7 @@ exports.writeText = writeText;
13
13
  const path_1 = __importDefault(require("path"));
14
14
  const os_1 = __importDefault(require("os"));
15
15
  const fs_extra_1 = __importDefault(require("fs-extra"));
16
- exports.MANAGER_VERSION = "5.0.1";
16
+ exports.MANAGER_VERSION = "5.2.0";
17
17
  async function detectOpenCodePaths() {
18
18
  const homeConfig = path_1.default.join(os_1.default.homedir(), ".config", "opencode");
19
19
  const cwd = process.cwd();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nano-step/skill-manager",
3
- "version": "5.0.1",
3
+ "version": "5.2.0",
4
4
  "description": "CLI tool that installs and manages AI agent skills, MCP tool routing, and workflow configurations.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -0,0 +1,522 @@
1
+ ---
2
+ description: Draft SEO-optimized technology blog posts for multiple platforms based on the current project or latest changes
3
+ ---
4
+
5
+ ## User Input
6
+
7
+ ```text
8
+ $ARGUMENTS
9
+ ```
10
+
11
+ You **MUST** consider the user input before proceeding (if not empty).
12
+
13
+ ⚠️ **FIRST — check if `$ARGUMENTS` is exactly the word `help` (case-insensitive). If yes, jump directly to the [Help Output](#help-output) section below and STOP. Do NOT run any other phase.**
14
+
15
+ ### Argument Parsing
16
+
17
+ Parse `$ARGUMENTS` to extract **platform selection**, **flags**, and **topic**.
18
+
19
+ **Syntax**: `/blog [platforms] [lang:vi|en] [file] [screenshot] [topic]`
20
+
21
+ All options are plain keywords — no dashes, no `--` prefix. This avoids conflict with the chat interface.
22
+
23
+ ---
24
+
25
+ ### Help Output
26
+
27
+ If `$ARGUMENTS` is `help` (case-insensitive, with or without extra whitespace), output the following help text **exactly** and then **STOP** — do not proceed to any other phase:
28
+
29
+ ````
30
+ /blog — SEO-optimized blog post generator for multiple platforms
31
+
32
+ USAGE
33
+ /blog [platforms] [options] [topic]
34
+
35
+ PLATFORMS (comma-separated, default: all)
36
+ devto, dev.to dev.to
37
+ linkedin LinkedIn (short post + long-form article)
38
+ medium Medium
39
+ hashnode Hashnode
40
+ blog, hoainho hoainho.info/blog (canonical source)
41
+ thnk, thnkandgrow thnkandgrow.com
42
+ all All 6 platforms
43
+
44
+ OPTIONS (plain keywords, no dashes)
45
+ lang:en Write in English (default)
46
+ lang:vi Write in Vietnamese (tech terms stay in English)
47
+ file Save output as .md files in ./blog-output/
48
+ screenshot Capture app screenshots via Playwright and embed in posts
49
+ help Show this help message
50
+
51
+ EXAMPLES
52
+ /blog help Show this guide
53
+ /blog All platforms, English, auto-detect topic
54
+ /blog devto,medium My new feature dev.to + Medium only
55
+ /blog lang:vi All platforms, Vietnamese
56
+ /blog linkedin lang:vi AI Sandbox tips LinkedIn, Vietnamese
57
+ /blog file hashnode Deep dive into auth Hashnode, save to file
58
+ /blog screenshot file blog,thnk Release v2 Personal blogs, screenshots, files
59
+ /blog all lang:vi file screenshot Full combo
60
+
61
+ OUTPUT (default: inline)
62
+ Prints each platform version directly in chat, separated by ---
63
+
64
+ OUTPUT (file)
65
+ ./blog-output/
66
+ ├── index.md Summary with links to all versions
67
+ ├── {slug}-devto.md dev.to version with frontmatter
68
+ ├── {slug}-linkedin-post.md LinkedIn short post
69
+ ├── {slug}-linkedin-article.md LinkedIn long-form article
70
+ ├── {slug}-medium.md Medium version
71
+ ├── {slug}-hashnode.md Hashnode version
72
+ ├── {slug}-hoainho.md hoainho.info/blog version
73
+ ├── {slug}-thnkandgrow.md thnkandgrow.com version
74
+ └── screenshots/ (only with screenshot option)
75
+ ├── hero.png Main app screenshot
76
+ ├── feature-1.png Key feature screenshots
77
+ └── mobile.png Mobile viewport
78
+
79
+ NOTES
80
+ • Canonical URL is always hoainho.info/blog unless overridden
81
+ • Posts include SEO keywords, meta descriptions, and platform-native formatting
82
+ • Cross-platform publishing schedule included in output
83
+ • Screenshots require a running dev server or build output
84
+ ````
85
+
86
+ **Do NOT proceed with any other phase after printing help.**
87
+
88
+ ---
89
+
90
+ #### Platform Identifiers
91
+
92
+ Case-insensitive, comma-separated, no spaces:
93
+
94
+ | Identifier | Platform |
95
+ |------------|----------|
96
+ | `devto` or `dev.to` | dev.to |
97
+ | `linkedin` | LinkedIn (both short post + long-form article) |
98
+ | `medium` | Medium |
99
+ | `hashnode` | Hashnode |
100
+ | `blog` or `hoainho` | hoainho.info/blog |
101
+ | `thnk` or `thnkandgrow` | thnkandgrow.com |
102
+ | `all` | All 6 platforms (default when no platform specified) |
103
+
104
+ #### Options
105
+
106
+ Plain keywords (no dashes) — can appear anywhere in `$ARGUMENTS`:
107
+
108
+ | Option | Default | Description |
109
+ |--------|---------|-------------|
110
+ | `lang:vi` | `en` | Generate all content in Vietnamese. Tech terms (React, Docker, API...) stay in English. |
111
+ | `lang:en` | `en` | Generate all content in English (default). |
112
+ | `file` | off | Save each platform version as a separate `.md` file in `./blog-output/` directory. File naming: `{slug}-{platform}.md` (e.g., `moodtrip-v2-devto.md`). Also creates an `index.md` with links to all versions. |
113
+ | `screenshot` | off | Include screenshots of the project. The agent will: (1) detect if the project has a running dev server or build output, (2) launch the app in a browser via Playwright, (3) capture key screens (homepage, main features, mobile view), (4) save screenshots to `./blog-output/screenshots/`, (5) embed image references in the blog content with descriptive alt text. If no UI is available (CLI tool, library), capture terminal output or architecture diagrams instead. |
114
+ | `help` | — | Display usage guide and exit. No content is generated. |
115
+
116
+ #### Parsing Rules
117
+
118
+ 1. **Check `help` first** — if `$ARGUMENTS` is exactly `help` (case-insensitive), print help and stop immediately
119
+ 2. Scan `$ARGUMENTS` for recognized platform identifiers (first comma-separated token)
120
+ 3. Extract options (`lang:vi`, `lang:en`, `file`, `screenshot`) from anywhere in the arguments
121
+ 4. Everything remaining after platforms and options is the **topic**
122
+ 5. If no platform identifiers found → default to `all`
123
+ 6. If no topic text → auto-detect topic from git activity
124
+ 7. Options can appear in any order, before or after the topic
125
+
126
+ #### Examples
127
+
128
+ ```
129
+ /blog help → show usage guide
130
+ /blog → all platforms, English, console output
131
+ /blog devto,medium Building a mood-based trip planner → dev.to + Medium, English
132
+ /blog lang:vi → all platforms, Vietnamese, auto-detect topic
133
+ /blog linkedin lang:vi Chia sẻ hành trình xây dựng MoodTrip → LinkedIn only, Vietnamese
134
+ /blog file devto,hashnode Introducing MoodTrip V2 → dev.to + Hashnode, save to files
135
+ /blog screenshot file blog,thnk MoodTrip V2 deep dive → personal blogs, with screenshots, save to files
136
+ /blog all lang:vi file screenshot → everything: all platforms, Vietnamese, files, screenshots
137
+ ```
138
+
139
+ **CRITICAL**: Only generate content for the selected platform(s). Skip all Phase 2 subsections for unselected platforms. Phase 3-5 output must also only reference selected platforms.
140
+
141
+ ## Goal
142
+
143
+ Generate high-quality, SEO-optimized technology blog posts for **selected platforms** (default: all six — dev.to, LinkedIn, Medium, Hashnode, hoainho.info/blog, thnkandgrow.com). Only generate content for platforms specified in the argument parsing step. Each platform version must respect native formatting, optimal length, audience expectations, and discovery mechanics. Content is derived from the current project context and/or recent changes.
144
+
145
+ ## Operating Constraints
146
+
147
+ - **Read-only analysis first**: Gather all project context before writing a single word.
148
+ - **Platform-native output**: Each platform version must be copy-paste ready with correct frontmatter/formatting.
149
+ - **Canonical source**: `hoainho.info/blog` is always the canonical URL unless user overrides.
150
+ - **Language**: Controlled by `--lang` flag. `--lang=en` (default) for English, `--lang=vi` for Vietnamese. When Vietnamese: use natural Vietnamese tech writing style, keep code/tech terms in English (React, Docker, API, etc.). If no `--lang` flag and user writes topic in Vietnamese, auto-set to `--lang=vi`.
151
+ - **No hallucinated features**: Only reference actual project capabilities confirmed by source code or docs.
152
+
153
+ ## Execution Steps
154
+
155
+ ### Phase 0: Context Gathering
156
+
157
+ 1. **Read project metadata** — load in parallel:
158
+ - `README.md` (project overview, features, value prop)
159
+ - `AGENTS.md` (structure, conventions, tech stack)
160
+ - `package.json` or equivalent manifest (dependencies, scripts, version)
161
+ - Any `CHANGELOG.md` or `SESSION-SUMMARY.md` if present
162
+
163
+ 2. **Analyze recent changes** (run from repo root):
164
+ ```bash
165
+ git log --oneline --no-decorate -20
166
+ ```
167
+ ```bash
168
+ git diff HEAD~5..HEAD --stat
169
+ ```
170
+ ```bash
171
+ git log --format="%s" -10
172
+ ```
173
+
174
+ 3. **Determine content source**:
175
+ - If user provided a specific topic in `$ARGUMENTS` → use that as the primary angle
176
+ - If `$ARGUMENTS` is empty → auto-detect the most interesting angle from recent git activity
177
+ - If no recent activity → use the project overview as the angle
178
+
179
+ 4. **Extract key facts** into an internal model (do not output this):
180
+ - Project name and one-line description
181
+ - Tech stack (languages, frameworks, tools)
182
+ - Key features (top 3-5)
183
+ - Recent changes (what changed, why it matters)
184
+ - Unique differentiators (what makes this project special)
185
+ - Target audience (who benefits from this project)
186
+
187
+ ### Phase 1: Content Strategy
188
+
189
+ 1. **Select blog post angle** — choose the most fitting type:
190
+ | Type | When to use |
191
+ |------|-------------|
192
+ | Tutorial / How-to | New feature with clear usage steps |
193
+ | Announcement | Major release, new tool, milestone |
194
+ | Deep-dive | Complex architecture, design decisions |
195
+ | Changelog / What's New | Multiple recent updates |
196
+ | Case Study | Real-world usage, performance results |
197
+ | Opinion / Lessons Learned | Insights from building the project |
198
+
199
+ 2. **SEO keyword research** — generate:
200
+ - **Primary keyword**: 2-4 word phrase (high search intent, moderate competition)
201
+ - **Secondary keywords**: 3-5 related phrases
202
+ - **Long-tail variants**: 2-3 question-based phrases (e.g., "how to sandbox AI agents")
203
+ - **Semantic cluster**: 5-8 related terms to weave naturally into content
204
+
205
+ 3. **Craft titles** — generate exactly 3 variants:
206
+ - Variant A: Number/list format (e.g., "5 Reasons to Sandbox Your AI Coding Agent")
207
+ - Variant B: How-to format (e.g., "How to Protect Your System from AI Coding Tools")
208
+ - Variant C: Curiosity/bold claim (e.g., "Your AI Coding Agent Has Full Access to Your SSH Keys")
209
+ - All titles must: contain the primary keyword (front-loaded), be under 60 characters, use power words
210
+
211
+ 4. **Plan content structure** — outline with H2/H3 headings:
212
+ - Hook → Problem → Solution → Implementation → Results → CTA
213
+ - Every H2 section: 200-300 words max before next subheading
214
+ - Include planned code block locations
215
+
216
+ ### Phase 2: Write Platform-Specific Versions
217
+
218
+ Generate **separate, complete versions** for each platform below. Each version must be self-contained and copy-paste ready.
219
+
220
+ ---
221
+
222
+ #### 2.1 — dev.to
223
+
224
+ **Format**: Markdown with Liquid tags
225
+
226
+ **Required frontmatter**:
227
+ ```yaml
228
+ ---
229
+ title: "[Your Title]"
230
+ published: false
231
+ tags: [tag1, tag2, tag3, tag4] # max 4 tags
232
+ cover_image: "" # suggest dimensions: 1000x420
233
+ canonical_url: "https://hoainho.info/blog/[slug]"
234
+ description: "[150-160 char meta description with primary keyword]"
235
+ series: "" # optional, suggest if part of a series
236
+ ---
237
+ ```
238
+
239
+ **Writing rules**:
240
+ - Developer-friendly tone, practical and code-heavy
241
+ - 1500-3000 words optimal
242
+ - Use fenced code blocks with language identifiers (```bash, ```typescript, etc.)
243
+ - Emojis in H2 headings are acceptable and encouraged for scannability
244
+ - Include a `## TL;DR` section immediately after the intro
245
+ - End with `## What's Next?` and a clear CTA (star the repo, try the tool, comment)
246
+ - Tags are critical for discovery — choose tags with high follower counts on dev.to
247
+
248
+ ---
249
+
250
+ #### 2.2 — LinkedIn
251
+
252
+ Generate **two versions**:
253
+
254
+ **Version A — Short Post** (1300-2000 characters):
255
+ ```
256
+ [Hook line — must grab attention before "see more" fold]
257
+ [Second line — amplify the hook]
258
+
259
+ [3-5 bullet points or short paragraphs with key insights]
260
+
261
+ [Call-to-action: question to drive comments]
262
+
263
+ [3-5 hashtags, mix of broad (#AI, #DevTools) and niche (#AISandbox)]
264
+ ```
265
+
266
+ **Writing rules for short post**:
267
+ - First 2 lines must compel the reader to click "see more"
268
+ - Use "I" statements and personal experience framing
269
+ - Unicode bold (𝗯𝗼𝗹𝗱) for emphasis where needed
270
+ - Line breaks between every 1-2 sentences (LinkedIn penalizes walls of text)
271
+ - End with a question to drive engagement
272
+ - Hashtags: 3-5, placed at the end
273
+
274
+ **Version B — Long-form Article** (1000-2000 words):
275
+ - Professional thought-leadership tone
276
+ - Frame technical content through business value lens
277
+ - Include a compelling subtitle
278
+ - Use bullet points and numbered lists generously
279
+ - Add a "Key Takeaways" section
280
+
281
+ ---
282
+
283
+ #### 2.3 — Medium
284
+
285
+ **Format**: Rich Markdown
286
+
287
+ **Structure**:
288
+ - Kicker (short text above title, e.g., "Developer Tools")
289
+ - Title (compelling, keyword-rich)
290
+ - Subtitle (expands on title, adds context)
291
+ - Body: storytelling approach, narrative-driven
292
+ - 2000-4000 words (target 7-10 minute read)
293
+
294
+ **Writing rules**:
295
+ - Open with a story, analogy, or surprising statement
296
+ - Use pull quotes for key insights (> blockquote format)
297
+ - Code blocks with syntax highlighting
298
+ - Break into clear sections with descriptive H2 headings
299
+ - Include 1-2 images/diagrams suggestions with alt text
300
+ - End with a "Final Thoughts" section and CTA
301
+ - SEO focus: title, subtitle, first 150 characters are indexed
302
+ - Suggest 5 Medium tags (check relevance to Medium's tag ecosystem)
303
+
304
+ ---
305
+
306
+ #### 2.4 — Hashnode
307
+
308
+ **Format**: Markdown with frontmatter
309
+
310
+ **Required frontmatter**:
311
+ ```yaml
312
+ ---
313
+ title: "[Your Title]"
314
+ slug: "[seo-optimized-slug-with-primary-keyword]"
315
+ cover: "" # suggest dimensions: 1600x840
316
+ tags: [tag1, tag2, tag3, tag4, tag5]
317
+ canonical: "https://hoainho.info/blog/[slug]"
318
+ enableToc: true
319
+ ---
320
+ ```
321
+
322
+ **Writing rules**:
323
+ - Technical and educational tone, community-focused
324
+ - 1500-3000 words optimal
325
+ - Include auto-generated table of contents (TOC)
326
+ - Code snippets with clear explanations
327
+ - If part of a series, include series navigation links
328
+ - Hashnode SEO: slug is critical, meta description in first paragraph
329
+ - Include "Prerequisites" section if tutorial format
330
+ - End with "Resources" section with relevant links
331
+
332
+ ---
333
+
334
+ #### 2.5 — hoainho.info/blog (Personal Blog — Canonical Source)
335
+
336
+ **Format**: Markdown or MDX (detect from project structure if possible, default to MDX)
337
+
338
+ **Frontmatter** (adapt to detected blog engine):
339
+ ```yaml
340
+ ---
341
+ title: "[Your Title]"
342
+ date: "[YYYY-MM-DD]"
343
+ description: "[150-160 char meta description]"
344
+ tags: [tag1, tag2, tag3]
345
+ author: "Hoai Nho"
346
+ slug: "[seo-optimized-slug]"
347
+ image: "" # og:image recommendation
348
+ draft: true
349
+ ---
350
+ ```
351
+
352
+ **Writing rules**:
353
+ - Personal voice — this is the author's own blog
354
+ - Detailed technical deep-dives with personal insights and opinions
355
+ - Can be longer and more thorough than other platforms (no length cap)
356
+ - If Vietnamese content: use natural Vietnamese tech writing (not machine-translated), Vietnamese headings, but keep code/tech terms in English
357
+ - Include: author's perspective, lessons learned, behind-the-scenes decisions
358
+ - SEO: suggest schema markup (Article, TechArticle), og:title, og:description, og:image
359
+ - This is the **canonical URL** — all other platforms link back here
360
+
361
+ ---
362
+
363
+ #### 2.6 — thnkandgrow.com
364
+
365
+ **Format**: Markdown/MDX
366
+
367
+ **Frontmatter**:
368
+ ```yaml
369
+ ---
370
+ title: "[Your Title — growth/learning angle]"
371
+ date: "[YYYY-MM-DD]"
372
+ description: "[meta description with growth/learning angle]"
373
+ tags: [tag1, tag2, tag3]
374
+ category: "Tech & Growth"
375
+ draft: true
376
+ ---
377
+ ```
378
+
379
+ **Writing rules**:
380
+ - Growth mindset framing — what did building this teach you?
381
+ - 1500-2500 words optimal
382
+ - Frame technical content through the lens of personal/professional growth
383
+ - **Required sections**:
384
+ - "The Challenge" — what problem triggered this work
385
+ - "The Journey" — what was learned along the way
386
+ - "Key Takeaways" — 3-5 bullet points of actionable lessons
387
+ - "Reflection Questions" — 2-3 questions for the reader to consider
388
+ - Tone: inspiring but grounded, not preachy
389
+ - Include: mindset shifts, failure moments, breakthrough insights
390
+ - CTA: encourage readers to share their own learning experiences
391
+
392
+ ---
393
+
394
+ ### Phase 3: SEO Optimization Pass
395
+
396
+ After drafting all versions, run this checklist on each:
397
+
398
+ | Check | Criteria |
399
+ |-------|----------|
400
+ | Title | Contains primary keyword in first 30 chars |
401
+ | Meta description | 150-160 chars, includes keyword, has CTA verb |
402
+ | H2 headings | At least 2 contain keyword variants |
403
+ | First paragraph | Contains primary keyword naturally |
404
+ | Image alt text | Descriptive, includes keyword where natural |
405
+ | Internal links | Suggest 1-2 links to related content |
406
+ | External links | Include 1-3 authoritative external references |
407
+ | Reading level | Grade 8-10 (use short sentences, common words) |
408
+ | Word count | Meets platform-specific optimal range |
409
+ | Code blocks | All have language identifiers for syntax highlighting |
410
+
411
+ ### Phase 4: Cross-Platform Publishing Strategy
412
+
413
+ Output a publishing plan:
414
+
415
+ 1. **Canonical URL**: `https://hoainho.info/blog/[slug]`
416
+
417
+ 2. **Posting schedule** (stagger for maximum reach):
418
+ | Day | Platform | Why this order |
419
+ |-----|----------|----------------|
420
+ | Day 1 | hoainho.info/blog | Canonical source, let Google index first |
421
+ | Day 1 | thnkandgrow.com | Second owned property |
422
+ | Day 2 | dev.to | Developer community, high engagement potential |
423
+ | Day 2 | Hashnode | Technical community, SEO boost |
424
+ | Day 3 | Medium | Broader audience, delayed for indexing |
425
+ | Day 3-4 | LinkedIn (short post) | Professional network, drives traffic |
426
+ | Day 5-7 | LinkedIn (article) | Long-form for sustained engagement |
427
+
428
+ 3. **Cross-linking**: Each platform version links back to canonical. Mention other platforms where natural (e.g., "Read the full deep-dive on my blog").
429
+
430
+ 4. **Repurposing ideas**:
431
+ - LinkedIn short post → Twitter/X thread
432
+ - Key code snippets → GitHub Gist → embed in posts
433
+ - TL;DR → social media snippets
434
+ - Key takeaways → carousel images for LinkedIn/Instagram
435
+
436
+ ### Phase 5: Final Output
437
+
438
+ #### Mode A — Inline (default, no `--file` flag)
439
+
440
+ Present results directly in chat in this order:
441
+
442
+ 1. **📋 Content Strategy Summary** — topic, angle, target audience (3-5 lines)
443
+ 2. **🔑 SEO Analysis** — primary keyword, secondaries, title variants
444
+ 3. **📝 Platform Versions** — each separated by `---` horizontal rules, only selected platforms:
445
+ - dev.to version (complete with frontmatter)
446
+ - LinkedIn short post
447
+ - LinkedIn long-form article
448
+ - Medium version (with kicker and subtitle)
449
+ - Hashnode version (complete with frontmatter)
450
+ - hoainho.info/blog version (complete with frontmatter)
451
+ - thnkandgrow.com version (complete with frontmatter)
452
+ 4. **✅ Publishing Checklist** (only selected platforms):
453
+ ```
454
+ [ ] Publish to hoainho.info/blog (canonical)
455
+ [ ] Publish to thnkandgrow.com
456
+ [ ] Submit to dev.to (set canonical_url)
457
+ [ ] Submit to Hashnode (set canonical)
458
+ [ ] Submit to Medium (import or paste, set canonical)
459
+ [ ] Post LinkedIn short version
460
+ [ ] Schedule LinkedIn long-form article
461
+ [ ] Share on social media (Twitter/X, Reddit if relevant)
462
+ [ ] Submit to relevant aggregators (Hacker News, Reddit communities)
463
+ [ ] Monitor analytics after 24h and 7d
464
+ ```
465
+ 5. **📅 Posting Schedule** — the staggered timeline from Phase 4
466
+
467
+ #### Mode B — File Output (`--file` flag)
468
+
469
+ Create a `./blog-output/` directory in the project root and write files:
470
+
471
+ 1. **Generate slug** from the title: lowercase, hyphens, no special chars (e.g., `introducing-moodtrip-v2`)
472
+
473
+ 2. **Write platform files** — one per selected platform:
474
+ | File | Content |
475
+ |------|---------|
476
+ | `{slug}-devto.md` | dev.to version with full frontmatter |
477
+ | `{slug}-linkedin-post.md` | LinkedIn short post (plain text) |
478
+ | `{slug}-linkedin-article.md` | LinkedIn long-form article |
479
+ | `{slug}-medium.md` | Medium version with kicker/subtitle |
480
+ | `{slug}-hashnode.md` | Hashnode version with full frontmatter |
481
+ | `{slug}-hoainho.md` | hoainho.info/blog version |
482
+ | `{slug}-thnkandgrow.md` | thnkandgrow.com version |
483
+
484
+ 3. **Write `index.md`** — a summary file containing:
485
+ - Content strategy summary
486
+ - SEO analysis
487
+ - Links to each platform file
488
+ - Publishing checklist
489
+ - Posting schedule
490
+
491
+ 4. **Screenshots** (only if `--screenshot` flag):
492
+ - Save to `./blog-output/screenshots/`
493
+ - Files: `hero.png`, `feature-{n}.png`, `mobile.png`
494
+ - Update image references in all platform files to use relative paths: `./screenshots/hero.png`
495
+
496
+ 5. **Print summary** in chat:
497
+ ```
498
+ ✅ Blog output saved to ./blog-output/
499
+
500
+ Files created:
501
+ • blog-output/index.md
502
+ • blog-output/{slug}-devto.md
503
+ • blog-output/{slug}-linkedin-post.md
504
+ • ...
505
+
506
+ Next: review files, then follow the publishing checklist in index.md
507
+ ```
508
+
509
+ ## Writing Quality Standards
510
+
511
+ These standards apply to ALL platform versions:
512
+
513
+ - **Active voice** predominantly (passive only when emphasizing the object)
514
+ - **Hook first** — every version opens with a compelling hook (story, statistic, question, or bold claim)
515
+ - **Real code** — use actual code from the project, not pseudo-code or placeholders
516
+ - **Analogies** — explain at least one complex concept via analogy per post
517
+ - **Scannability** — subheadings every 200-300 words, bullet points for lists of 3+
518
+ - **TL;DR** — include a scannable summary section for developer-focused platforms
519
+ - **Clear CTA** — every version ends with an explicit call-to-action
520
+ - **No unexplained jargon** — define technical terms on first use or link to explanations
521
+ - **Transition phrases** — smooth flow between sections (avoid abrupt topic shifts)
522
+ - **Data when possible** — include performance numbers, statistics, or benchmarks where relevant
@@ -0,0 +1,16 @@
1
+ {
2
+ "name": "blog-workflow",
3
+ "version": "1.0.0",
4
+ "description": "Generate SEO-optimized blog posts for dev.to, Medium, LinkedIn, Hashnode from project context",
5
+ "compatibility": "OpenCode",
6
+ "agent": null,
7
+ "commands": [],
8
+ "tags": [
9
+ "blog",
10
+ "content",
11
+ "seo",
12
+ "devto",
13
+ "medium",
14
+ "linkedin"
15
+ ]
16
+ }