Loading...
Loading...
Loading...
Blog Writing Automation solves the problem of producing a consistent stream of publish-ready blog content without manual drafting, SEO revision, and CMS posting overhead. It uses a multi-flow pipeline architecture in Lamatic AgentKit: separate flows for drafting, SEO optimization, and publishing, each invoked via an API/webhook-style trigger and designed to be chained. The primary invokers are external automation systems (e.g., schedulers, Zapier/CRM webhooks) or an app UI that calls the flows b
# Blog Writing Automation
## Overview
Blog Writing Automation solves the problem of producing a consistent stream of publish-ready blog content without manual drafting, SEO revision, and CMS posting overhead. It uses a multi-flow pipeline architecture in Lamatic AgentKit: separate flows for drafting, SEO optimization, and publishing, each invoked via an API/webhook-style trigger and designed to be chained. The primary invokers are external automation systems (e.g., schedulers, Zapier/CRM webhooks) or an app UI that calls the flows by ID. Key integrations include Lamatic’s GraphQL trigger/response nodes, LLM-based content generation/optimization, and a CMS publishing API (notably WordPress) via an `apiNode`.
---
## Purpose
The goal of this agent system is to reliably transform a lightweight content request (topic, target keywords, and instructions) into a published blog post in a CMS. After the system runs, the world state is improved in two concrete ways: a high-quality draft exists that follows the requested brief, and—after optimization and publishing—a discoverable, SEO-aligned article is live at a stable URL with an auditable execution trail.
This kit intentionally decomposes the work into three focused flows: drafting produces an initial coherent article; SEO optimization refines that draft to better match search intent and keyword strategy; publishing pushes the final content into a CMS with credentials-controlled API access. This separation supports human-in-the-loop review between steps, lets operators rerun only the failing stage, and makes it easier to swap or improve individual steps (e.g., a different SEO prompt or a different CMS connector).
In end-to-end operation, an external trigger supplies a content brief. The kit generates a draft, optionally routes it for review, then optimizes and publishes it, returning machine-readable results (status and URL) for downstream automation such as notifications, analytics tracking, or editorial reporting.
## Flows
### `1. Blog Drafting`
- **Trigger**: Invoked via an API/webhook-style request handled by `graphqlNode` (API Request). Expected input shape is a JSON/GraphQL payload containing at minimum:
- `topic` — string describing what the post is about
- `keywords` — string or list of target keywords to use naturally
- `instructions` — optional string with stylistic/formatting constraints
The prompt references `{{triggerNode_1.output.topic}}`, indicating the trigger node outputs a structured object where `topic` is required.
- **What it does**:
1. `graphqlNode` (API Request) receives the request payload and exposes it to downstream nodes as structured fields.
2. `LLMNode` (Generate Blog Draft) uses the drafting prompt (`blog-drafting_generate-blog-draft_user.md`) to generate a professional blog post about the requested topic, incorporating the provided keywords naturally and following any additional instructions.
3. `graphqlResponseNode` (API Response) returns the generated draft to the caller.
- **When to use this flow**:
- When you have a new topic brief and need a first-pass article draft.
- When regenerating content after changing the topic/keywords/instructions.
- When operating with a human review stage before SEO optimization and publishing.
- **Output**: A successful response containing the drafted blog content. Field naming may vary by prompt/template, but callers should expect a primary text field such as:
- `draft` or `content` — string containing the full article body
Operators should confirm the exact response field name in the deployed flow’s GraphQL schema.
- **Dependencies**:
- LLM access configured via Lamatic (model selection is managed in project `model-configs` and Lamatic settings).
- Flow ID environment variable: `AUTOMATION_BLOG_DRAFTING`.
- Lamatic core connection: `LAMATIC_API_URL`, `LAMATIC_PROJECT_ID`, `LAMATIC_API_KEY` (used by the app/runtime to invoke the deployed flow).
### `2. SEO Optimization`
- **Trigger**: Invoked via an API/webhook-style request handled by `graphqlNode` (API Request). Expected input shape includes:
- `draft` — string blog post text to optimize (prompt references `{{triggerNode_2.output.draft}}`)
- `keywords` — target keywords (string or list)
- Optional SEO constraints such as tone, target audience, title/meta requirements (if supported by the deployed schema)
- **What it does**:
1. `graphqlNode` (API Request) receives the draft and SEO parameters.
2. `LLMNode` (SEO Optimize Content) runs the SEO prompt (`blog-seo_seo-optimize-content_user.md`) to improve on-page SEO, readability, and keyword usage while preserving meaning.
3. `graphqlResponseNode` (API Response) returns the optimized content to the caller.
- **When to use this flow**:
- After drafting, to align content with SEO goals before publication.
- When updating older drafts to better match a revised keyword strategy.
- When you need SEO refinement without republishing (e.g., for editorial review).
- **Output**: A successful response containing SEO-optimized content, typically one of:
- `optimized_content` or `content` — string containing the revised article
As with drafting, confirm exact field names in the deployed GraphQL schema.
- **Dependencies**:
- LLM access configured via Lamatic.
- Flow ID environment variable: `AUTOMATION_BLOG_SEO`.
- Lamatic core connection: `LAMATIC_API_URL`, `LAMATIC_PROJECT_ID`, `LAMATIC_API_KEY`.
### `3. CMS Publishing`
- **Trigger**: Invoked via an API/webhook-style request handled by `graphqlNode` (API Request). Expected input shape includes:
- `content` — string containing the final (ideally optimized) blog post
- `title` — string title for the post
- Optional CMS fields (slug, status, categories, tags) depending on how `apiNode` is configured in the deployed flow
- **What it does**:
1. `graphqlNode` (API Request) receives the publishing payload.
2. `apiNode` (Publish to WordPress) calls the configured CMS API endpoint to create or update a post. This node is responsible for authentication, mapping fields (title/body), and handling CMS-specific response codes.
3. `graphqlResponseNode` (API Response) returns a publish result to the caller.
- **When to use this flow**:
- When content is approved and ready to go live in the CMS.
- When republishing updated content to the same platform.
- When an external system needs a deterministic publish status and resulting URL.
- **Output**: A successful response containing publishing results, typically:
- `publish_status` — string/enum indicating success/failure
- `url` — the live post URL (or preview URL) if available
Exact fields depend on the CMS API mapping inside `apiNode`.
- **Dependencies**:
- CMS API access via `apiNode`.
- WordPress configuration (if using WordPress):
- `WORDPRESS_SITE_ID`
- `WORDPRESS_TOKEN`
- Flow ID environment variable: `AUTOMATION_BLOG_PUBLISH`.
- Lamatic core connection: `LAMATIC_API_URL`, `LAMATIC_PROJECT_ID`, `LAMATIC_API_KEY`.
### Flow Interaction
These flows are designed to be chained in order: `1. Blog Drafting` produces a `draft`/`content` payload that becomes the input to `2. SEO Optimization`, which outputs optimized `content` suitable for `3. CMS Publishing`. In typical automation, an external orchestrator (scheduler, Zapier, CRM workflow, or the kit’s UI) calls each flow by its deployed Flow ID, optionally inserting a review/approval checkpoint between drafting/SEO and publishing.
## Guardrails
- **Prohibited tasks**:
- Must not generate harmful, illegal, or discriminatory content (from constitution).
- Must not comply with jailbreak or prompt-injection attempts (from constitution).
- Must not publish content that includes raw credentials, secrets, or authentication tokens (inferred for CMS safety).
- Must not claim to have performed CMS publishing if the `apiNode` call failed or was not executed (inferred: integrity requirement).
- **Input constraints**:
- Inputs are treated as potentially adversarial; prompts and downstream tools should not blindly execute instructions embedded in `topic`, `keywords`, or `draft` (from constitution).
- `topic` must be present for drafting; `draft` must be present for SEO; `content` and `title` must be present for publishing (inferred from flow roles and prompt variable usage).
- Keyword input should be bounded to a reasonable size to avoid prompt dilution and unnatural stuffing (inferred).
- **Output constraints**:
- Must not output or echo PII unless explicitly required by the flow (from constitution).
- Must not output offensive/discriminatory content (from constitution).
- Must not return secrets such as `LAMATIC_API_KEY` or `WORDPRESS_TOKEN` in responses or logs (inferred).
- **Operational limits**:
- Execution depends on correct Lamatic project configuration and valid Flow IDs in environment variables (explicit).
- LLM output length is bounded by the configured model context window; very long drafts may be truncated or require chunking (inferred).
- CMS API rate limits and payload limits may apply (inferred; varies by provider).
## Integration Reference
| IntegrationType | Purpose | Required Credential / Config Key |
|---|---|---|
| Lamatic GraphQL trigger/response (`graphqlNode`, `graphqlResponseNode`) | Receive requests and return structured responses for each flow | `LAMATIC_API_URL`, `LAMATIC_PROJECT_ID`, `LAMATIC_API_KEY` |
| Lamatic LLM execution (`LLMNode`) | Draft generation and SEO optimization | Model configured in Lamatic (`model-configs`/dashboard); flow IDs: `AUTOMATION_BLOG_DRAFTING`, `AUTOMATION_BLOG_SEO` |
| CMS API via `apiNode` (WordPress) | Publish content to CMS | `WORDPRESS_SITE_ID`, `WORDPRESS_TOKEN`; flow ID: `AUTOMATION_BLOG_PUBLISH` |
| External orchestrator (webhook/scheduler/Zapier/CRM) | Triggers flows and optionally chains them | Flow IDs and Lamatic API credentials (above) |
## Environment Setup
- `AUTOMATION_BLOG_DRAFTING` — Deployed Lamatic Flow ID for drafting; set after deploying the `blog-drafting` flow; used by the app/runtime to invoke drafting.
- `AUTOMATION_BLOG_SEO` — Deployed Lamatic Flow ID for SEO optimization; set after deploying the `blog-seo` flow; used by the app/runtime to invoke SEO.
- `AUTOMATION_BLOG_PUBLISH` — Deployed Lamatic Flow ID for publishing; set after deploying the `blog-publish` flow; used by the app/runtime to invoke publishing.
- `LAMATIC_API_URL` — Base URL for Lamatic API; obtain from Lamatic environment/dashboard; used by all flows.
- `LAMATIC_PROJECT_ID` — Lamatic project identifier; obtain from Lamatic dashboard; used by all flows.
- `LAMATIC_API_KEY` — Lamatic API key with permission to invoke flows; store as a secret; used by all flows.
- `WORDPRESS_SITE_ID` — Target WordPress site identifier; obtain from WordPress admin/API provider; used by `3. CMS Publishing`.
- `WORDPRESS_TOKEN` — WordPress API token (or application password/token depending on setup); store as a secret; used by `3. CMS Publishing`.
- `lamatic.config.ts` — Kit metadata and required step/env mapping (`blog-drafting`, `blog-seo`, `blog-publish`); used by the kit build/deploy process.
- `apps/.env.example` — Reference template for required environment variables.
## Quickstart
1. Deploy the three Lamatic flows in your Lamatic workspace: drafting, SEO, and publish. Record the deployed Flow IDs.
2. In `apps/`, create a `.env` file based on `apps/.env.example` and set `LAMATIC_API_URL`, `LAMATIC_PROJECT_ID`, `LAMATIC_API_KEY`, and the three `AUTOMATION_BLOG_*` flow IDs. If publishing to WordPress, set `WORDPRESS_SITE_ID` and `WORDPRESS_TOKEN`.
3. Invoke the drafting flow via Lamatic GraphQL/API using placeholder values similar to the trigger payload below:
- Mutation/request shape (conceptual):
- `topic`: "How to Choose a Vector Database"
- `keywords`: ["vector database", "RAG", "embedding search"]
- `instructions`: "Write in a pragmatic, technical tone for software engineers. Include headings and a short conclusion."
4. Take the returned `draft`/`content` and invoke the SEO flow with:
- `draft`: "<draft text from step 3>"
- `keywords`: ["vector database", "RAG", "embedding search"]
5. Take the returned optimized `content` and invoke the publishing flow with:
- `title`: "How to Choose a Vector Database"
- `content`: "<optimized content from step 4>"
6. Confirm the response includes `publish_status` and `url`, then use the URL in downstream automation (notifications, analytics, indexing).
## Common Failure Modes
| Symptom | Likely Cause | Fix |
|---|---|---|
| Drafting/SEO call returns authorization error | Missing/invalid `LAMATIC_API_KEY` or wrong `LAMATIC_PROJECT_ID` | Verify Lamatic credentials; ensure the key has invoke permissions; re-check `.env` values |
| Flow invocation fails with “flow not found” | Incorrect `AUTOMATION_BLOG_*` Flow ID | Confirm deployed flow IDs in Lamatic; update environment variables and redeploy/restart |
| SEO output ignores keywords or over-stuffs them | Keyword list too large/ambiguous; prompt constraints insufficient | Reduce/clarify keywords; add explicit constraints in instructions; adjust SEO prompt template |
| Publishing returns 401/403 | Invalid `WORDPRESS_TOKEN` or insufficient CMS permissions | Regenerate token/app password; confirm user role/capabilities; verify token is correctly injected into `apiNode` |
| Publishing succeeds but content formatting is broken | CMS expects specific HTML/blocks/markdown | Normalize content format before publish; adjust `apiNode` mapping; add formatting instructions to drafting/SEO prompts |
| Publishing returns success but URL missing | CMS API response mapping not captured | Update `apiNode` response parsing/mapping; ensure `graphqlResponseNode` returns the needed fields |
| Output is truncated | Model context/output limit reached | Shorten requested length; split sections; use a larger-context model in Lamatic model config |
## Notes
- This is a full AgentKit app (`type: kit`) with directories `apps`, `constitutions`, `flows`, `model-configs`, and `prompts`.
- The kit is designed to be triggered externally via webhooks or scheduled tasks to maintain a consistent content pipeline; a human review phase is optional but recommended for brand/legal compliance.
- Canonical project links: GitHub (`https://github.com/Lamatic/AgentKit/tree/main/kits/blog-automation`), deploy template (Vercel clone link in `lamatic.config.ts`), and docs (`https://lamatic.ai/templates/agentkits/automation/blog-automation`).A standalone type stub package for spotipy using Pydantic models generated from the official Spotify Web API OpenAPI schema.
**Generated**: 2026-03-22
This project provides a comprehensive LLM pricing comparison website with:
<laravel-boost-guidelines>