jeffabailey/jbb-writing-skills
Writing skills for structured article creation, review, revision, ideation, strategy, copy, SEO, cover images, practice playgrounds, and pre-publish validation for jeffbaileyblog.
Builds a new in-browser practice playground for jeffbaileyblog (a real program running in the page, like the fd, Nushell, zsh, tmux, Neovim, and jq playgrounds) by first checking the tool can run in a browser at all, then driving the nWave waves with the recipe, intake questions, and gotchas learned from the shipped playgrounds, and, when the user says Yes, a Learn X article with the playground embedded and its drill replayed by the tests. Use when the user says /write:playground, asks to "add a fish (or any tool) playground", "make a practice shell, terminal, or editor for a tool", "a wasm or v86 practice app like the Nushell one", "let readers try a tool in the browser", or wants a Learn X article with a live practice terminal, even if they don't say "playground".
Generates a 1200x630 PNG cover image from what an article means, using the bundled prompt (dark, futuristic, human-and-system artwork with no text) and the Canva connector. For jeffbaileyblog it builds or overwrites the article's own Canva cover design from the jbb-feature-image-template brand template, sets the title, files and exports it beside the article, and sets the Hugo cover front matter; it also covers category pages and runs in batches for many covers at once. Use whenever someone wants a cover, hero, featured, header, OG, social-preview, or share image for a blog post, article, or category page, says /write:cover, asks to redo or refresh an existing cover, or when write-article finishes a jeffbaileyblog draft, even if they don't say "cover".
Enforces jeffbaileyblog Hugo Markdown rules by reading and applying hugo/AGENTS.md section by section as written, plus any nested AGENTS.md and content/prompts/writing-style.md, then proving it with a live ban-list scan, a front-matter check, and a build that actually renders the page (drafts included). Use when editing or creating content under the Hugo site (hugo/content/), drafting blog posts, fixing Hugo build errors such as REF_NOT_FOUND, or the user says /hugo:agents, "apply AGENTS.md", "Hugo blog rules", or "compliance with hugo AGENTS".
Creates articles using 16 bundled writing framework prompts (Diataxis tutorial, how-to, reference, explanation, AIDA, PAS, Influence Pieces, Classical Rhetoric, TEA, Thought Pieces, Backward Design, Lesson Planning, Fact-Based Reference, List Articles, Fundamentals, Learn X). Picks the best framework, loads it from this skill, and drafts the article; for jeffbaileyblog it also applies hugo/AGENTS.md, the site writing style and SEO rules, places the page bundle in the right section, checks internal links are published, and verifies the Hugo build. Use when the user says /write:article, asks to write an article, blog post, opinion piece, essay, tutorial, how-to, explanation, reference doc, "Learn X" or "Fundamentals of X" post, or wants a specific writing framework. Triggers on "write article", "create article", "draft post", "write a post about", "I have opinions about", "write tutorial", "write how-to", "write explanation", "write reference doc".
Revises an existing article by integrating new input content from other sources, reviewing flow, weaving new concepts in smoothly, and producing a clear record of what was added and why. Self-contained — no hosted prompt. Use when the user says /write:article-revision, asks to revise or update an article with new material, merge sources into a draft, fold in new research or notes, or make a one-sided post acknowledge a counterargument from a source.
Checks the links in a Markdown file with lychee and the Hugo site's lychee.toml, then triages every failure as broken, known false positive, or unverified, with the source line and a fix. Also checks Hugo {{< ref >}} targets and root-relative /blog/ links against hugo/content, which lychee cannot see. Use when the user says /write:check-links, wants to validate links, check for broken links or dead URLs, verify URLs in a post before publishing, or asks "is anything broken in this article".
Creates clean, decision-first comparison articles (X vs Y vs Z) that render well in Hugo — verdict up top, scorecard cards, per-criterion deep dive, use-case recommendations, and sourced version/price/license claims. Use when the user says /write:comparison-article-create, asks to write a comparison or "vs" page, "X vs Y", "which should I pick", or compare tools/frameworks/products. Articles live in content/blog/x-vs-x/.
Writes marketing copy grounded in the product's own facts, for landing pages, sales pages, CTAs, button labels, short emails, ads, and taglines. Reads the README, site, or brief first, never invents proof or urgency, and delivers paste-ready copy plus a separate strategy appendix. Use when the user says /write:copy or /write:landing-page-copy, needs landing page copy, wants marketing text, sales copy, conversion copy, a call to action, a launch email, ad text, or a tagline. Triggers on "landing page", "landing page copy", "marketing copy", "sales copy", "conversion copy", "copywriting", "CTA", "call to action", "button label", "tagline", "ad copy", "promo email".
Systematic debugging and bug minimization with a bundled Bug Minimizer prompt. Triages noisy reports, shrinks the trigger to a minimal runnable repro, finds the root cause, and proves the fix by running the repro before and after. Use when the user says /write:debug or /write:bug-minimizer, pastes a bug report, wants to minimize or reproduce a bug, isolate an issue, or asks for structured debugging help. Triggers on "bug report", "minimize bug", "bug minimizer", "debug", "reproduce bug", "isolate issue", "minimal repro", "what broke".
Writes 50 social media post hooks for a piece of text (an article, draft, blog post, or pasted notes), in five groups of ten (funny with pop-culture and tech references, reflective/philosophical, clean/general, edgy/sharp, edgy with pop-culture references), each followed by a one-line action telling the reader what they'll do in the post, plus 12-20 hashtags on one paste-ready line for X, LinkedIn, and Threads. Use when the user says /write:hook, wants hooks, opening lines, scroll-stoppers, or teaser lines to promote an article or post, asks "how should I open this LinkedIn/X/Threads post?", wants social copy or hashtags for a jeffbaileyblog post, or pastes text after a dashed separator line asking for hooks. With no text given, uses the last article created or changed.
Brainstorms article ideas for a blog, checks each idea against what is already written (published posts and draft stubs), and hands back ready-to-write ideas with slug, section, categories, closest existing post, and the write-article framework to use. Use when the user says /write:ideate or /write:idea-storm, wants to brainstorm topics, generate article ideas, find gaps in what they have written, explore content angles, or asks "what should I write about". Triggers on "brainstorm", "idea storm", "article ideas", "content ideas", "post ideas", "topic ideas", "what should I write about", "what haven't I written about".
Reviews articles against 16 bundled writing framework rubrics. Detects the framework from front matter, content directory, and structure (or takes it as an argument), loads the rubric from this skill, and evaluates the article without editing it. Use when the user says /write:review, asks to review an article, evaluate writing quality, check an article against a framework, or get feedback on a draft, and when another skill (such as write-article-revision) needs a framework rubric score. Triggers on "review article", "evaluate writing", "check article", "review draft", "writing feedback", "article quality". With no article specified, reviews the last article created or adjusted.
Applies the fixes from a write-review report to the article it reviewed, then validates and re-scores it. Finds the review in this conversation or the saved report from an earlier session (running write-review first if there is none), turns every finding into a fix list, applies the ones the article's own content supports, and lists the rest (missing facts, structural calls) for the author instead of inventing anything. Keeps the author's voice and profanity, edits in place only when git holds the original, and reports the score before and after. Use when the user says /write:review-apply, "apply the review", "fix what the review found", "apply those fixes", "do the improvement plan", "address the review feedback" for an article or blog post, or answers yes after write-review offers the follow-up. With no article named, uses the last reviewed or changed article.
Lints a Markdown file with markdownlint-cli2 and the user's config (project .markdownlint-cli2.jsonc, else ~/Shell/.markdownlint-cli2.jsonc), reports findings grouped by rule, and flags results that mean the config was not applied. Use when the user says /write:run-markdown-lint, wants to lint a Markdown file, check Markdown formatting or style, or asks "what's actually wrong" with a draft's Markdown.
On-page SEO for the jeffbaileyblog Hugo site in two modes. Links mode adds contextual reference-style internal links from a post to other published posts (verified against hugo list all and a Hugo build). Front-matter mode rewrites or checks title:, description:, and keywords: against the blog's seo-front-matter prompt. Use when the user says /write:seo or /write:internal-link-optimize, wants to optimize or add internal links, cross-link posts, improve navigation between posts, boost SEO through contextual linking, or fix a weak page title, meta description, SEO title, or front matter keywords. Triggers on "internal links", "link optimization", "SEO links", "cross-linking", "internal linking strategy", "keywords", "front matter keywords", "meta description", "page title", "SEO title".
Quick check of which writing skills have already run on a jeffbaileyblog article and which are missing or stale (write-review, write-review-apply, write-seo, write-validate-article, write-check-links, write-run-markdown-lint, hugo-agents-compliance, generate-cover-image), then asks y/N before running write-review if the article has never been reviewed. Use when the user says /write:status, asks "has this been reviewed?", "what's left on this article?", "which checks haven't run?", "is this ready to publish?", or wants an article's review/SEO history before deciding what to do next. With no article named, checks the last article created or changed.
Runs evidence-tagged strategic analysis in three modes, each with a bundled prompt. Content strategy plans a blog or publication from a measured inventory (published vs draft, pace, pillars, 90-day calendar). Competitor analysis maps 3-5 competitors plus disruptors for businesses, blogs, or open-source projects and scores the gaps. Growth audit (McKinsey-style) scores a business or project, finds bottlenecks, and lays out quick wins and a 90-day roadmap toward a revenue or non-revenue goal. Use when the user says /write:strategy, /write:competitor-analysis, or /write:mckinsey-consultant, or asks for a content strategy, editorial plan, competitor analysis, competitive landscape, growth audit, growth analysis, McKinsey-style analysis, strategic planning, or market analysis.
Validates one Markdown article for the jeffbaileyblog Hugo site before it ships and returns a three-level verdict (blocking / warning / noise). Runs the Hugo build first as the gate (drafts included, into a temp dir), then a front-matter check, a banned-phrase scan read live from writing-style.md, an AGENTS.md compliance pass, one ai-sanitize report, link checking (lychee), and Markdown linting (markdownlint-cli2). Report-only unless the user asks for fixes. Use when the user says /write:validate-article, wants to validate an article, check an article before publishing, "run all the checks" on a Markdown file, or asks whether a post is ready to publish.
Use when writing or tightening prose humans will read (README files, documentation, commit messages, error messages, explanations, reports, UI text, blog sections). Applies Strunk's rules (active voice, positive form, concrete words, omit needless words) while keeping the author's voice, facts, links, and code intact, and returns a change list tagged with rule numbers. Triggers on "tighten this", "make this clearer", "edit for clarity", "cut the fluff", "this rambles", "make this more concise".