{
  "schemaVersion": "1.0",
  "item": {
    "slug": "technical-blog-writing",
    "name": "Technical Blog Writing",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/okaris/technical-blog-writing",
    "canonicalUrl": "https://clawhub.ai/okaris/technical-blog-writing",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/technical-blog-writing",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=technical-blog-writing",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/technical-blog-writing"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/technical-blog-writing",
    "agentPageUrl": "https://openagent3.xyz/skills/technical-blog-writing/agent",
    "manifestUrl": "https://openagent3.xyz/skills/technical-blog-writing/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/technical-blog-writing/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Technical Blog Writing",
        "body": "Write developer-focused technical blog posts via inference.sh CLI."
      },
      {
        "title": "Quick Start",
        "body": "curl -fsSL https://cli.inference.sh | sh && infsh login\n\n# Research topic depth\ninfsh app run exa/search --input '{\n  \"query\": \"building REST API Node.js best practices 2024 tutorial\"\n}'\n\n# Generate header image\ninfsh app run infsh/html-to-image --input '{\n  \"html\": \"<div style=\\\"width:1200px;height:630px;background:linear-gradient(135deg,#0f172a,#1e293b);display:flex;align-items:center;padding:60px;font-family:ui-monospace,monospace;color:white\\\"><div><p style=\\\"font-size:18px;color:#38bdf8;margin:0\\\">// engineering blog</p><h1 style=\\\"font-size:48px;margin:16px 0;font-weight:800;font-family:system-ui;line-height:1.2\\\">How We Reduced API Latency by 90% with Edge Caching</h1><p style=\\\"font-size:20px;opacity:0.6;font-family:system-ui\\\">A deep dive into our CDN architecture</p></div></div>\"\n}'\n\nInstall note: The install script only detects your OS/architecture, downloads the matching binary from dist.inference.sh, and verifies its SHA-256 checksum. No elevated permissions or background processes. Manual install & verification available."
      },
      {
        "title": "1. Tutorial / How-To",
        "body": "Step-by-step instruction. The reader should be able to follow along and build something.\n\nStructure:\n1. What we're building (with screenshot/demo)\n2. Prerequisites\n3. Step 1: Setup\n4. Step 2: Core implementation\n5. Step 3: ...\n6. Complete code (GitHub link)\n7. Next steps / extensions\n\nRuleWhyShow the end result firstReader knows if it's worth continuingList prerequisites explicitlyDon't waste time of wrong audienceEvery code block should be runnableCopy-paste-run is the testExplain the \"why\" not just the \"how\"Tutorials that explain reasoning get sharedInclude error handlingReal code has errorsLink to complete code repoReference after tutorial"
      },
      {
        "title": "2. Deep Dive / Explainer",
        "body": "Explains a concept, technology, or architecture decision in depth.\n\nStructure:\n1. What is [concept] and why should you care?\n2. How it works (simplified mental model)\n3. How it works (detailed mechanics)\n4. Real-world example\n5. Trade-offs and when NOT to use it\n6. Further reading"
      },
      {
        "title": "3. Postmortem / Incident Report",
        "body": "Describes what went wrong, why, and what was fixed.\n\nStructure:\n1. Summary (what happened, impact, duration)\n2. Timeline of events\n3. Root cause analysis\n4. Fix implemented\n5. What we're doing to prevent recurrence\n6. Lessons learned"
      },
      {
        "title": "4. Benchmark / Comparison",
        "body": "Data-driven comparison of tools, approaches, or architectures.\n\nStructure:\n1. What we compared and why\n2. Methodology (so results are reproducible)\n3. Results with charts/tables\n4. Analysis (what the numbers mean)\n5. Recommendation (with caveats)\n6. Raw data / reproducibility instructions"
      },
      {
        "title": "5. Architecture / System Design",
        "body": "Explains how a system is built and why decisions were made.\n\nStructure:\n1. Problem we needed to solve\n2. Constraints and requirements\n3. Options considered\n4. Architecture chosen (with diagram)\n5. Trade-offs we accepted\n6. Results and lessons"
      },
      {
        "title": "Voice and Tone",
        "body": "DoDon'tBe direct: \"Use connection pooling\"\"You might want to consider using...\"Admit trade-offs: \"This adds complexity\"Pretend your solution is perfectUse \"we\" for team decisions\"I single-handedly architected...\"Specific numbers: \"reduced p99 from 800ms to 90ms\"\"significantly improved performance\"Cite sources and benchmarksMake unsourced claimsAcknowledge alternativesPretend yours is the only way"
      },
      {
        "title": "What Developers Hate",
        "body": "❌ \"In today's fast-paced world of technology...\" (filler)\n❌ \"As we all know...\" (if we all know, why are you writing it?)\n❌ \"Simply do X\" (nothing is simple if you're reading a tutorial)\n❌ \"It's easy to...\" (dismissive of reader's experience)\n❌ \"Obviously...\" (if it's obvious, don't write it)\n❌ Marketing language in technical content\n❌ Burying the lede under 3 paragraphs of context"
      },
      {
        "title": "Code Examples",
        "body": "RuleWhyEvery code block must be runnableBroken examples destroy trustShow complete, working examplesSnippets without context are uselessInclude language identifier in fenced blocksSyntax highlightingShow output/result after codeReader verifies understandingUse realistic variable namescalculateTotalRevenue not fooInclude error handling in examplesReal code handles errorsPin dependency versions\"Works with React 18.2\" not \"React\"\n\nGood code block format:\n\n```python\n# What this code does (one line)\ndef calculate_retry_delay(attempt: int, base_delay: float = 1.0) -> float:\n    \"\"\"Exponential backoff with jitter.\"\"\"\n    delay = base_delay * (2 ** attempt)\n    jitter = random.uniform(0, delay * 0.1)\n    return delay + jitter\n\n# Usage\ndelay = calculate_retry_delay(attempt=3)  # ~8.0-8.8 seconds\n\n### Explanation Depth\n\n| Audience Signal | Depth |\n|----------------|-------|\n| \"Getting started with X\" | Explain everything, assume no prior knowledge |\n| \"Advanced X patterns\" | Skip basics, go deep on nuances |\n| \"X vs Y\" | Assume familiarity with both, focus on differences |\n| \"How we built X\" | Technical audience, can skip fundamentals |\n\n**State your assumed audience level explicitly** at the start:\n\n\"This post assumes familiarity with Docker and basic Kubernetes concepts.\nIf you're new to containers, start with [our intro post].\"\n\n## Blog Post Structure\n\n### The Ideal Structure\n\n```markdown\n# Title (contains primary keyword, states outcome)\n\n[Hero image or diagram]\n\n**TL;DR:** [2-3 sentence summary with key takeaway]\n\n## The Problem / Why This Matters\n[Set up why the reader should care — specific, not generic]\n\n## The Solution / How We Did It\n[Core content — code, architecture, explanation]\n\n### Step 1: [First thing]\n[Explanation + code + output]\n\n### Step 2: [Second thing]\n[Explanation + code + output]\n\n## Results\n[Numbers, benchmarks, outcomes — be specific]\n\n## Trade-offs and Limitations\n[Honest about downsides — builds trust]\n\n## Conclusion\n[Key takeaway + what to do next]\n\n## Further Reading\n[3-5 relevant links]"
      },
      {
        "title": "Word Count by Type",
        "body": "TypeWord CountWhyQuick tip500-800One concept, one exampleTutorial1,500-3,000Step-by-step needs detailDeep dive2,000-4,000Thorough explorationArchitecture post2,000-3,500Diagrams carry some loadBenchmark1,500-2,500Data and charts do heavy lifting"
      },
      {
        "title": "When to Use Diagrams",
        "body": "ScenarioDiagram TypeRequest flowSequence diagramSystem architectureBox-and-arrow diagramDecision logicFlowchartData modelER diagramPerformance comparisonBar/line chartBefore/afterSide-by-side\n\n# Generate architecture diagram\ninfsh app run infsh/html-to-image --input '{\n  \"html\": \"<div style=\\\"width:1200px;height:600px;background:#0f172a;display:flex;align-items:center;justify-content:center;padding:40px;font-family:system-ui;color:white\\\"><div style=\\\"display:flex;gap:40px;align-items:center\\\"><div style=\\\"background:#1e293b;border:2px solid #334155;border-radius:8px;padding:24px;text-align:center;width:160px\\\"><p style=\\\"font-size:14px;color:#94a3b8;margin:0\\\">Client</p><p style=\\\"font-size:18px;font-weight:bold;margin:8px 0 0\\\">React App</p></div><div style=\\\"color:#64748b;font-size:32px\\\">→</div><div style=\\\"background:#1e293b;border:2px solid #3b82f6;border-radius:8px;padding:24px;text-align:center;width:160px\\\"><p style=\\\"font-size:14px;color:#94a3b8;margin:0\\\">Edge</p><p style=\\\"font-size:18px;font-weight:bold;margin:8px 0 0\\\">CDN Cache</p></div><div style=\\\"color:#64748b;font-size:32px\\\">→</div><div style=\\\"background:#1e293b;border:2px solid #334155;border-radius:8px;padding:24px;text-align:center;width:160px\\\"><p style=\\\"font-size:14px;color:#94a3b8;margin:0\\\">API</p><p style=\\\"font-size:18px;font-weight:bold;margin:8px 0 0\\\">Node.js</p></div><div style=\\\"color:#64748b;font-size:32px\\\">→</div><div style=\\\"background:#1e293b;border:2px solid #334155;border-radius:8px;padding:24px;text-align:center;width:160px\\\"><p style=\\\"font-size:14px;color:#94a3b8;margin:0\\\">Database</p><p style=\\\"font-size:18px;font-weight:bold;margin:8px 0 0\\\">PostgreSQL</p></div></div></div>\"\n}'\n\n# Generate benchmark chart\ninfsh app run infsh/python-executor --input '{\n  \"code\": \"import matplotlib.pyplot as plt\\nimport matplotlib\\nmatplotlib.use(\\\"Agg\\\")\\n\\nfig, ax = plt.subplots(figsize=(12, 6))\\nfig.patch.set_facecolor(\\\"#0f172a\\\")\\nax.set_facecolor(\\\"#0f172a\\\")\\n\\ntools = [\\\"Express\\\", \\\"Fastify\\\", \\\"Hono\\\", \\\"Elysia\\\"]\\nrps = [15000, 45000, 62000, 78000]\\ncolors = [\\\"#64748b\\\", \\\"#64748b\\\", \\\"#3b82f6\\\", \\\"#64748b\\\"]\\n\\nax.barh(tools, rps, color=colors, height=0.5)\\nfor i, v in enumerate(rps):\\n    ax.text(v + 1000, i, f\\\"{v:,} req/s\\\", va=\\\"center\\\", color=\\\"white\\\", fontsize=14)\\n\\nax.set_xlabel(\\\"Requests per second\\\", color=\\\"white\\\", fontsize=14)\\nax.set_title(\\\"HTTP Framework Benchmark (Hello World)\\\", color=\\\"white\\\", fontsize=18, fontweight=\\\"bold\\\")\\nax.tick_params(colors=\\\"white\\\", labelsize=12)\\nax.spines[\\\"top\\\"].set_visible(False)\\nax.spines[\\\"right\\\"].set_visible(False)\\nax.spines[\\\"bottom\\\"].set_color(\\\"#334155\\\")\\nax.spines[\\\"left\\\"].set_color(\\\"#334155\\\")\\nplt.tight_layout()\\nplt.savefig(\\\"benchmark.png\\\", dpi=150, facecolor=\\\"#0f172a\\\")\\nprint(\\\"Saved\\\")\"\n}'"
      },
      {
        "title": "Where Developers Read",
        "body": "PlatformFormatHow to PostYour blogFull articlePrimary — own your contentDev.toCross-post (canonical URL back to yours)Markdown importHashnodeCross-post (canonical URL)Markdown importHacker NewsLink submissionShow HN for projects, tell HN for storiesReddit (r/programming, r/webdev, etc.)Link or discussionFollow subreddit rulesTwitter/XThread summary + linkSee twitter-thread-creation skillLinkedInAdapted version + linkSee linkedin-content skill\n\n# Cross-post thread to X\ninfsh app run x/post-create --input '{\n  \"text\": \"New blog post: How We Reduced API Latency by 90%\\n\\nThe short version:\\n→ Moved computation to edge\\n→ Aggressive cache-control headers\\n→ Eliminated N+1 queries\\n\\np99 went from 800ms to 90ms.\\n\\nFull deep dive with code: [link]\"\n}'"
      },
      {
        "title": "Common Mistakes",
        "body": "MistakeProblemFixNo TL;DRBusy devs leave before getting the point2-3 sentence summary at the topBroken code examplesDestroys all credibilityTest every code block before publishingNo version pinningCode breaks in 6 months\"Works with Node 20, React 18.2\"\"Simply do X\"Dismissive, condescendingRemove \"simply\", \"just\", \"easily\"No diagrams for architectureWalls of text describing systemsOne diagram > 500 words of descriptionMarketing toneDevelopers instantly disengageDirect, technical, honestNo trade-offs sectionReads as biased marketingAlways discuss downsidesGiant introduction before contentReaders bounceGet to the point in 2-3 paragraphsUnpinned dependenciesTutorial breaks for future readersPin versions, note date writtenNo \"Further Reading\"Dead end, no context3-5 links to deepen understanding"
      },
      {
        "title": "Related Skills",
        "body": "npx skills add inference-sh/skills@seo-content-brief\nnpx skills add inference-sh/skills@content-repurposing\nnpx skills add inference-sh/skills@og-image-design\n\nBrowse all apps: infsh app list"
      }
    ],
    "body": "Technical Blog Writing\n\nWrite developer-focused technical blog posts via inference.sh CLI.\n\nQuick Start\ncurl -fsSL https://cli.inference.sh | sh && infsh login\n\n# Research topic depth\ninfsh app run exa/search --input '{\n  \"query\": \"building REST API Node.js best practices 2024 tutorial\"\n}'\n\n# Generate header image\ninfsh app run infsh/html-to-image --input '{\n  \"html\": \"<div style=\\\"width:1200px;height:630px;background:linear-gradient(135deg,#0f172a,#1e293b);display:flex;align-items:center;padding:60px;font-family:ui-monospace,monospace;color:white\\\"><div><p style=\\\"font-size:18px;color:#38bdf8;margin:0\\\">// engineering blog</p><h1 style=\\\"font-size:48px;margin:16px 0;font-weight:800;font-family:system-ui;line-height:1.2\\\">How We Reduced API Latency by 90% with Edge Caching</h1><p style=\\\"font-size:20px;opacity:0.6;font-family:system-ui\\\">A deep dive into our CDN architecture</p></div></div>\"\n}'\n\n\nInstall note: The install script only detects your OS/architecture, downloads the matching binary from dist.inference.sh, and verifies its SHA-256 checksum. No elevated permissions or background processes. Manual install & verification available.\n\nPost Types\n1. Tutorial / How-To\n\nStep-by-step instruction. The reader should be able to follow along and build something.\n\nStructure:\n1. What we're building (with screenshot/demo)\n2. Prerequisites\n3. Step 1: Setup\n4. Step 2: Core implementation\n5. Step 3: ...\n6. Complete code (GitHub link)\n7. Next steps / extensions\n\nRule\tWhy\nShow the end result first\tReader knows if it's worth continuing\nList prerequisites explicitly\tDon't waste time of wrong audience\nEvery code block should be runnable\tCopy-paste-run is the test\nExplain the \"why\" not just the \"how\"\tTutorials that explain reasoning get shared\nInclude error handling\tReal code has errors\nLink to complete code repo\tReference after tutorial\n2. Deep Dive / Explainer\n\nExplains a concept, technology, or architecture decision in depth.\n\nStructure:\n1. What is [concept] and why should you care?\n2. How it works (simplified mental model)\n3. How it works (detailed mechanics)\n4. Real-world example\n5. Trade-offs and when NOT to use it\n6. Further reading\n\n3. Postmortem / Incident Report\n\nDescribes what went wrong, why, and what was fixed.\n\nStructure:\n1. Summary (what happened, impact, duration)\n2. Timeline of events\n3. Root cause analysis\n4. Fix implemented\n5. What we're doing to prevent recurrence\n6. Lessons learned\n\n4. Benchmark / Comparison\n\nData-driven comparison of tools, approaches, or architectures.\n\nStructure:\n1. What we compared and why\n2. Methodology (so results are reproducible)\n3. Results with charts/tables\n4. Analysis (what the numbers mean)\n5. Recommendation (with caveats)\n6. Raw data / reproducibility instructions\n\n5. Architecture / System Design\n\nExplains how a system is built and why decisions were made.\n\nStructure:\n1. Problem we needed to solve\n2. Constraints and requirements\n3. Options considered\n4. Architecture chosen (with diagram)\n5. Trade-offs we accepted\n6. Results and lessons\n\nWriting Rules for Developers\nVoice and Tone\nDo\tDon't\nBe direct: \"Use connection pooling\"\t\"You might want to consider using...\"\nAdmit trade-offs: \"This adds complexity\"\tPretend your solution is perfect\nUse \"we\" for team decisions\t\"I single-handedly architected...\"\nSpecific numbers: \"reduced p99 from 800ms to 90ms\"\t\"significantly improved performance\"\nCite sources and benchmarks\tMake unsourced claims\nAcknowledge alternatives\tPretend yours is the only way\nWhat Developers Hate\n❌ \"In today's fast-paced world of technology...\" (filler)\n❌ \"As we all know...\" (if we all know, why are you writing it?)\n❌ \"Simply do X\" (nothing is simple if you're reading a tutorial)\n❌ \"It's easy to...\" (dismissive of reader's experience)\n❌ \"Obviously...\" (if it's obvious, don't write it)\n❌ Marketing language in technical content\n❌ Burying the lede under 3 paragraphs of context\n\nCode Examples\nRule\tWhy\nEvery code block must be runnable\tBroken examples destroy trust\nShow complete, working examples\tSnippets without context are useless\nInclude language identifier in fenced blocks\tSyntax highlighting\nShow output/result after code\tReader verifies understanding\nUse realistic variable names\tcalculateTotalRevenue not foo\nInclude error handling in examples\tReal code handles errors\nPin dependency versions\t\"Works with React 18.2\" not \"React\"\nGood code block format:\n\n```python\n# What this code does (one line)\ndef calculate_retry_delay(attempt: int, base_delay: float = 1.0) -> float:\n    \"\"\"Exponential backoff with jitter.\"\"\"\n    delay = base_delay * (2 ** attempt)\n    jitter = random.uniform(0, delay * 0.1)\n    return delay + jitter\n\n# Usage\ndelay = calculate_retry_delay(attempt=3)  # ~8.0-8.8 seconds\n\n\n### Explanation Depth\n\n| Audience Signal | Depth |\n|----------------|-------|\n| \"Getting started with X\" | Explain everything, assume no prior knowledge |\n| \"Advanced X patterns\" | Skip basics, go deep on nuances |\n| \"X vs Y\" | Assume familiarity with both, focus on differences |\n| \"How we built X\" | Technical audience, can skip fundamentals |\n\n**State your assumed audience level explicitly** at the start:\n\n\n\n\"This post assumes familiarity with Docker and basic Kubernetes concepts. If you're new to containers, start with [our intro post].\"\n\n\n## Blog Post Structure\n\n### The Ideal Structure\n\n```markdown\n# Title (contains primary keyword, states outcome)\n\n[Hero image or diagram]\n\n**TL;DR:** [2-3 sentence summary with key takeaway]\n\n## The Problem / Why This Matters\n[Set up why the reader should care — specific, not generic]\n\n## The Solution / How We Did It\n[Core content — code, architecture, explanation]\n\n### Step 1: [First thing]\n[Explanation + code + output]\n\n### Step 2: [Second thing]\n[Explanation + code + output]\n\n## Results\n[Numbers, benchmarks, outcomes — be specific]\n\n## Trade-offs and Limitations\n[Honest about downsides — builds trust]\n\n## Conclusion\n[Key takeaway + what to do next]\n\n## Further Reading\n[3-5 relevant links]\n\nWord Count by Type\nType\tWord Count\tWhy\nQuick tip\t500-800\tOne concept, one example\nTutorial\t1,500-3,000\tStep-by-step needs detail\nDeep dive\t2,000-4,000\tThorough exploration\nArchitecture post\t2,000-3,500\tDiagrams carry some load\nBenchmark\t1,500-2,500\tData and charts do heavy lifting\nDiagrams and Visuals\nWhen to Use Diagrams\nScenario\tDiagram Type\nRequest flow\tSequence diagram\nSystem architecture\tBox-and-arrow diagram\nDecision logic\tFlowchart\nData model\tER diagram\nPerformance comparison\tBar/line chart\nBefore/after\tSide-by-side\n# Generate architecture diagram\ninfsh app run infsh/html-to-image --input '{\n  \"html\": \"<div style=\\\"width:1200px;height:600px;background:#0f172a;display:flex;align-items:center;justify-content:center;padding:40px;font-family:system-ui;color:white\\\"><div style=\\\"display:flex;gap:40px;align-items:center\\\"><div style=\\\"background:#1e293b;border:2px solid #334155;border-radius:8px;padding:24px;text-align:center;width:160px\\\"><p style=\\\"font-size:14px;color:#94a3b8;margin:0\\\">Client</p><p style=\\\"font-size:18px;font-weight:bold;margin:8px 0 0\\\">React App</p></div><div style=\\\"color:#64748b;font-size:32px\\\">→</div><div style=\\\"background:#1e293b;border:2px solid #3b82f6;border-radius:8px;padding:24px;text-align:center;width:160px\\\"><p style=\\\"font-size:14px;color:#94a3b8;margin:0\\\">Edge</p><p style=\\\"font-size:18px;font-weight:bold;margin:8px 0 0\\\">CDN Cache</p></div><div style=\\\"color:#64748b;font-size:32px\\\">→</div><div style=\\\"background:#1e293b;border:2px solid #334155;border-radius:8px;padding:24px;text-align:center;width:160px\\\"><p style=\\\"font-size:14px;color:#94a3b8;margin:0\\\">API</p><p style=\\\"font-size:18px;font-weight:bold;margin:8px 0 0\\\">Node.js</p></div><div style=\\\"color:#64748b;font-size:32px\\\">→</div><div style=\\\"background:#1e293b;border:2px solid #334155;border-radius:8px;padding:24px;text-align:center;width:160px\\\"><p style=\\\"font-size:14px;color:#94a3b8;margin:0\\\">Database</p><p style=\\\"font-size:18px;font-weight:bold;margin:8px 0 0\\\">PostgreSQL</p></div></div></div>\"\n}'\n\n# Generate benchmark chart\ninfsh app run infsh/python-executor --input '{\n  \"code\": \"import matplotlib.pyplot as plt\\nimport matplotlib\\nmatplotlib.use(\\\"Agg\\\")\\n\\nfig, ax = plt.subplots(figsize=(12, 6))\\nfig.patch.set_facecolor(\\\"#0f172a\\\")\\nax.set_facecolor(\\\"#0f172a\\\")\\n\\ntools = [\\\"Express\\\", \\\"Fastify\\\", \\\"Hono\\\", \\\"Elysia\\\"]\\nrps = [15000, 45000, 62000, 78000]\\ncolors = [\\\"#64748b\\\", \\\"#64748b\\\", \\\"#3b82f6\\\", \\\"#64748b\\\"]\\n\\nax.barh(tools, rps, color=colors, height=0.5)\\nfor i, v in enumerate(rps):\\n    ax.text(v + 1000, i, f\\\"{v:,} req/s\\\", va=\\\"center\\\", color=\\\"white\\\", fontsize=14)\\n\\nax.set_xlabel(\\\"Requests per second\\\", color=\\\"white\\\", fontsize=14)\\nax.set_title(\\\"HTTP Framework Benchmark (Hello World)\\\", color=\\\"white\\\", fontsize=18, fontweight=\\\"bold\\\")\\nax.tick_params(colors=\\\"white\\\", labelsize=12)\\nax.spines[\\\"top\\\"].set_visible(False)\\nax.spines[\\\"right\\\"].set_visible(False)\\nax.spines[\\\"bottom\\\"].set_color(\\\"#334155\\\")\\nax.spines[\\\"left\\\"].set_color(\\\"#334155\\\")\\nplt.tight_layout()\\nplt.savefig(\\\"benchmark.png\\\", dpi=150, facecolor=\\\"#0f172a\\\")\\nprint(\\\"Saved\\\")\"\n}'\n\nDistribution\nWhere Developers Read\nPlatform\tFormat\tHow to Post\nYour blog\tFull article\tPrimary — own your content\nDev.to\tCross-post (canonical URL back to yours)\tMarkdown import\nHashnode\tCross-post (canonical URL)\tMarkdown import\nHacker News\tLink submission\tShow HN for projects, tell HN for stories\nReddit (r/programming, r/webdev, etc.)\tLink or discussion\tFollow subreddit rules\nTwitter/X\tThread summary + link\tSee twitter-thread-creation skill\nLinkedIn\tAdapted version + link\tSee linkedin-content skill\n# Cross-post thread to X\ninfsh app run x/post-create --input '{\n  \"text\": \"New blog post: How We Reduced API Latency by 90%\\n\\nThe short version:\\n→ Moved computation to edge\\n→ Aggressive cache-control headers\\n→ Eliminated N+1 queries\\n\\np99 went from 800ms to 90ms.\\n\\nFull deep dive with code: [link]\"\n}'\n\nCommon Mistakes\nMistake\tProblem\tFix\nNo TL;DR\tBusy devs leave before getting the point\t2-3 sentence summary at the top\nBroken code examples\tDestroys all credibility\tTest every code block before publishing\nNo version pinning\tCode breaks in 6 months\t\"Works with Node 20, React 18.2\"\n\"Simply do X\"\tDismissive, condescending\tRemove \"simply\", \"just\", \"easily\"\nNo diagrams for architecture\tWalls of text describing systems\tOne diagram > 500 words of description\nMarketing tone\tDevelopers instantly disengage\tDirect, technical, honest\nNo trade-offs section\tReads as biased marketing\tAlways discuss downsides\nGiant introduction before content\tReaders bounce\tGet to the point in 2-3 paragraphs\nUnpinned dependencies\tTutorial breaks for future readers\tPin versions, note date written\nNo \"Further Reading\"\tDead end, no context\t3-5 links to deepen understanding\nRelated Skills\nnpx skills add inference-sh/skills@seo-content-brief\nnpx skills add inference-sh/skills@content-repurposing\nnpx skills add inference-sh/skills@og-image-design\n\n\nBrowse all apps: infsh app list"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/okaris/technical-blog-writing",
    "publisherUrl": "https://clawhub.ai/okaris/technical-blog-writing",
    "owner": "okaris",
    "version": "0.1.5",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/technical-blog-writing",
    "downloadUrl": "https://openagent3.xyz/downloads/technical-blog-writing",
    "agentUrl": "https://openagent3.xyz/skills/technical-blog-writing/agent",
    "manifestUrl": "https://openagent3.xyz/skills/technical-blog-writing/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/technical-blog-writing/agent.md"
  }
}