{
  "id": "9XCjNEohhX1OPnFj",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "WRITING - content marketing - product - shared",
  "tags": [
    {
      "id": "",
      "name": "Content",
      "createdAt": "2025-10-05T14:25:38.196Z",
      "updatedAt": "2025-10-05T14:25:38.196Z"
    }
  ],
  "nodes": [
    {
      "id": "cb9cfab9-2d5d-44e3-9fd4-0ea0e31df811",
      "name": "Notion Trigger",
      "type": "n8n-nodes-base.notionTrigger",
      "position": [
        -416,
        64
      ],
      "parameters": {
        "event": "pagedUpdatedInDatabase",
        "pollTimes": {
          "item": [
            {
              "mode": "everyHour"
            }
          ]
        },
        "databaseId": {
          "__rl": true,
          "mode": "list",
          "value": "",
          "cachedResultUrl": "",
          "cachedResultName": "Content Plan"
        }
      },
      "credentials": {
        "notionApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "a5c8ce07-b250-4be4-ae64-55664ab465c6",
      "name": "Claude_text_writer",
      "type": "@n8n/n8n-nodes-langchain.anthropic",
      "position": [
        832,
        64
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "claude-sonnet-4-5-20250929",
          "cachedResultName": "claude-sonnet-4-5-20250929"
        },
        "options": {
          "maxTokens": 64000
        },
        "messages": {
          "values": [
            {
              "role": "assistant",
              "content": "# Role & Objective\n\nYou are the expert product communications writer for COMPANY a COMPANY DESCRIPTION. Your primary objective is to craft concise, structured, and professional product announcements that clearly explain:\n\n- What's new\n- Why it matters\n- How it works / how to use it\n\nEach announcement must deliver progress, clarity, and value\u2014avoiding marketing fluff\u2014so readers can quickly grasp impact, context, and actionable next steps. Begin with a concise checklist (3\u20135 bullets) of the main announcement-building tasks before writing; keep items conceptual, not implementation-level.\n\n## Target Audience\n\n**Who:** DESCRIBE YOUR TARGET AUDIENCE\n\n**Stage & Needs:** Early-to-mid adoption; seeking plain-language explanations of practical implications, frameworks, and next steps.\n\n**Tone:** Analytical, confident, and approachable. Think Notion's clarity, Linear's precision, n8n's professionalism and Harvard Business Review-level reasoning.\n\n## Writing Guidelines\n\n- **Start with value:** Open with a concise summary (1\u20132 sentences) explaining what's new and why it matters.\n- **Use a consistent, scannable structure:**\n    - **Headline & Summary:** \u2264 70-character headline + 1\u20132 sentence lede\n    - **Feature Sections (for each feature/improvement):**\n        - Feature name (H2)\n        - Single paragraph (4\u20135 sentences max) combining: what's new (clear, factual explanation), why it matters (user impact and strategic relevance for AI Search/LLM Visibility), and how to use it (short, concrete steps)\n    - **Additional Improvements:** List minor updates as bullets if present\n    - **FAQ (optional):** 3\u20136 Q&A pairs on setup, usage, or limitations\n    - **Call to Action (CTA):** Point to where users can try or learn more (e.g., app link, changelog, docs)\n- For multiple features, create separate paragraphs per feature, each following the above structure.\n- If input information is incomplete or unstructured, infer structure and context\u2014never return errors. Always generate a readable announcement.\n- Integrate available research or notes naturally (e.g., \"Based on recent visibility data...\").\n- Avoid hype, redundancy, and repetitive phrasing; focus on clear reasoning, unique outcomes, and user value.\n- Keep it scannable: short paragraphs, clear sub-headings, plain text, and bullet points.\n\n## Output Format\n\n- Return a Markdown-formatted announcement (never raw JSON unless specifically requested).\n- Automatically adapt structure for the number of features.\n\n### Template\n\n### Template Example\n\n**Headline Format:**\n# [Headline]\n\n**Summary:**\n[Short summary: 1\u20132 sentences explaining what's new and why it matters.]\n\n**Feature Section Format:**\n## [Feature Name 1]\n[Single paragraph: 4\u20135 sentences combining what's new, why it matters, and how to use it with concrete steps.]\n\n---\n\n## [Feature Name 2]\n[Single paragraph: 4\u20135 sentences combining what's new, why it matters, and how to use it.]\n\n---\n\n**Additional Improvements Section:**\n## Additional Improvements\n- [Item 1]\n- [Item 2]\n- [Item 3]\n\n---\n\n**FAQ Section (optional):**\n## FAQ\n**Q:** [Question 1]  \n**A:** [Answer 1]\n\n**Q:** [Question 2]  \n**A:** [Answer 2]\n\n---\n\n**Call to Action:**\n## Try It Out\nYou can explore the new features at [your-app-link.com](https://your-app-link.com) or read the changelog for setup details.\n\n---\n\n**SEO Metadata:**\n- Title: [\u226460 chars]\n- Meta description: [\u2264155 chars]\n- Slug: [auto-generated based on headline]\n- Tags: [Feature, AI Search, LLM Visibility]\n\n## Checklist Before Writing\n\n- Identify each feature or improvement mentioned based on the outline provided.\n- For each, create its own paragraph (4\u20135 sentences) that flows naturally from what's new \u2192 why it matters \u2192 how to use it.\n- Announcements should lead with value and end with a clear next step.\n- Keep the tone factual, professional, and concise.\n- Ensure all sections are distinct; only merge truly redundant items.\n- Keep it short. \n- Avoid redundant information. \n\n## Agent Behavior\n\n- If input is incomplete or unstructured, infer and organize logically.\n- For multiple updates, create separate feature sections per item.\n- Never output an error message; always provide a complete, readable Markdown announcement.\n\nAfter drafting, review your output for clarity and section completeness before returning the final announcement."
            },
            {
              "content": "=# Role and Objective\nGenerate a blog article based on user-provided outline, research contexts, and topic details, formatted as a Markdown document with YAML front matter.\n\n# Instructions\n- Utilize the following inputs:\n  - **Outline:**\n    <outline>\n{{ $json.choices[0].message.content }}\n</outline>\n  - **Topic:**\n    <topic>\n{{ $('Notion Trigger').item.json['Project name'] }}\n</topic>\n  - **Content Type:**\n    <content_type>\n{{ $('Notion Trigger').item.json.Notes }}\n    </content_type>\n\n- Write a full product announcement for the website blog according to the system instructions.\n- The article should follow the provided outline and make use of available research summaries.\n- Always generate the article; do not include any error or warning messages about missing inputs.\n- Follow the below output format with the article body, structured according to the provided outline, with integrated research information.\n\n# Output Format\n- The output must be a Markdown document starting with a YAML front matter section in the following format:\n  ```yaml\n  ---\n  title: <Article Title>\n  author: <Author Name or \"AI Assistant\">\n  date: <YYYY-MM-DD>\n  content_type: <Content Type>\n  topic: <Topic>\n  ---\n  ```"
            }
          ]
        },
        "simplify": false
      },
      "credentials": {
        "anthropicApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "4c83b307-5d6b-4c03-affb-857a53cefa51",
      "name": "Create a document",
      "type": "n8n-nodes-base.googleDocs",
      "position": [
        1184,
        64
      ],
      "parameters": {
        "title": "={{ $('Notion Trigger').item.json['Project name'] }}",
        "folderId": ""
      },
      "credentials": {
        "googleDocsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "fae6725c-af58-4345-b3bc-97cbc14f1f75",
      "name": "Update a database page",
      "type": "n8n-nodes-base.notion",
      "position": [
        1632,
        64
      ],
      "parameters": {
        "pageId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Notion Trigger').item.json.id }}"
        },
        "options": {},
        "resource": "databasePage",
        "operation": "update",
        "propertiesUi": {
          "propertyValues": [
            {
              "key": "Google_Docs_Link|url",
              "urlValue": "=https://docs.google.com/document/d/{{ $json.id }}"
            }
          ]
        }
      },
      "credentials": {
        "notionApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "8036af88-d294-4a48-9019-f44b373191db",
      "name": "Update a document",
      "type": "n8n-nodes-base.googleDocs",
      "position": [
        1408,
        64
      ],
      "parameters": {
        "actionsUi": {
          "actionFields": [
            {
              "text": "={{ $('Claude_text_writer').item.json.content[0].text }}",
              "action": "insert"
            }
          ]
        },
        "operation": "update",
        "documentURL": "={{ $json.id }}"
      },
      "credentials": {
        "googleDocsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "6b58deec-d286-43be-b9b7-d16f7c507b09",
      "name": "Outline - GPT-5",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        480,
        64
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-5-mini",
          "cachedResultName": "GPT-5-MINI"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "role": "system",
              "content": "# Role & Objective\n\nYou are the expert product communications writer for BRAND NAME, a BRAND DESCRIPTION. Your primary objective is to craft concise, structured, and professional product announcements that clearly explain:\n\n- What\u2019s new\n- Why it matters\n- How it works / how to use it\n- Key benefits and next steps\n\nEach announcement must deliver progress, clarity, and value\u2014avoiding marketing fluff\u2014so readers can quickly grasp impact, context, and actionable next steps. Begin with a concise checklist (3\u20135 bullets) of the main announcement-building tasks before writing; keep items conceptual, not implementation-level.\n\n# Target Audience\n\n**Who:** Audience\n**Stage & Needs:** Early-to-mid adoption; seeking research-backed, plain-language explanations of practical implications, frameworks, and next steps.\n**Tone:** Analytical, confident, and approachable - Think Notion\u2019s clarity, n8n's precision, and MIT-level reasoning.\n\n# Writing Guidelines\n\n- **Start with value:** Open with a concise summary (1\u20132 sentences) explaining what\u2019s new and why it matters.\n- **Use a consistent, scannable structure:**\n    - **Headline & Summary:** \u2264 70-character headline + 1\u20132 sentence lede\n    - **Feature Sections (for each feature/improvement):**\n        - Feature name (H2)\n        - What\u2019s new: Clear, factual explanation (1-2 sentences)\n        - Why it matters: User impact and strategic relevance, especially for AI Search/LLM Visibility (1-2sentences)\n        - How to use it: Short, concrete steps.\n        - Key benefits: 3\u20135 concise, outcome-focused bullets\n    - **Additional Improvements:** List minor updates as bullets if present\n    - **FAQ (optional):** 3\u20136 Q&A pairs on setup, usage, or limitations\n    - **Call to Action (CTA):** Point to where users can try or learn more (e.g., app link, changelog, docs)\n\n- For multiple features, create separate Feature Section, each following the above sub-structure.\n- If input information is incomplete or unstructured, infer structure and context\u2014never return errors. Always generate a readable announcement.\n- Integrate available research or notes naturally (e.g., \"Based on recent visibility data...\").\n- Avoid hype; focus on clear reasoning, outcomes, and user value.\n- Keep it scannable: short paragraphs, clear sub-headings, plain text, and bullet points.\n- Distinguish between:\n  - **Product features** \u2192 full section treatment\n  - **Supporting materials** \u2192 reference briefly or omit\n\n\n# Output Format\n\n- Return a Markdown-formatted announcement (never raw JSON unless specifically requested).\n- Automatically adapt structure for the number of features.\n\n**Template:**\n\n# [Headline]\n\n[Short summary: 1\u20132 sentences explaining what\u2019s new and why it matters.]\n\n## [Feature Name 1]\n**What\u2019s new:**  \n[Description of the new feature]\n\n**Why it matters:**  \n[Explanation of user value and relevance to AI Search / LLM visibility]\n\n**How to use it:**  \n- Step 1  \n- Step 2  \n- Step 3  \n\n**Key benefits:**  \n- Benefit 1  \n- Benefit 2  \n- Benefit 3\n\n---\n\n## [Feature Name 2]\n**What\u2019s new:**  \n[Description of second feature or update]\n\n**Why it matters:**  \n[Context and impact]\n\n**How to use it:**  \n- Step 1  \n- Step 2\n\n**Key benefits:**  \n- Benefit 1  \n- Benefit 2\n\n---\n\n## Additional Improvements\n- [Item 1]\n- [Item 2]\n- [Item 3]\n\n---\n\n## FAQ\n**Q:** [Question 1]  \n**A:** [Answer 1]\n\n**Q:** [Question 2]  \n**A:** [Answer 2]\n\n---\n\n## Try It Out\nYou can explore the new features at [your site] or read the changelog for setup details.\n\n---\n\n**SEO Metadata (optional)**\n- Title: [\u226460 chars]\n- Meta description: [\u2264155 chars]\n- Slug: [auto-generated based on headline]\n\n# Checklist Before Writing\n\n- Identify each feature or improvement mentioned.\n- For each, create its own structured block (What\u2019s new/Why it matters/How to use it/Benefits).\n- Announcements should lead with value and end with a clear next step.\n- Keep the tone factual, professional, and concise.\n- Ensure all sections are distinct; only merge truly redundant items.\n\n# Agent Behavior\n- If input is incomplete or unstructured, infer and organize logically.\n- For multiple updates, repeat \u201cWhat\u2019s new\u201d & \u201cHow to use it\u201d per item.\n- Never output an error message; always provide a complete, readable Markdown announcement.\n\nAfter drafting, review your output for clarity and section completeness before returning the final announcement.\n\n#Knowledge Base (Reference Only)\nAdd information about your company\n\n---\n# **Existing features **\n\n(ADD LIST AND CONTEXT ON EXISTING FEATURES HERE)\n"
            },
            {
              "content": "=Here are the inputs for creating the outline: \nTopic: {{ $('Notion Trigger').item.json['Project name'] }}\nNotes: {{ $('Notion Trigger').item.json.Notes }}\n\nTask: Using the above inputs, create a SEO- and ALLMO (AI Search) friendly article outline that integrates the user intent (Topic + Notes) and structure from the system prompt."
            }
          ]
        },
        "simplify": false
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "25825356-6573-4f06-af95-e183344d0e67",
      "name": "Update a database page2",
      "type": "n8n-nodes-base.notion",
      "position": [
        256,
        64
      ],
      "parameters": {
        "pageId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Notion Trigger').item.json.id }}"
        },
        "options": {},
        "resource": "databasePage",
        "operation": "update",
        "propertiesUi": {
          "propertyValues": [
            {
              "key": "Status|status",
              "statusValue": "n8n_runing"
            }
          ]
        }
      },
      "credentials": {
        "notionApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "edd3c532-975e-403c-b24a-9f9eb14c208f",
      "name": "Update a database page1",
      "type": "n8n-nodes-base.notion",
      "position": [
        1856,
        64
      ],
      "parameters": {
        "pageId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Notion Trigger').item.json.id }}"
        },
        "options": {},
        "resource": "databasePage",
        "operation": "update",
        "propertiesUi": {
          "propertyValues": [
            {
              "key": "=Status|status",
              "statusValue": "=n8n_completed"
            }
          ]
        }
      },
      "credentials": {
        "notionApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "edb9f99f-7e0f-4c62-ba8b-cbad6b8b7380",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1328,
        -496
      ],
      "parameters": {
        "width": 752,
        "height": 1008,
        "content": "# Automated Product Blog Article Generation: Notion \u2192 AI \u2192 Google Docs\n\nThis workflow automates your content creation pipeline by transforming Notion database entries into complete, publication-ready blog articles in Google Docs.\n\n## What it does:\n- Monitors your Notion \"Content Plan\" database every hour.\n- When status = \"n8n_ready\", generates a structured outline.\n- Writes the complete article using Claude Sonnet 4.5 following your custom guidelines\n- Creates Google Docs files with proper formatting (Markdown with YAML front matter)\n- For product announcements: generates both Markdown and HTML versions\n- Automatically updates Notion with document links and completion status\n\n## Key Features:\n\u2705 Fully automated content generation\n\u2705 Consistent tone and structure via custom system prompts\n\u2705 SEO-optimized output with proper metadata\n\u2705 Dual-format support (Markdown + HTML) for product content\n\u2705 Bidirectional sync between Notion and Google Docs\n\n## Requirements:\n- Notion database with: Status, Project name, Notes, Category, Google_Docs_Link fields\n- Google Drive folder for document storage\n- Anthropic API (Claude Sonnet 4.5)\n- OpenAI API (GPT-5 Mini)\n\n## Setup Guide:\n- Add your own API Keys (Notion, Google Drive, Google Docs, OpenAI, Antrophic)\n- Edit AI system prompts in Claude nodes to match your brand voice\n- Modify trigger conditions to match your Notion properties\n\n\n## Customization Tips:\n- If you are using Notion as a Product Backlog, you can also connect it to your backlog to automatically draft announcements for new features. \n- Swap AI models based on your speed/quality/cost preferences"
      },
      "typeVersion": 1
    },
    {
      "id": "c5fbc4f4-8fe9-4473-a066-1a7fa50d31be",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -480,
        -480
      ],
      "parameters": {
        "color": 7,
        "width": 912,
        "height": 832,
        "content": "## Step 1: Monitor Notion, Check Status Verify Content type. \n\nGoal of this part is to ensure that only articles from your content plan are pulled that are supposed to be product announcements. \n\n**Notion Trigger** polls your Content Plan database every hour.\n\n**If node** checks if Status = \"n8n_ready\"\n- \u2705 True \u2192 Proceeds to category check\n- \u274c False \u2192 Workflow stops (no action needed)\n\n**If1 node** checks if Category = \"Product\"  \n- \u2705 True = \"Product\" \u2192 Proceeds to content generation.\n- \u274c False \u2192 Workflow stops (no action needed)\n\nThis ensures only approved entries trigger content creation.\n\nLastly the Notion item status is updated to prevent double processing."
      },
      "typeVersion": 1
    },
    {
      "id": "c29fa55b-131a-4eb9-b66f-7607a0130893",
      "name": "If_Product",
      "type": "n8n-nodes-base.if",
      "position": [
        32,
        64
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "dfc9c56c-429a-4cc4-93e0-b5d00f17db6d",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $('Notion Trigger').item.json.Category[0] }}",
              "rightValue": "Product"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "672052a0-52ee-42e2-99d5-7d28e8c967a7",
      "name": "If_n8n_ready",
      "type": "n8n-nodes-base.if",
      "position": [
        -192,
        64
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "dfc9c56c-429a-4cc4-93e0-b5d00f17db6d",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{ $json.Status }}",
              "rightValue": "n8n_ready"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "2b1b870c-4e14-4f54-99c1-a6a0e0ece231",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        464,
        -480
      ],
      "parameters": {
        "color": 7,
        "width": 624,
        "height": 832,
        "content": "## Step 2. Create outline and final text\n\n\u26a0ADD YOUR PRODUCT SPECIFICATIONS TO THE PROMPTS\u26a0\n\n**Outline - GPT-5 Mini** creates a structured outline based on:\n- Project name (from Notion)\n- Notes field (additional context/instructions)\n- System prompt with product knowledge\n\nOutput: SEO-friendly article structure with sections, subsections, and key talking points.\n\n**Claude_text_writer** (Claude Sonnet 4.5) generates the full article:\n\nInputs:\n- Outline from GPT-5 Mini\n- Project details from Notion\n- Comprehensive system prompt with writing guidelines\n\nOutput: Complete Markdown article with the full product announcement article. \n"
      },
      "typeVersion": 1
    },
    {
      "id": "cc8bfa81-1dca-475c-89ff-d5ee917a81bb",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1136,
        -480
      ],
      "parameters": {
        "color": 7,
        "width": 928,
        "height": 768,
        "content": "## Step 3 Save text and report back to your Notion\n\n**Create a document** node creates a new Google Doc:\n- Title: Uses Project name from Notion\n- Location: Your specified Google Drive folder\n- Returns document ID for next step\n\n**Update a database page** adds the Google Docs URL to Notion:\n- Updates Google_Docs_Link field\n- Enables one-click access from Notion to the generated article\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "callerPolicy": "workflowsFromSameOwner",
    "executionOrder": "v1"
  },
  "versionId": "",
  "connections": {
    "If_Product": {
      "main": [
        [
          {
            "node": "Update a database page2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "If_n8n_ready": {
      "main": [
        [
          {
            "node": "If_Product",
            "type": "main",
            "index": 0
          }
        ],
        []
      ]
    },
    "Notion Trigger": {
      "main": [
        [
          {
            "node": "If_n8n_ready",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Outline - GPT-5": {
      "main": [
        [
          {
            "node": "Claude_text_writer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create a document": {
      "main": [
        [
          {
            "node": "Update a document",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update a document": {
      "main": [
        [
          {
            "node": "Update a database page",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Claude_text_writer": {
      "main": [
        [
          {
            "node": "Create a document",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update a database page": {
      "main": [
        [
          {
            "node": "Update a database page1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update a database page2": {
      "main": [
        [
          {
            "node": "Outline - GPT-5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}