npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@intentsolutionsio/publishing-skills

v0.1.0

Published

Four composable skills that turn an AI agent into a platform-agnostic long-tail SEO publishing pipeline: topic research, drafting, SVG figures, and an editorial calendar. Ships Ghost, WordPress, and static-site adapters.

Readme

publishing-skills

Four composable skills that turn an AI coding agent (Claude, Cursor, Codex, Gemini, Copilot, ...) into a long-tail SEO publishing pipeline. Platform-agnostic - works against Ghost, WordPress, Webflow, Sanity, Strapi, or any static-site generator (Hugo, Astro, Eleventy, Jekyll, Next-MDX).

Built for indie hackers, founders, content marketers, and dev-tool teams who want AI to draft blog posts that actually rank in search and get quoted by AI assistants - not paraphrased docs, not hallucinated benchmarks, not generic "ultimate guide" filler.

| Skill | What it does | Who it's for | |---|---|---| | blog-topic-research | Validates a topic has real, verifiable demand (People Also Ask, Reddit, Stack Overflow, GitHub issues, vendor forums, changelogs) before you spend tokens drafting. Every accepted topic carries citable evidence URLs, a problem summary, confirmed fixes, version context, and FAQ variants the writer can use directly. | Anyone tired of writing posts nobody searches for, and editorial pipelines that need an evidence-backed backlog. | | seo-blog-writer | End-to-end pipeline for a single post: classify → research → outbound interlinks → draft clean HTML → scrub LLM tells → AI-SEO audit → optional glossary auto-link → publish. Adds FAQPage + BreadcrumbList + HowTo JSON-LD for AI-citation extractability. Pre-publish gate asserts H2-question shape, figure count (max(1, words // 500) for 800+ word posts), bullet discipline (3-9 items), and currency (as of <YYYY> qualifier on stale years). Ships a glossary auto-linker that wraps the first mention of each known technical term in an internal link with hover-tooltip metadata. Platform-pluggable publish step - ships with Ghost Admin API, WordPress REST, and static-site adapters; any other CMS is a ~20-line snippet. | Founders and marketers who want to ship one ranking post a day without paying a writer or a designer. | | blog-figure-svg | Generates accessible SVG figures (flow, comparison bars, taxonomy, terminal mocks, 1600x840 OG feature cards) with a consistent palette, screen-reader metadata, and figcaption-ready output. Rasterizes to compressed PNG for upload to any CMS. | Anyone shipping more than 3 posts a month who doesn't want stock photos or Midjourney filler on every article. | | blog-editorial-calendar | The orchestration layer over the other three. Keeps an evidence-backed backlog, picks the next topic so your corpus drifts toward the cluster + format mix you defined in config.json, schedules posts into a rolling daily cadence, reconciles the backlog against what's live on your CMS, and auto-refills via blog-topic-research when the queue runs dry. Drives whatever adapter seo-blog-writer is configured for. | Teams who want a hands-off cadence that publishes on schedule and stays balanced - not a pile of posts in one category. |

Together, they form a complete pipeline: plan the cadence → research the topic → write the post → illustrate it → publish to your platform of choice.

Installing

Via skills.sh (any agent runtime)

Installs all 4 skills into Claude Code, Cursor, Codex, Gemini CLI, GitHub Copilot, and 50+ other runtimes at once:

npx skills add AutomateLab-tech/publishing-skills

Via clawhub CLI (Claude / OpenClaw runtimes)

npm i -g clawhub
clawhub login
clawhub skill install blog-topic-research
clawhub skill install seo-blog-writer
clawhub skill install blog-figure-svg
clawhub skill install blog-editorial-calendar

Manually

Each skill is a single SKILL.md file with YAML frontmatter. Drop it into your project's .claude/skills/<name>/ directory (or your agent runtime's equivalent skill folder) and reload.

git clone https://github.com/AutomateLab-tech/publishing-skills.git
cp -r publishing-skills/skills/* .claude/skills/

How they compose

+----------------------+      +--------------------------+      +-------------------+      +-------------------+
| blog-topic-research  | ---> | blog-editorial-calendar  | ---> |  seo-blog-writer  | <--- |  blog-figure-svg  |
| 'is the topic worth  |      | 'pick the next topic to  |      | 'write + publish' |      | 'illustrate the   |
|  writing about?'     | <--- |  balance the corpus +    |      |                   |      |   post'           |
+----------------------+ refill  schedule the cadence'   |      +-------------------+      +-------------------+
                              +--------------------------+               |
                                                                         v
                                              +----------------------------------+
                                              | platform adapter (one of):       |
                                              |   - Ghost Admin API              |
                                              |   - WordPress REST API           |
                                              |   - static-site file output      |
                                              |   - bring-your-own (~20 lines)   |
                                              +----------------------------------+
  • blog-topic-research runs first - it answers "does anyone actually search this?" before you spend tokens drafting.
  • blog-editorial-calendar picks the next topic to keep the corpus balanced against your target mix, schedules it into a rolling cadence, and calls blog-topic-research to refill when the backlog runs dry. (Optional - you can drive the writer by hand instead.)
  • seo-blog-writer consumes the research-proof scaffold (or runs from scratch), drafts the HTML, validates the bundle, and ships it through a platform adapter.
  • blog-figure-svg is invoked from within the writer's illustration step (or standalone) when a post needs charts, diagrams, or a feature card.

Requirements

  • blog-topic-research - no system dependencies beyond WebSearch / WebFetch in the agent runtime.
  • seo-blog-writer - Python 3. Platform-specific extras:
    • Ghost adapter: pip install requests pyjwt; GHOST_URL + GHOST_ADMIN_KEY env vars.
    • WordPress adapter: pip install requests; WP_URL + WP_USER + WP_APP_PASSWORD env vars.
    • Static-site adapter: no credentials; just a target directory in your SSG repo.
  • blog-figure-svg - Python 3, plus one SVG rasterizer (ImageMagick / rsvg-convert / Inkscape / cairosvg) and optionally pngquant for compression.

Optional - ai-seo MCP (programmatic citation scoring)

seo-blog-writer Step 5 (AI-SEO audit) runs a programmatic citation-worthiness and schema pass when the ai-seo MCP (@automatelab/ai-seo-mcp) is connected. The skill checks at preflight and prompts you to install it if it's missing. Without it, Step 5 falls back to a manual reasoning pass covering the same ground.

npx -y @automatelab/ai-seo-mcp

Then register it in your agent's MCP config. See the ai-seo-mcp README for one-line configs for Claude Code, Cursor, and Cline.

Maintenance scripts

The per-post audit inside seo-blog-writer catches structural problems before publish. For corpus-wide drift - characters or banlist phrases that crept back across many posts - run scripts/audit-corpus.py against your content directory:

python3 scripts/audit-corpus.py path/to/your/content/
python3 scripts/audit-corpus.py content/posts/ --extra "synergy,best-in-class"

Exits 0 clean / 1 on hits - composes with CI for a pre-deploy drift gate.

Glossary auto-link

seo-blog-writer Step 7i (optional) pipes the draft HTML through scripts/inject-glossary-links.py, which wraps the first mention of each known technical term in an internal link to its definition page and writes a data-definition attribute for hover tooltips. Schema and starter file in skills/seo-blog-writer/references/glossary-schema.md; a self-contained tooltip-rendering snippet for your site <head> is at skills/seo-blog-writer/references/decorate.js.

python3 scripts/inject-glossary-links.py post.html \
    --glossary glossary.json --base-url /glossary/ > post.linked.html

The injector handles the awkward edges automatically: first-occurrence-only per post, longest-alias wins, skips headings / code / tables / blockquotes / TL;DR, and rejects matches embedded in identifier-like compounds (user-agent won't match agent, @scope/ai-seo-mcp won't match mcp). You bring the glossary file and the definition pages; the injector handles the linking.

Why platform-agnostic?

The writing pipeline (research, classify, draft, scrub, AI-SEO audit, JSON-LD generation) is the hard part. The publish step is glue. Coupling the two means you're locked into one CMS forever - and if you move from Ghost to WordPress, you rewrite the whole skill.

This repo separates them. The writer produces a stable bundle (<slug>.draft.html, <slug>.schema.html, <slug>.metadata.json) and the adapter ships it. Add Webflow, Sanity, or Strapi in an afternoon without touching the pipeline.

License

MIT-0 - public domain equivalent. Use, modify, redistribute without attribution.