An AI generated satirical newspaper.
The flow is roughly:
- Source news articles to inspire the story (Metaphor/Exa, Twitter trends, @alium_ai mentions)
- Edit articles into satirical stories (headline, text, image)
- Publish the story (Jekyll Blog on Github Pages, Twitter)
-
Find a better news source than GNews API -
Improve image generation (article title -> image prompt is not very good & gets cencored sometimes) -
Refactor codebase to extend source, editor, publisher -
Publisher: Virtual screenshot of story for posting to Twitter as an image -
Editor: Define an image style, improve image consistency & humour -
Source: Don't source articles about disasters e.g. war, murder, etc. - Editor: Enable LiteLLM caching for development
- Source: Improve Twitter caching (not currently persistent on Modal, only for local development)
- Source: Make @alium_ai mentions work given Twitter rate limits
- Source: More alternative news sources e.g. https://www.brief.news/
For local Python development using uv:
curl -LsSf https://astral.sh/uv/install.sh | sh
uv sync
uv run python server.py
To run with Modal, first setup secrets, then:
modal run server.py
To serve the static site locally install Ruby + Jekyll & then run:
eval "$(rbenv init -)"
bundle exec jekyll server
- Clone repo
- Modify _config.yml
- Setup Github Pages
- Install Modal Labs
- Add your own secrets to Modal
- Deploy Modal server manually or setup ci-cd as per .github/workflows/ci-cd.yml
modal deploy server.py
Manually publish stories by running:
modal run server.py::generate_and_publish_stories
Or deploy the Modal server and let it run on the schedule:
modal deploy server.py