A free, automated, daily email newsletter that delivers 7 timely stories from curated news sources in a casual, fact-based tone. Named in homage to the classic NES game where you delivered newspapers to subscribers, this project brings that same spirit of daily news delivery into the digital age.
- Automated daily newsletter generation
- RSS and HTML scraping from multiple sources
- AI-powered story summarization using Ollama
- Responsive email template using MJML
- Free tier optimized (GitHub Actions + Resend)
-
Clone the repository:
git clone https://github.com/yourusername/paperboy.git cd paperboy -
Create and activate a virtual environment:
python3.11 -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate
-
Install Python dependencies:
pip install -r requirements.txt
-
Install MJML:
npm install -g mjml
-
Create a
.envfile with your configuration:RESEND_API_KEY=your_resend_api_key_here EMAIL_FROM=newsletter@yourdomain.com EMAIL_TO=your-email@example.com -
Run the newsletter generation:
python send_email.py
-
Fork this repository
-
Add the following secrets to your repository:
RESEND_API_KEY: Your Resend API keyEMAIL_FROM: The sender email addressEMAIL_TO: The recipient email address
-
The workflow will run daily at 8 AM UTC and send the newsletter to your email.
Edit config.yaml to customize:
- News sources
- Maximum number of articles
- Email settings
- Summary length
/paperboy
├── .github/workflows/daily.yml # Scheduled GitHub Action
├── config.yaml # List of news sources
├── crawler/ # News scraping
├── ai/ # LLM summarization
├── templates/ # MJML email template
├── output/ # Generated HTML
├── send_email.py # Email sending
├── utils.py # Shared helpers
└── requirements.txt # Python dependencies
Feel free to submit issues and enhancement requests!
This project is licensed under the MIT License - see the LICENSE file for details.