Integrations
n8n
Workflows

Workflow Examples

Discover powerful automation workflows using Canvelete (opens in a new tab) with n8n. These examples demonstrate real-world use cases and best practices for integrating design generation into your automation processes.

Quick Start Templates

1. Simple Image Generation

Use Case: Generate a social media post when new content is published.

{
  "name": "Simple Social Media Generator",
  "nodes": [
    {
      "parameters": {},
      "name": "Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [240, 300]
    },
    {
      "parameters": {
        "resource": "render",
        "operation": "create",
        "templateId": "template_social_post",
        "format": "png",
        "dynamicData": "{\"title\":\"{{$json.title}}\",\"description\":\"{{$json.description}}\",\"author\":\"{{$json.author}}\"}"
      },
      "name": "Generate Social Post",
      "type": "n8n-nodes-canvelete.canvelete",
      "typeVersion": 1,
      "position": [460, 300],
      "credentials": {
        "canveleteOAuth2Api": {
          "id": "1",
          "name": "Canvelete OAuth2 account"
        }
      }
    }
  ],
  "connections": {
    "Manual Trigger": {
      "main": [
        [
          {
            "node": "Generate Social Post",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Input Data Example:

{
  "title": "New Product Launch",
  "description": "Introducing our latest innovation",
  "author": "Marketing Team"
}

2. Automated Certificate Generation

Use Case: Generate certificates for course completions automatically.

{
  "name": "Certificate Generator",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "certificate-webhook",
        "responseMode": "responseNode",
        "options": {}
      },
      "name": "Webhook",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 1,
      "position": [240, 300]
    },
    {
      "parameters": {
        "resource": "template",
        "operation": "search",
        "query": "certificate"
      },
      "name": "Find Certificate Template",
      "type": "n8n-nodes-canvelete.canvelete",
      "typeVersion": 1,
      "position": [460, 300],
      "credentials": {
        "canveleteOAuth2Api": {
          "id": "1",
          "name": "Canvelete OAuth2 account"
        }
      }
    },
    {
      "parameters": {
        "resource": "render",
        "operation": "create",
        "templateId": "={{$json.templates[0].id}}",
        "format": "pdf",
        "dynamicData": "{\"student_name\":\"{{$node['Webhook'].json.body.student_name}}\",\"course_name\":\"{{$node['Webhook'].json.body.course_name}}\",\"completion_date\":\"{{$node['Webhook'].json.body.completion_date}}\",\"instructor\":\"{{$node['Webhook'].json.body.instructor}}\"}"
      },
      "name": "Generate Certificate",
      "type": "n8n-nodes-canvelete.canvelete",
      "typeVersion": 1,
      "position": [680, 300],
      "credentials": {
        "canveleteOAuth2Api": {
          "id": "1",
          "name": "Canvelete OAuth2 account"
        }
      }
    },
    {
      "parameters": {
        "fromEmail": "certificates@yourcompany.com",
        "toEmail": "={{$node['Webhook'].json.body.student_email}}",
        "subject": "Your Course Certificate - {{$node['Webhook'].json.body.course_name}}",
        "text": "Congratulations! Please find your certificate attached.",
        "attachments": "binary,certificate",
        "options": {
          "attachments": [
            {
              "name": "={{$node['Webhook'].json.body.student_name}}_Certificate.pdf",
              "value": "={{$node['Generate Certificate'].json.url}}"
            }
          ]
        }
      },
      "name": "Send Certificate Email",
      "type": "n8n-nodes-base.emailSend",
      "typeVersion": 2,
      "position": [900, 300]
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "{\"success\": true, \"message\": \"Certificate generated and sent\", \"certificate_url\": \"{{$node['Generate Certificate'].json.url}}\"}"
      },
      "name": "Respond to Webhook",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1,
      "position": [1120, 300]
    }
  ],
  "connections": {
    "Webhook": {
      "main": [
        [
          {
            "node": "Find Certificate Template",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Find Certificate Template": {
      "main": [
        [
          {
            "node": "Generate Certificate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Certificate": {
      "main": [
        [
          {
            "node": "Send Certificate Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Certificate Email": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

E-commerce Workflows

3. Product Image Generator

Use Case: Automatically generate product images when new items are added to inventory.

{
  "name": "Product Image Generator",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 */6 * * *"
            }
          ]
        }
      },
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1,
      "position": [240, 300]
    },
    {
      "parameters": {
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBasicAuth",
        "url": "https://your-ecommerce-api.com/products/new",
        "options": {}
      },
      "name": "Get New Products",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4,
      "position": [460, 300]
    },
    {
      "parameters": {
        "batchSize": 5,
        "options": {}
      },
      "name": "Split In Batches",
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [680, 300]
    },
    {
      "parameters": {
        "resource": "template",
        "operation": "search",
        "query": "product-showcase"
      },
      "name": "Find Product Template",
      "type": "n8n-nodes-canvelete.canvelete",
      "typeVersion": 1,
      "position": [900, 300],
      "credentials": {
        "canveleteOAuth2Api": {
          "id": "1",
          "name": "Canvelete OAuth2 account"
        }
      }
    },
    {
      "parameters": {
        "resource": "render",
        "operation": "create",
        "templateId": "={{$json.templates[0].id}}",
        "format": "png",
        "width": 1200,
        "height": 1200,
        "quality": 95,
        "dynamicData": "{\"product_name\":\"{{$node['Split In Batches'].json.name}}\",\"product_price\":\"{{$node['Split In Batches'].json.price}}\",\"product_image\":\"{{$node['Split In Batches'].json.image_url}}\",\"product_description\":\"{{$node['Split In Batches'].json.description}}\",\"brand_logo\":\"https://yourcompany.com/logo.png\"}"
      },
      "name": "Generate Product Image",
      "type": "n8n-nodes-canvelete.canvelete",
      "typeVersion": 1,
      "position": [1120, 300],
      "credentials": {
        "canveleteOAuth2Api": {
          "id": "1",
          "name": "Canvelete OAuth2 account"
        }
      }
    },
    {
      "parameters": {
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBasicAuth",
        "url": "https://your-ecommerce-api.com/products/{{$node['Split In Batches'].json.id}}/images",
        "sendBody": true,
        "bodyContentType": "json",
        "jsonBody": "{\"marketing_image_url\": \"{{$json.url}}\", \"generated_at\": \"{{$now}}\"}",
        "options": {}
      },
      "name": "Update Product Record",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4,
      "position": [1340, 300]
    },
    {
      "parameters": {
        "options": {}
      },
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1,
      "position": [1560, 300]
    }
  ],
  "connections": {
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Get New Products",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get New Products": {
      "main": [
        [
          {
            "node": "Split In Batches",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split In Batches": {
      "main": [
        [
          {
            "node": "Find Product Template",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Find Product Template": {
      "main": [
        [
          {
            "node": "Generate Product Image",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Product Image": {
      "main": [
        [
          {
            "node": "Update Product Record",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Product Record": {
      "main": [
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait": {
      "main": [
        [
          {
            "node": "Split In Batches",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

4. Dynamic Pricing Graphics

Use Case: Generate promotional graphics when prices change.

{
  "name": "Dynamic Pricing Graphics",
  "nodes": [
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "price-change",
        "responseMode": "responseNode",
        "options": {}
      },
      "name": "Price Change Webhook",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 1,
      "position": [240, 300]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict"
          },
          "conditions": [
            {
              "id": "1",
              "leftValue": "={{$json.body.discount_percentage}}",
              "rightValue": 20,
              "operator": {
                "type": "number",
                "operation": "gte"
              }
            }
          ],
          "combinator": "and"
        },
        "options": {}
      },
      "name": "Check Discount Level",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [460, 300]
    },
    {
      "parameters": {
        "resource": "render",
        "operation": "create",
        "templateId": "template_big_sale",
        "format": "png",
        "dynamicData": "{\"product_name\":\"{{$node['Price Change Webhook'].json.body.product_name}}\",\"original_price\":\"{{$node['Price Change Webhook'].json.body.original_price}}\",\"sale_price\":\"{{$node['Price Change Webhook'].json.body.sale_price}}\",\"discount_percentage\":\"{{$node['Price Change Webhook'].json.body.discount_percentage}}%\",\"product_image\":\"{{$node['Price Change Webhook'].json.body.product_image}}\"}"
      },
      "name": "Generate Big Sale Graphic",
      "type": "n8n-nodes-canvelete.canvelete",
      "typeVersion": 1,
      "position": [680, 200],
      "credentials": {
        "canveleteOAuth2Api": {
          "id": "1",
          "name": "Canvelete OAuth2 account"
        }
      }
    },
    {
      "parameters": {
        "resource": "render",
        "operation": "create",
        "templateId": "template_regular_sale",
        "format": "png",
        "dynamicData": "{\"product_name\":\"{{$node['Price Change Webhook'].json.body.product_name}}\",\"original_price\":\"{{$node['Price Change Webhook'].json.body.original_price}}\",\"sale_price\":\"{{$node['Price Change Webhook'].json.body.sale_price}}\",\"discount_percentage\":\"{{$node['Price Change Webhook'].json.body.discount_percentage}}%\",\"product_image\":\"{{$node['Price Change Webhook'].json.body.product_image}}\"}"
      },
      "name": "Generate Regular Sale Graphic",
      "type": "n8n-nodes-canvelete.canvelete",
      "typeVersion": 1,
      "position": [680, 400],
      "credentials": {
        "canveleteOAuth2Api": {
          "id": "1",
          "name": "Canvelete OAuth2 account"
        }
      }
    },
    {
      "parameters": {
        "options": {}
      },
      "name": "Merge",
      "type": "n8n-nodes-base.merge",
      "typeVersion": 2,
      "position": [900, 300]
    },
    {
      "parameters": {
        "authentication": "oAuth2",
        "text": "🔥 SALE ALERT! {{$node['Price Change Webhook'].json.body.product_name}} is now {{$node['Price Change Webhook'].json.body.discount_percentage}}% off! Get it before it's gone! 🛒",
        "additionalFields": {
          "media_ids": [
            "={{$json.media_id}}"
          ]
        }
      },
      "name": "Post to Twitter",
      "type": "n8n-nodes-base.twitter",
      "typeVersion": 2,
      "position": [1120, 300]
    },
    {
      "parameters": {
        "respondWith": "json",
        "responseBody": "{\"success\": true, \"message\": \"Sale graphic generated and posted\"}"
      },
      "name": "Respond to Webhook",
      "type": "n8n-nodes-base.respondToWebhook",
      "typeVersion": 1,
      "position": [1340, 300]
    }
  ],
  "connections": {
    "Price Change Webhook": {
      "main": [
        [
          {
            "node": "Check Discount Level",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Discount Level": {
      "main": [
        [
          {
            "node": "Generate Big Sale Graphic",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Generate Regular Sale Graphic",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Big Sale Graphic": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Regular Sale Graphic": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Merge": {
      "main": [
        [
          {
            "node": "Post to Twitter",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Post to Twitter": {
      "main": [
        [
          {
            "node": "Respond to Webhook",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Content Marketing Workflows

5. Blog Post Social Graphics

Use Case: Generate social media graphics for new blog posts automatically.

{
  "name": "Blog Post Social Graphics",
  "nodes": [
    {
      "parameters": {
        "feedUrl": "https://yourblog.com/rss.xml",
        "options": {}
      },
      "name": "RSS Feed Trigger",
      "type": "n8n-nodes-base.rssFeedReadTrigger",
      "typeVersion": 1,
      "position": [240, 300]
    },
    {
      "parameters": {
        "jsCode": "// Extract and clean blog post data\nconst item = $input.first();\n\n// Clean HTML from description\nconst cleanDescription = item.json.contentSnippet\n  .replace(/<[^>]*>/g, '')\n  .substring(0, 150) + '...';\n\n// Extract featured image from content\nconst imageMatch = item.json.content.match(/<img[^>]+src=\"([^\"]+)\"/i);\nconst featuredImage = imageMatch ? imageMatch[1] : 'https://yourblog.com/default-image.jpg';\n\n// Format publish date\nconst publishDate = new Date(item.json.pubDate).toLocaleDateString('en-US', {\n  year: 'numeric',\n  month: 'long',\n  day: 'numeric'\n});\n\nreturn {\n  title: item.json.title,\n  description: cleanDescription,\n  url: item.json.link,\n  author: item.json.creator || 'Blog Team',\n  publishDate: publishDate,\n  featuredImage: featuredImage,\n  categories: item.json.categories || []\n};"
      },
      "name": "Process Blog Data",
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [460, 300]
    },
    {
      "parameters": {
        "resource": "template",
        "operation": "search",
        "query": "blog-post-social"
      },
      "name": "Find Blog Template",
      "type": "n8n-nodes-canvelete.canvelete",
      "typeVersion": 1,
      "position": [680, 300],
      "credentials": {
        "canveleteOAuth2Api": {
          "id": "1",
          "name": "Canvelete OAuth2 account"
        }
      }
    },
    {
      "parameters": {
        "resource": "render",
        "operation": "create",
        "templateId": "={{$json.templates[0].id}}",
        "format": "png",
        "width": 1200,
        "height": 630,
        "dynamicData": "{\"blog_title\":\"{{$node['Process Blog Data'].json.title}}\",\"blog_description\":\"{{$node['Process Blog Data'].json.description}}\",\"author\":\"{{$node['Process Blog Data'].json.author}}\",\"publish_date\":\"{{$node['Process Blog Data'].json.publishDate}}\",\"featured_image\":\"{{$node['Process Blog Data'].json.featuredImage}}\",\"blog_url_qr\":\"{{$node['Process Blog Data'].json.url}}\"}"
      },
      "name": "Generate Social Graphic",
      "type": "n8n-nodes-canvelete.canvelete",
      "typeVersion": 1,
      "position": [900, 300],
      "credentials": {
        "canveleteOAuth2Api": {
          "id": "1",
          "name": "Canvelete OAuth2 account"
        }
      }
    },
    {
      "parameters": {
        "authentication": "oAuth2",
        "text": "📝 New blog post: {{$node['Process Blog Data'].json.title}}\n\n{{$node['Process Blog Data'].json.description}}\n\nRead more: {{$node['Process Blog Data'].json.url}}\n\n#blog #content #{{$node['Process Blog Data'].json.categories[0]}}",
        "additionalFields": {
          "media_ids": [
            "={{$json.media_id}}"
          ]
        }
      },
      "name": "Post to Twitter",
      "type": "n8n-nodes-base.twitter",
      "typeVersion": 2,
      "position": [1120, 200]
    },
    {
      "parameters": {
        "authentication": "oAuth2",
        "text": "📝 New blog post: {{$node['Process Blog Data'].json.title}}\n\n{{$node['Process Blog Data'].json.description}}\n\nRead more: {{$node['Process Blog Data'].json.url}}",
        "additionalFields": {
          "media_urls": [
            "={{$node['Generate Social Graphic'].json.url}}"
          ]
        }
      },
      "name": "Post to LinkedIn",
      "type": "n8n-nodes-base.linkedIn",
      "typeVersion": 1,
      "position": [1120, 400]
    }
  ],
  "connections": {
    "RSS Feed Trigger": {
      "main": [
        [
          {
            "node": "Process Blog Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Process Blog Data": {
      "main": [
        [
          {
            "node": "Find Blog Template",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Find Blog Template": {
      "main": [
        [
          {
            "node": "Generate Social Graphic",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Social Graphic": {
      "main": [
        [
          {
            "node": "Post to Twitter",
            "type": "main",
            "index": 0
          },
          {
            "node": "Post to LinkedIn",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Advanced Workflows

6. Multi-Language Report Generation

Use Case: Generate reports in multiple languages with localized graphics.

{
  "name": "Multi-Language Report Generator",
  "nodes": [
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 9 1 * *"
            }
          ]
        }
      },
      "name": "Monthly Schedule",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1,
      "position": [240, 300]
    },
    {
      "parameters": {
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBasicAuth",
        "url": "https://your-analytics-api.com/monthly-report",
        "options": {}
      },
      "name": "Get Analytics Data",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4,
      "position": [460, 300]
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "1",
              "name": "languages",
              "value": "[\"en\", \"es\", \"fr\", \"de\", \"ja\"]",
              "type": "array"
            }
          ]
        },
        "options": {}
      },
      "name": "Set Languages",
      "type": "n8n-nodes-base.set",
      "typeVersion": 3,
      "position": [680, 300]
    },
    {
      "parameters": {
        "fieldToSplitOut": "languages",
        "options": {}
      },
      "name": "Split Languages",
      "type": "n8n-nodes-base.itemLists",
      "typeVersion": 3,
      "position": [900, 300]
    },
    {
      "parameters": {
        "resource": "template",
        "operation": "search",
        "query": "monthly-report-{{$json.languages}}"
      },
      "name": "Find Localized Template",
      "type": "n8n-nodes-canvelete.canvelete",
      "typeVersion": 1,
      "position": [1120, 300],
      "credentials": {
        "canveleteOAuth2Api": {
          "id": "1",
          "name": "Canvelete OAuth2 account"
        }
      }
    },
    {
      "parameters": {
        "resource": "render",
        "operation": "create",
        "templateId": "={{$json.templates[0].id}}",
        "format": "pdf",
        "dynamicData": "{\"report_month\":\"{{$now.toFormat('MMMM yyyy')}}\",\"total_users\":\"{{$node['Get Analytics Data'].json.total_users}}\",\"revenue\":\"{{$node['Get Analytics Data'].json.revenue}}\",\"growth_rate\":\"{{$node['Get Analytics Data'].json.growth_rate}}%\",\"top_countries\":\"{{$node['Get Analytics Data'].json.top_countries}}\",\"language\":\"{{$node['Split Languages'].json.languages}}\"}"
      },
      "name": "Generate Localized Report",
      "type": "n8n-nodes-canvelete.canvelete",
      "typeVersion": 1,
      "position": [1340, 300],
      "credentials": {
        "canveleteOAuth2Api": {
          "id": "1",
          "name": "Canvelete OAuth2 account"
        }
      }
    },
    {
      "parameters": {
        "operation": "upload",
        "fileId": {
          "__rl": true,
          "value": "1BxiMVs0XRA5nFMdKvBdBZjgmUUqptlbs74OgvE2upms",
          "mode": "list",
          "cachedResultName": "Monthly Reports"
        },
        "name": "Monthly_Report_{{$node['Split Languages'].json.languages}}_{{$now.toFormat('yyyy-MM')}}.pdf",
        "options": {}
      },
      "name": "Upload to Google Drive",
      "type": "n8n-nodes-base.googleDrive",
      "typeVersion": 3,
      "position": [1560, 300]
    }
  ],
  "connections": {
    "Monthly Schedule": {
      "main": [
        [
          {
            "node": "Get Analytics Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Analytics Data": {
      "main": [
        [
          {
            "node": "Set Languages",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Languages": {
      "main": [
        [
          {
            "node": "Split Languages",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Languages": {
      "main": [
        [
          {
            "node": "Find Localized Template",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Find Localized Template": {
      "main": [
        [
          {
            "node": "Generate Localized Report",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Localized Report": {
      "main": [
        [
          {
            "node": "Upload to Google Drive",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Best Practices and Tips

Workflow Design Principles

  1. Modular Design

    • Break complex workflows into smaller, reusable components
    • Use sub-workflows for common operations
    • Implement proper error boundaries
  2. Performance Optimization

    • Use appropriate batch sizes (5-10 items for Canvelete operations)
    • Implement delays between API calls to respect rate limits
    • Cache frequently used data (templates, designs)
  3. Error Handling

    • Always enable "Continue on Fail" for non-critical operations
    • Implement retry logic for transient errors
    • Log errors for debugging and monitoring
  4. Security

    • Use OAuth2 credentials instead of API keys when possible
    • Validate input data before processing
    • Implement proper access controls

Dynamic Data Best Practices

  1. Data Validation

    // Validate required fields
    if (!$json.title || !$json.description) {
      throw new Error('Missing required fields: title, description');
    }
     
    // Sanitize data
    const cleanTitle = $json.title.replace(/[<>]/g, '');
    const cleanDescription = $json.description.substring(0, 200);
  2. Image URL Handling

    // Ensure image URLs are accessible
    const imageUrl = $json.image_url || 'https://yoursite.com/default-image.jpg';
     
    // Handle relative URLs
    const fullImageUrl = imageUrl.startsWith('http') 
      ? imageUrl 
      : `https://yoursite.com${imageUrl}`;
  3. Date Formatting

    // Format dates consistently
    const formattedDate = new Date($json.date).toLocaleDateString('en-US', {
      year: 'numeric',
      month: 'long',
      day: 'numeric'
    });

Monitoring and Debugging

  1. Logging Strategy

    • Log all API requests and responses
    • Track processing times and success rates
    • Monitor rate limit usage
  2. Testing Workflows

    • Use manual triggers for testing
    • Test with various data scenarios
    • Validate error handling paths
  3. Performance Monitoring

    • Track workflow execution times
    • Monitor memory usage for large batches
    • Set up alerts for failures

Community Templates

Template Library

The Canvelete community maintains a library of workflow templates:

  • Social Media Automation: Auto-generate posts for multiple platforms
  • E-commerce Graphics: Product images, sale banners, promotional materials
  • Content Marketing: Blog graphics, newsletter headers, infographics
  • Event Management: Tickets, badges, promotional materials
  • Reporting: Automated report generation with charts and branding

Contributing Workflows

To contribute your workflows to the community:

  1. Document Your Workflow

    • Provide clear description and use case
    • Include setup instructions
    • Add example data and expected outputs
  2. Share in Community

    • Post in n8n Community Forum
    • Share in Canvelete Community
    • Create GitHub repository with examples
  3. Best Practices

    • Remove sensitive credentials and data
    • Use generic placeholder values
    • Include error handling examples

Support and Resources

Getting Help

Workflow Debugging

  • Enable debug mode in n8n
  • Check execution logs for errors
  • Test individual nodes with sample data
  • Verify credential permissions and scopes

Performance Optimization

  • Monitor API usage and rate limits
  • Implement appropriate delays and batching
  • Use caching for frequently accessed data
  • Optimize image sizes and formats

This comprehensive collection of workflow examples provides a solid foundation for building powerful automation solutions with Canvelete and n8n.