Skip to content

Repository files navigation

ANN — All the News You Need

CI License: MIT Python

Go to Today's Headlines.

A tiny daily news digest for people who know they don't need the news but are afraid of missing something truly important.

The premise: news consumption is not civic virtue, a way to stay well-informed, or a sound path to better understanding the world. The news is inherently prone to focusing on outlier events, sensational content, and outrage. It's entertainment posing as information. You don't need to follow it.

ANN fetches candidate headlines from major outlets, asks the configured model provider to keep only the five per outlet most likely to still matter in 30 days — significance, not virality — and writes a small Markdown digest. A Streamlit dashboard then puts those headlines on a calm, rotating display.

Screenshots

ANN TV dashboard showing a WSJ headline

NYT headline rotation AP headline rotation
ANN TV dashboard showing a NYT headline ANN TV dashboard showing an AP headline

Attribution

The original concept, premise, and digest format are the work of ulyssestenn. This repository is an independent implementation of what that project describes, with full credit and rights to the original idea reserved to its author. See NOTICE.

What it does

Each run generates a file named headlines-YYYY-MM-DD.md containing five headlines each from:

  1. WSJ — material significance: markets, law, institutions, geopolitics.
  2. NYT — agenda-setting influence among cultural and professional elites.
  3. NBC — mainstream national news.
  4. AP — the wire-service baseline.

Headlines are selected for durable consequence (war, courts, elections, regulation, markets, science, public health, infrastructure) and deliberately avoid celebrity news, outrage bait, polling noise, and viral filler.

No fabrication: the model chooses candidates by index only, so every title and link comes verbatim from the source feed. Where a URL cannot be confirmed, the digest carries a cross-verified summary with no link.

Quick start

python3 -m venv .venv
.venv/bin/pip install -r requirements-dev.txt   # or requirements.txt for runtime only
cp .env.example .env          # add your provider API key

.venv/bin/python ann.py run   # generate today's digest
.venv/bin/streamlit run streamlit_app.py   # open the dashboard on :8501

By default ANN uses Anthropic (ANTHROPIC_API_KEY). To use OpenAI or Google Gemini instead, set the matching key (OPENAI_API_KEY, or GEMINI_API_KEY) and run with ANN_MODEL_PROVIDER=openai / ANN_MODEL_PROVIDER=gemini, or pass --model-provider <provider> --model <model-name>.

The dashboard

The Streamlit app uses a TV-friendly dark ANN display: a four-outlet left rail, live date/time, outlet-specific accent colors, and a large rotating headline panel with high-contrast white text. It rotates through every headline in the latest digest — 10 seconds each — and highlights the active outlet as each story appears. The dashboard checks for updated digest files every 30 seconds.

Run with Docker

export ANTHROPIC_API_KEY=sk-...
docker compose up --build          # dashboard on http://localhost:8501
docker compose run --rm digest     # generate a digest into the shared volume

The image runs as a non-root user with a read-only root filesystem; generated digests live on the ann-digests volume (ANN_DIGEST_DIR=/data) rather than in the image or a bind-mounted source tree.

See docs/DEVOPS.md for image details and CI.

Documentation

Tests

.venv/bin/python -m pytest
.venv/bin/ruff check .

What this is not

This is not an attempt to showcase balance, and not a substitute for being informed — which requires reading and contemplating actual books and longform content, not the news. This is (more than) all the news you need.

License

MIT © 2026 William C. Brown and the ANN contributors. Original concept © ulyssestenn.

About

No description, website, or topics provided.

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages