š 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:
- Source: Where content comes from (e.g., Twitter)
- Transform: How content is modified (e.g., AI enhancement, formatting)
- 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"
}
}
]
}
}
}
]
š Popular Plugin Combinationsā
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ā
- Start Simple: Begin with a basic workflow and add complexity as needed
- Test Thoroughly: Test your configuration with sample content before going live
- Monitor Performance: Check how your workflows perform and adjust as needed
- Combine Strategically: Different plugins work well together for specific use cases
- Use Environment Variables: Store sensitive information as environment variables
š Troubleshootingā
Common issues and solutions:
Issue | Solution |
---|---|
Content not appearing in distribution channels | Check your curator approval status and distribution plugin configuration |
Formatting looks incorrect | Review your transformer plugin settings and template format |
Missing environment variables | Ensure all required environment variables are set in your .env file |
Rate limiting errors | Add delays between distributions or reduce frequency |
š Finding More Pluginsā
Visit the Plugin Directory to discover all available plugins and their detailed configuration options.