Welcome to the RSS-Bluesky Bridge project! This open-source tool automatically fetches RSS feed items and posts them to Bluesky, creating a seamless bridge between traditional RSS feeds and the Bluesky social network.
- Fetches items from an RSS feed
- Filters items based on age
- Optionally summarizes content using AI (via Amazon Bedrock)
- Posts items to Bluesky with rich text and external link embeds
- Prevents duplicate posts using DynamoDB
- Serverless architecture using AWS CDK and Lambda functions
- AWS CDK (TypeScript)
- AWS Lambda (Rust)
- Amazon DynamoDB
- Amazon Bedrock (optional, for AI summarization)
- AWS Step Functions
- AWS Secrets Manager to store Bluesky username and password
- AWS CLI configured with appropriate permissions
- Node.js (v22 or later)
- Rust (latest stable version)
- cargo-lambda
- Clone the repository:
git clone https://github.com/yourusername/rss-bluesky-bridge.git
cd rss-bluesky-bridge
- Install dependencies:
cd cdk
npm install
- Create a
.env.local
file in thecdk
directory with the following content:
DEV_ACCOUNT=your-aws-account-id
DEV_REGION=your-aws-region
PROD_ACCOUNT=123456789012
PROD_REGION=us-west-2
FEED_URL=hhttps://example.com/feed.rss
MAX_AGE_HOURS=48
ENABLE_AI_SUMMARY=true
AI_MODEL_ID=anthropic.claude-3-haiku-20240307-v1:0
AI_SUMMARY_MAX_GRAPHEMES=100
- Deploy the stack:
cd cdk
# deploy to production aws account
npm run deploy-prod
# deploy to dev aws account
npm run deploy
- After deployment, go to the AWS Secrets Manager console and update the
bluesky-credentials
secret with your Bluesky username and password:
{
"username": "your-bluesky-username",
"password": "your-bluesky-password"
}
FEED_URL: The URL of the RSS feed you want to bridge to Bluesky
MAX_AGE_HOURS: Maximum age of RSS items to consider (in hours)
ENABLE_AI_SUMMARY: Set to true to enable AI summarization using Amazon Bedrock
AI_MODEL_ID: The Bedrock model ID to use for summarization
AI_SUMMARY_MAX_GRAPHEMES: Maximum length of AI-generated summaries
We welcome contributions to the RSS-Bluesky Bridge project! Here's how you can help:
- Fork the repository
- Create a new branch (git checkout -b feature/amazing-feature)
- Make your changes
- Commit your changes (git commit -am 'Add some amazing feature')
- Push to the branch (git push origin feature/amazing-feature)
- Open a Pull Request
Please make sure to update tests as appropriate and adhere to the existing coding style. 📜 License
This project is licensed under the MIT License - see the LICENSE file for details.
If you have any questions or need help with setup, please open an issue in the GitHub repository, and we'll be happy to assist you!
Happy bridging! 🌉