Skip to main content

šŸ”Œ Using Plugins for Content Workflows

Learn how to leverage curate.fun's plugin system to automate your content curation and distribution workflows āš”

šŸŒŸ What Are Plugins?ā€‹

Plugins extend curate.fun's functionality, allowing you to:

  • šŸ“„ Source content from different platforms
  • šŸ”„ Transform content into different formats
  • šŸ“¤ Distribute content to various platforms

As a user, you don't need to write code - you can simply configure existing plugins to create powerful content workflows.

šŸ› ļø Setting Up Plugin Workflowsā€‹

Basic Workflow Structureā€‹

A typical content workflow has three stages:

  1. Source: Where content comes from (e.g., Twitter)
  2. Transform: How content is modified (e.g., AI enhancement, formatting)
  3. Distribute: Where content goes (e.g., Telegram, RSS, Notion)

The workflow follows a linear path: Source ā†’ Transform ā†’ Distribute

Configuration Structureā€‹

A complete curate.config.json file has several key sections:

{
"global": {
// Global settings
},
"plugins": {
// Plugin registration
},
"feeds": [
// Feed configurations
]
}

1. Plugin Registrationā€‹

First, register the plugins you want to use:

"plugins": {
"@curatedotfun/telegram": {
"type": "distributor",
"url": "https://unpkg.com/@curatedotfun/telegram@latest/dist/remoteEntry.js"
},
"@curatedotfun/rss": {
"type": "distributor",
"url": "https://unpkg.com/@curatedotfun/rss@latest/dist/remoteEntry.js"
},
"@curatedotfun/simple-transform": {
"type": "transformer",
"url": "https://unpkg.com/@curatedotfun/simple-transform@latest/dist/remoteEntry.js"
},
"@curatedotfun/object-transform": {
"type": "transformer",
"url": "https://unpkg.com/@curatedotfun/object-transform@latest/dist/remoteEntry.js"
},
"@curatedotfun/ai-transform": {
"type": "transformer",
"url": "https://unpkg.com/@curatedotfun/ai-transform@latest/dist/remoteEntry.js"
}
}

2. Feed Configurationā€‹

Then configure each feed with its own workflow:

"feeds": [
{
"id": "ethereum",
"name": "This Week in Ethereum",
"description": "Ethereum ecosystem updates",
"moderation": {
"approvers": {
"twitter": ["user1", "user2"]
}
},
"outputs": {
"stream": {
"enabled": true,
"transform": [
{
"plugin": "@curatedotfun/object-transform",
"config": {
"mappings": {
"source": "https://x.com/{{username}}/status/{{tweetId}}",
"content": "{{content}}",
"author": "{{username}}",
"notes": "{{curator.notes}}",
"submittedAt": "{{submittedAt}}"
}
}
},
{
"plugin": "@curatedotfun/ai-transform",
"config": {
"prompt": "Summarize the content into a concise news flash",
"apiKey": "{OPENROUTER_API_KEY}",
"schema": {
"title": {
"type": "string",
"description": "Title derived from summary of content"
},
"summary": {
"type": "string",
"description": "Summary of content influenced by curator notes"
}
}
}
}
],
"distribute": [
{
"transform": [
{
"plugin": "@curatedotfun/simple-transform",
"config": {
"template": "šŸ”· Ethereum: *{{title}}*\n\n{{summary}}\n\nšŸ‘¤ Source [@{{author}}](https://x.com/{{author}})_\nšŸ”— [Read More](<{{source}}>)"
}
}
],
"plugin": "@curatedotfun/telegram",
"config": {
"botToken": "{TELEGRAM_BOT_TOKEN}",
"channelId": "@your_channel"
}
}
]
}
}
}
]

AI-Enhanced News Flashā€‹

Transform tweets into professional news flashes with AI-generated titles and summaries:

"transform": [
{
"plugin": "@curatedotfun/object-transform",
"config": {
"mappings": {
"source": "https://x.com/{{username}}/status/{{tweetId}}",
"content": "{{content}}",
"author": "{{username}}",
"notes": "{{curator.notes}}",
"submittedAt": "{{submittedAt}}"
}
}
},
{
"plugin": "@curatedotfun/ai-transform",
"config": {
"prompt": "Summarize the content into a concise news flash",
"apiKey": "{OPENROUTER_API_KEY}",
"schema": {
"title": {
"type": "string",
"description": "Title derived from summary of content"
},
"summary": {
"type": "string",
"description": "Summary of content influenced by curator notes"
}
}
}
}
],
"distribute": [
{
"transform": [
{
"plugin": "@curatedotfun/simple-transform",
"config": {
"template": "šŸ”· {{feedName}}: *{{title}}*\n\n{{summary}}\n\nšŸ‘¤ Source [@{{author}}](https://x.com/{{author}})_\nšŸ”— [Read More](<{{source}}>)"
}
}
],
"plugin": "@curatedotfun/telegram",
"config": {
"botToken": "{TELEGRAM_BOT_TOKEN}",
"channelId": "@your_channel"
}
}
]

Multi-Platform Distributionā€‹

Send the same content to multiple platforms with platform-specific formatting:

"distribute": [
{
"transform": [
{
"plugin": "@curatedotfun/simple-transform",
"config": {
"template": "šŸš¢ {{feedName}}: *{{title}}*\n\n{{summary}}\n\nšŸ‘¤ Source [@{{author}}](https://x.com/{{author}})_\nšŸ”— [Read More](<{{source}}>)"
}
}
],
"plugin": "@curatedotfun/telegram",
"config": {
"botToken": "{TELEGRAM_BOT_TOKEN}",
"channelId": "-1001941128087"
}
},
{
"transform": [
{
"plugin": "@curatedotfun/object-transform",
"config": {
"mappings": {
"title": "{{title}}",
"content": "<h2>{{title}}</h2><p>{{summary}}</p>",
"description": "{{summary}}",
"link": "{{source}}",
"publishedAt": "{{createdAt}}",
"author": {
"name": "{{username}}",
"link": "https://x.com/{{author}}"
},
"categories": ["{{feedName}}", "{{tags}}"]
}
}
}
],
"plugin": "@curatedotfun/rss",
"config": {
"serviceUrl": "http://localhost:4001",
"apiSecret": "{API_SECRET}"
}
}
]

Daily Recap Generationā€‹

Create daily summaries of curated content:

"outputs": {
"recap": {
"enabled": true,
"schedule": "0 18 * * *", // Daily at 6 PM
"transform": [
{
"plugin": "@curatedotfun/ai-transform",
"config": {
"prompt": "Create a summary of today's top content, organizing it by topic and highlighting the most important developments.",
"apiKey": "{OPENROUTER_API_KEY}",
"schema": {
"title": {
"type": "string",
"description": "Recap title"
},
"summary": {
"type": "string",
"description": "Full recap text"
}
}
}
}
],
"distribute": [
{
"transform": [
{
"plugin": "@curatedotfun/simple-transform",
"config": {
"template": "šŸ“… Daily Recap: *{{title}}*\n\n{{summary}}"
}
}
],
"plugin": "@curatedotfun/telegram",
"config": {
"botToken": "{TELEGRAM_BOT_TOKEN}",
"channelId": "@your_channel"
}
}
]
}
}

šŸ”§ Customizing Plugin Behaviorā€‹

Each plugin has specific configuration options. Here are some common customizations:

Transformer Pluginsā€‹

AI Transformā€‹

  • prompt: Customize how AI enhances your content
  • model: Choose different AI models for different needs
  • temperature: Control creativity vs. precision

Simple Transformā€‹

  • template: Define custom formatting templates
  • placeholders: Map content fields to template variables

Distributor Pluginsā€‹

Telegramā€‹

  • format: Choose between plain text, HTML, or Markdown
  • preview: Enable/disable link previews
  • notification: Enable/disable notification sounds

Notionā€‹

  • properties: Map content fields to Notion database properties
  • icon: Set custom icons for created pages
  • tags: Automatically add tags to entries

RSSā€‹

  • itemCount: Control how many items appear in the feed
  • customElements: Add custom XML elements
  • cacheTime: Set caching duration

šŸ’” Tips for Effective Plugin Usageā€‹

  1. Start Simple: Begin with a basic workflow and add complexity as needed
  2. Test Thoroughly: Test your configuration with sample content before going live
  3. Monitor Performance: Check how your workflows perform and adjust as needed
  4. Combine Strategically: Different plugins work well together for specific use cases
  5. Use Environment Variables: Store sensitive information as environment variables

šŸ” Troubleshootingā€‹

Common issues and solutions:

IssueSolution
Content not appearing in distribution channelsCheck your curator approval status and distribution plugin configuration
Formatting looks incorrectReview your transformer plugin settings and template format
Missing environment variablesEnsure all required environment variables are set in your .env file
Rate limiting errorsAdd delays between distributions or reduce frequency

šŸŒ Finding More Pluginsā€‹

Visit the Plugin Directory to discover all available plugins and their detailed configuration options.

šŸš€ Next Stepsā€‹