com um clique
suparankpublish
// Publishing phase - publish articles to WordPress, Ghost, generate images, and send webhooks.
// Publishing phase - publish articles to WordPress, Ghost, generate images, and send webhooks.
| name | suparank/publish |
| description | Publishing phase - publish articles to WordPress, Ghost, generate images, and send webhooks. |
| user_invocable | true |
You handle publishing content to CMS platforms, generating images, and sending webhooks. All publishing uses curl commands via the Bash tool.
~/.claude/suparank-credentials.json~/.suparank/credentials.json as fallback/suparank/setup to configure WordPress, Ghost, or image generation.".claude/suparank.json for site contextTriggers: "publish to WordPress", "post to WordPress", "send to WordPress"
Requirements: ~/.claude/suparank-credentials.json must have a wordpress section with:
site_url: WordPress site URLusername: WordPress usernameapp_password: WordPress application passwordSteps:
Get the article to publish:
.claude/suparank-session.json for the latest saved article.claude/suparank-content/[folder]/article.mdmetadata.jsonConvert markdown content to HTML:
<img> tagsPublish via WordPress REST API using curl:
curl -s -X POST "${site_url}/wp-json/wp/v2/posts" \
-H "Authorization: Basic $(echo -n '${username}:${app_password}' | base64)" \
-H "Content-Type: application/json" \
-d '{
"title": "Article Title",
"content": "<html content>",
"status": "draft",
"excerpt": "Meta description"
}'
Parse the response to get:
If a featured image URL is available (from image generation), set it:
Report success:
Update session: mark article as published_to: ["wordpress"]
Status options: Ask the user: "Publish as draft (default) or live?"
draft (default, safer)publish (immediately live)Triggers: "publish to Ghost", "post to Ghost", "send to Ghost"
Requirements: ~/.claude/suparank-credentials.json must have a ghost section with:
api_url: Ghost site API URLadmin_api_key: Ghost Admin API key (format: id:secret)Steps:
Get the article (same as WordPress flow above)
Convert markdown to HTML
Generate a Ghost Admin API JWT token using a Node.js one-liner:
TOKEN=$(node -e "
const c = require('crypto');
const [id, secret] = '${admin_api_key}'.split(':');
const h = Buffer.from(JSON.stringify({alg:'HS256',typ:'JWT',kid:id})).toString('base64url');
const now = Math.floor(Date.now()/1000);
const p = Buffer.from(JSON.stringify({iat:now,exp:now+300,aud:'/admin/'})).toString('base64url');
const sig = c.createHmac('sha256', Buffer.from(secret,'hex')).update(h+'.'+p).digest('base64url');
console.log(h+'.'+p+'.'+sig);
")
{
"posts": [{
"title": "Article Title",
"mobiledoc": "{\"version\":\"0.3.1\",\"atoms\":[],\"cards\":[[\"html\",{\"html\":\"<html content>\"}]],\"markups\":[],\"sections\":[[10,0]]}",
"status": "draft",
"tags": [{"name": "keyword1"}, {"name": "keyword2"}],
"feature_image": "image_url_if_available"
}]
}
curl -s -X POST "${api_url}/ghost/api/admin/posts/" \
-H "Authorization: Ghost ${TOKEN}" \
-H "Content-Type: application/json" \
-d '${post_data}'
Triggers: "generate images", "create images", "generate hero image", "make images for article"
Requirements: ~/.claude/suparank-credentials.json must have image provider config:
image_provider: "fal" (currently the only supported provider)fal.api_key: fal.ai API keyIf image_provider is missing or set to an unsupported value (anything other than "fal"):
Steps:
~/.claude/skills/suparank/templates/image-prompt-designer.mdcurl -s -X POST "https://fal.run/fal-ai/flux/schnell" \
-H "Authorization: Key ${fal_api_key}" \
-H "Content-Type: application/json" \
-d '{
"prompt": "detailed image prompt here",
"image_size": "landscape_16_9",
"num_images": 1
}'
result.images[0].urlImage count calculation:
Triggers: "send webhook", "notify Slack", "send to Make", "trigger webhook"
Requirements: ~/.claude/suparank-credentials.json must have webhooks section
Steps:
For Slack:
curl -s -X POST "${slack_url}" \
-H "Content-Type: application/json" \
-d '{"text": "New article published: [title]\n[url]"}'
For Make/n8n/Zapier:
curl -s -X POST "${webhook_url}" \
-H "Content-Type: application/json" \
-d '{
"source": "suparank",
"timestamp": "2026-02-23T10:30:00Z",
"title": "Article Title",
"url": "https://...",
"keywords": ["keyword1", "keyword2"]
}'
When publishing multiple articles (from multi-article pipeline):
When invoked by the pipeline orchestrator:
If credentials are missing for a specific platform:
Example: "Published to WordPress. Skipped Ghost (not configured). Skipped images (no fal.ai key)."
If image generation fails, handle gracefully:
/suparank/publish later."/suparank/setup."Never block the entire publishing phase because image generation failed.
~/.claude/suparank-credentials.json (or legacy ~/.suparank/credentials.json)sk_l********eyJhbGci...Authorization: Basic **** (never the actual base64 string)SEO research phase - keyword research, SEO strategy, topical maps, and content calendars.
Interactive setup wizard for Suparank. Creates project config and optional publishing credentials.
AI-powered SEO content creation toolkit. Research keywords, write optimized articles, and publish to WordPress/Ghost.
Content creation phase - write SEO-optimized articles and generate image prompts.
Content optimization phase - quality check, GEO optimization, internal links, and schema markup.
Full content creation pipeline - research, write, optimize, and publish SEO articles in one workflow.