{"skill":{"slug":"content-publisher","displayName":"Content Publisher","summary":"Publish content to Medium, Dev.to, and Hashnode from markdown files. Handles formatting, SEO optimization, scheduling, and cross-posting with canonical URLs....","description":"---\nname: content-publisher\ndescription: Publish content to Medium, Dev.to, and Hashnode from markdown files. Handles formatting, SEO optimization, scheduling, and cross-posting with canonical URLs. Use when asked to publish articles, blog posts, or cross-post content across platforms.\n---\n\n# Content Publisher\n\nPublish markdown articles to Medium, Dev.to, and Hashnode. Handles SEO, formatting, and canonical URLs for cross-posting.\n\n## Supported Platforms\n\n| Platform | Method | Auth |\n|----------|--------|------|\n| Medium | Browser automation | Google login |\n| Dev.to | API | API key in env `DEVTO_API_KEY` |\n| Hashnode | API | API key in env `HASHNODE_TOKEN` |\n\n## Workflow\n\n### 1. Prepare content\nEnsure article has:\n- Title (H1)\n- Subtitle/description\n- Tags (3-5 relevant tags)\n- Content body (markdown)\n- Optional: cover image URL\n\n### 2. SEO optimization checklist\nBefore publishing, verify:\n- [ ] Title contains target keyword (under 60 chars)\n- [ ] Meta description (under 155 chars)\n- [ ] H2/H3 structure with keywords\n- [ ] Internal/external links\n- [ ] Alt text on images\n- [ ] Call-to-action at end\n\n### 3. Publish to Medium (browser)\n```\n1. Navigate to https://medium.com/new-story\n2. Paste title and content\n3. Click \"Publish\" → set tags → confirm\n```\n\n### 4. Publish to Dev.to (API)\n```bash\ncurl -X POST https://dev.to/api/articles \\\n  -H \"api-key: $DEVTO_API_KEY\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"article\": {\n      \"title\": \"TITLE\",\n      \"body_markdown\": \"CONTENT\",\n      \"published\": true,\n      \"tags\": [\"ai\", \"productivity\"],\n      \"canonical_url\": \"MEDIUM_URL\"\n    }\n  }'\n```\n\n### 5. Publish to Hashnode (GraphQL)\n```bash\ncurl -X POST https://gql.hashnode.com \\\n  -H \"Authorization: $HASHNODE_TOKEN\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\n    \"query\": \"mutation { publishPost(input: { title: \\\"TITLE\\\", contentMarkdown: \\\"CONTENT\\\", publicationId: \\\"PUB_ID\\\", tags: [{slug: \\\"ai\\\"}] }) { post { url } } }\"\n  }'\n```\n\n## Cross-posting strategy\n\n1. **First**: Publish on Medium (or your primary platform)\n2. **Wait 24-48h**: Let search engines index the original\n3. **Cross-post**: Use `canonical_url` pointing to the original\n4. **Why**: Avoids duplicate content penalties in SEO\n\n## Publication submission (Medium)\n\nTo get more reach, submit to Publications:\n1. Find publication's \"Write for us\" page\n2. Follow their submission guidelines\n3. Submit via Medium's story settings → \"Add to publication\"\n\n### High-traffic AI Publications\n- Towards AI (AI/ML focused)\n- Better Programming (dev tools)\n- The Startup (business/tech)\n- Geek Culture (tech general)\n- Level Up Coding (programming)\n\n## Batch publishing\n\nFor multiple articles, process sequentially with delays:\n- Medium: max 2 articles per 24 hours\n- Dev.to: no strict limit, but space them 1+ hours apart\n- Hashnode: no strict limit\n","tags":{"latest":"1.0.0"},"stats":{"comments":0,"downloads":562,"installsAllTime":21,"installsCurrent":1,"stars":0,"versions":1},"createdAt":1773801786133,"updatedAt":1778491989335},"latestVersion":{"version":"1.0.0","createdAt":1773801786133,"changelog":"Initial release — publish articles to Medium, Dev.to, Hashnode with SEO optimization and cross-posting support.","license":"MIT-0"},"metadata":null,"owner":{"handle":"qoohsuan","userId":"s17716vf8bh77s3vpavep1kzfn83msft","displayName":"Qoohsuan","image":"https://avatars.githubusercontent.com/u/81729903?v=4"},"moderation":null}