A serverless "Read It Later" service that automatically extracts and saves web articles to a GitHub Pages site using GitHub Actions. Perfect for creating your own personal reading archive without any hosting costs.
In our information-rich world, we constantly come across interesting articles but don't always have time to read them immediately. Traditional read-later services are great, but they:
- Store your data on third-party servers
- Often require subscriptions for advanced features
- May disappear or change their terms of service
- Don't give you full control over your reading archive
This project solves these problems by:
- Using GitHub as your backend - Your articles are stored in your own repository
- Zero hosting costs - Leverages GitHub Pages for free hosting
- Complete ownership - All your data stays in your GitHub account
- Automatic archiving - Articles are extracted and formatted for offline reading
- Simple interface - Clean, readable HTML pages with navigation
The system uses GitHub's repository dispatch feature to trigger article extraction:
- You send a URL via HTTP POST request to GitHub's API
- GitHub Actions triggers and checks out your repository
- Article extraction happens using Python's newspaper library
- Content is saved as a formatted HTML file in the /entries directory
- Index is updated with a link to the new article
- GitHub Pages deploys the updated site automatically
- Go to your repository's Settings tab
- Scroll down to Pages section
- Set Source to "Deploy from a branch"
- Select gh-pages branch and / (root) folder
- Click Save
- Go to GitHub Settings → Developer settings → Personal access tokens → Tokens (classic)
- Click Generate new token (classic)
- Give it a descriptive name like "ReadItLater Dispatch"
- Select these scopes:
- repo (Full control of private repositories)
- workflow (Update GitHub Action workflows)
- Copy the generated token (you won't see it again!)
Send a test request to add your first article:
Replace:
- YOUR_PERSONAL_ACCESS_TOKEN with your token
- YOUR_USERNAME with your GitHub username
- YOUR_REPO_NAME with your repository name
- The URL with an actual article you want to save
Create a bookmarklet for one-click saving. Add this as a bookmark:
Create an iOS Shortcut that:
- Gets the current webpage URL
- Makes the HTTP request to GitHub API
- Shows a confirmation message
Once articles are processed, visit your GitHub Pages URL: https://YOUR_USERNAME.github.io/YOUR_REPO_NAME
Edit the CSS in extract.py within the html_content strings to customize:
- Colors and fonts
- Layout and spacing
- Mobile responsiveness
Modify extract.py to:
- Change filename format
- Add metadata extraction
- Include article images
- Filter content
Edit .github/workflows/publish.yaml to:
- Change trigger conditions
- Add notifications
- Modify deployment settings
- Article quality depends on the source - Some sites may not extract cleanly
- JavaScript-heavy sites may not work well with the newspaper library
- Rate limits - GitHub API has rate limits (5000 requests/hour for authenticated users)
- Repository size - Large numbers of articles may impact repository size
- Check the Actions tab for workflow errors
- Verify your personal access token has correct permissions
- Ensure the repository dispatch payload is correctly formatted
- Some sites block automated access
- Try the URL in a private browser to ensure it's publicly accessible
- Check if the site requires JavaScript to load content
- Check if GitHub Pages is enabled in repository settings
- Verify the gh-pages branch exists and has content
- GitHub Pages updates may take a few minutes to propagate
Feel free to submit issues and enhancement requests! Some ideas for improvements:
- Better mobile interface
- Search functionality
- Tag/category system
- Export options
- Better error handling
This project is open source and available under the MIT License.
Happy Reading! 📚
.png)

