Daily Malawi news in simple English and Chichewa
# ezNews Malawi
Daily Malawi news, rewritten in simple English (CEFR A1) and Chichewa (CEFR A2). Lightweight, mobile-first, low-data. Fully automated.
Each story published here is reported by at least three mainstream Malawi news outlets. The original sources are credited and linked at the bottom of every article. Stories appear about half a day after the original reporting because the pipeline runs once per day.
---
## What's in this repo
```
eznews-malawi/
├── site/ The static website. Deploy this folder.
│ ├── index.html
│ ├── style.css ~3 KB
│ ├── app.js ~4 KB, vanilla JS
│ └── data/articles.json Updated daily by the pipeline
├── pipeline/
│ ├── run.py The full daily pipeline in one file
│ └── verify_sources.py Run once to check feeds work
├── .github/workflows/
│ └── daily.yml Runs the pipeline every day at 06:00 CAT
├── requirements.txt
├── .env.example
├── EDITOR_GUIDE.md Hand this to the Chichewa reviewer
└── README.md
```
The site loads in well under 50 KB on first visit, and subsequent visits are even smaller (cached). It works on 2G/3G connections and renders correctly without JavaScript for the basic layout — though search and language switching require JS.
---
## How it works
1. **Fetch.** Twice a day at 06:00 and 18:00 Central Africa Time (CAT), GitHub Actions starts the pipeline. The pipeline reads RSS feeds from the Malawi news outlets listed in `pipeline/run.py`. Articles older than 36 hours are discarded.
2. **Cluster.** Articles are grouped using TF-IDF similarity on title + summary text. Stories that appear in fewer than three sources are dropped.
3. **Pick top 5.** Clusters are ranked by source count, then by recency.
4. **Rewrite with Claude.** For each of the top five stories, the pipeline sends the source titles and summaries to Claude with strict instructions: simple English at A1, natural Chichewa at A2, neutral tone, no …