{"id":24989083,"url":"https://github.com/engineervix/zed-news","last_synced_at":"2025-07-31T01:17:31.664Z","repository":{"id":182935244,"uuid":"648393590","full_name":"engineervix/zed-news","owner":"engineervix","description":"Automated news digests from various Zambian 🇿🇲 sources","archived":false,"fork":false,"pushed_at":"2025-07-25T14:05:10.000Z","size":10735,"stargazers_count":9,"open_issues_count":11,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-07-25T16:36:27.798Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://zednews.pages.dev","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/engineervix.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-06-01T21:46:13.000Z","updated_at":"2025-07-25T14:05:14.000Z","dependencies_parsed_at":"2024-02-12T09:34:55.632Z","dependency_job_id":"2198e39a-b26f-4125-a81c-27fa64904639","html_url":"https://github.com/engineervix/zed-news","commit_stats":null,"previous_names":["engineervix/zed-news"],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/engineervix/zed-news","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/engineervix%2Fzed-news","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/engineervix%2Fzed-news/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/engineervix%2Fzed-news/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/engineervix%2Fzed-news/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/engineervix","download_url":"https://codeload.github.com/engineervix/zed-news/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/engineervix%2Fzed-news/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267972568,"owners_count":24174382,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-30T02:00:09.044Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-02-04T12:14:54.018Z","updated_at":"2025-07-31T01:17:31.656Z","avatar_url":"https://github.com/engineervix.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# zed-news\n\n\u003e Automated news digests from various Zambian 🇿🇲 sources.\n\n[![CI/CD](https://github.com/engineervix/zed-news/actions/workflows/main.yml/badge.svg)](https://github.com/engineervix/zed-news/actions/workflows/main.yml)\n[![Coverage](https://img.shields.io/endpoint?url=https://gist.githubusercontent.com/engineervix/f4b1128b188c4e29722bc879e4ab6574/raw/covbadge.json)](https://github.com/engineervix/zed-news/actions?query=workflow%3A%22CI%2FCD%22)\n[![healthchecks.io](https://healthchecks.io/badge/24d88c7e-cc91-4dac-b9a5-d50e52/ewRXZ-TO/zed-news.svg)](https://healthchecks.io)\n\n[![python](https://img.shields.io/badge/python-3.12-brightgreen.svg)](https://www.python.org/downloads/)\n[![Node v18](https://img.shields.io/badge/Node-v18-teal.svg)](https://nodejs.org/en/blog/release/v18.0.0)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n[![code style: prettier](https://img.shields.io/badge/code%20style-prettier-ff69b4.svg)](https://prettier.io/)\n\n[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/)\n[![Conventional Changelog](https://img.shields.io/badge/changelog-conventional-brightgreen.svg)](http://conventional-changelog.github.io)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\n\u003c!-- START doctoc generated TOC please keep comment here to allow auto update --\u003e\n\u003c!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE --\u003e\n\n- [Introduction](#introduction)\n- [Project Evolution: From Podcast to News Digest](#project-evolution-from-podcast-to-news-digest)\n- [Development](#development)\n  - [Core](#core)\n  - [Web](#web)\n- [Deployment](#deployment)\n- [Contributing](#contributing)\n- [TODO](#todo)\n  - [Dev](#dev)\n  - [Frontend (Web)](#frontend-web)\n  - [Features for future releases](#features-for-future-releases)\n- [Credits](#credits)\n  - [Music](#music)\n  - [Icons](#icons)\n  - [News Sources](#news-sources)\n\n\u003c!-- END doctoc generated TOC please keep comment here to allow auto update --\u003e\n\n## Introduction\n\nThis tool gathers news from various Zambian 🇿🇲 sources, processes them, and presents them as a text-based news digest.\n\nThe project has two main components:\n\n- **core** -- A Python application that handles:\n\n  - Gathering news from RSS feeds using [requests](https://pypi.org/project/requests/), [feedparser](https://pypi.org/project/feedparser/), and [beautifulsoup4](https://pypi.org/project/beautifulsoup4/).\n  - Processing the news articles using Large Language Models (LLMs).\n  - Generating structured data for the static website.\n\n- **web** -- An [11ty](httpss://www.11ty.dev/) static site that presents the news digests.\n\n## Project Evolution: From Podcast to News Digest\n\nAfter 500 episodes, I decided to transition the Zed News project from generating audio podcast episodes to producing text-based news digests. The core value of providing consolidated Zambian news is still preserved.\n\nThe original podcast episodes have been archived, and the project now focuses on delivering fast, scannable news content.\n\n## Development\n\n- Clone or fork the project.\n- `cd` into the project directory.\n\n### Core\n\n\u003e **Note**\n\u003e\n\u003e You need to have `docker` and `docker-compose` on your machine.\n\n- Install [Poetry](https://python-poetry.org/).\n- Create a Python [virtual environment](https://realpython.com/python-virtual-environments-a-primer/).\n- Install dependencies:\n  ```bash\n  poetry install\n  ```\n- Set up environment variables:\n\n  ```bash\n  # Copy the example .env file\n  cp -v .env.example .env\n\n  # Update the values in your new .env file\n  ```\n\n- Build and run the Docker containers:\n  ```bash\n  inv up --build\n  ```\n- Access the `app` container's shell:\n  ```bash\n  inv exec app bash\n  ```\n\nInside the container, you can run the following commands:\n\n- Run tests:\n  ```bash\n  inv test\n  ```\n- Generate a new digest:\n  ```bash\n  inv digest\n  ```\n\nSee available [invoke](https://www.pyinvoke.org/) tasks with `invoke -l`.\n\nThe project uses [pgweb](https://github.com/sosedoff/pgweb) to visualize database changes. Access it at \u003chttp://127.0.0.1:8081\u003e.\n\n### Web\n\nThis project uses Node.js [v18](https://nodejs.org/en/blog/release/v18.0.0). We recommend using [fnm](https://github.com/Schniz/fnm) or [volta](https://volta.sh/) to manage Node.js versions.\n\n- Install frontend dependencies:\n  ```bash\n  npm install\n  ```\n- Start the local development server (accessible at \u003chttp://127.0.0.1:8080/\u003e):\n  ```bash\n  npm start\n  ```\n\nSee other available scripts in `package.json`.\n\n## Deployment\n\nThe project's final output is a **static site**, which can be hosted on any platform that supports static files, such as [Cloudflare Pages](https://pages.cloudflare.com/), [Netlify](https://www.netlify.com/), [Vercel](https://vercel.com/), or [GitHub Pages](https://pages.github.com/).\n\n\u003e **Warning**\n\u003e\n\u003e Ensure that environment variables are updated accordingly for both the **core** application and the **web** build process.\n\nFor an automated, hands-off setup, follow these steps:\n\n1.  Set up a [nix-based](https://en.wikipedia.org/wiki/Unix-like) machine (e.g., a VPS or your laptop) with a Python virtual environment, `docker`, and `docker-compose`.\n2.  Configure a cron job to run the `cron.sh` script located in the project root. This script automates the generation and deployment process.\n3.  Ensure `git` is configured correctly on the machine, as the `cron.sh` script pushes the generated content to the repository, which in turn triggers the website's build and deployment pipeline.\n\n\u003e **Note**\n\u003e\n\u003e The `cron.sh` script uses [Apprise](https://github.com/caronc/apprise) to send notifications when a new digest is ready. You will need to configure the notification service (e.g., ntfy.sh) in your `.env` file.\n\n## Contributing\n\n\u003c!-- Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions, issues and feature requests are most welcome! A good place to start is by helping out with the unchecked items in the [TODO](#todo) section of this README!\n\nFeel free to check the [issues page](https://github.com/engineervix/zed-news/issues) and take a look at the [contributing guide](https://github.com/engineervix/zed-news/blob/main/CONTRIBUTING.md) before you get started.\n\nTo maintain code quality and formatting consistency, we utilize pre-commit hooks. These hooks automatically check and format your code before each commit. This helps ensure that the codebase remains clean and consistent throughout the development process. Set up the Git pre-commit hooks by running the following\n\n```bash\npre-commit install \u0026\u0026 pre-commit install --hook-type commit-msg\n```\n\nSee `pre-commit-config.yaml` for more details. In addition, please note the following:\n\n- if you're making code contributions, please try and write some tests to accompany your code, and ensure that the tests pass. Also, were necessary, update the docs so that they reflect your changes.\n- your commit messages should follow the conventions described [here](https://www.conventionalcommits.org/en/v1.0.0/). Write your commit message in the imperative: \"Fix bug\" and not \"Fixed bug\" or \"Fixes bug\".\n  Once you are done, please create a [pull request](https://github.com/engineervix/zed-news/pulls).\n\n## TODO\n\n### Dev\n\n- [ ] Improve test coverage\n\n### Frontend (Web)\n\n- [ ] Create a dynamic `og:image` for each digest.\n- [ ] Keep things DRY. For example, the header and footer icons.\n- [ ] Improve the mobile UI.\n- [ ] Improve accessibility (a11y).\n- [ ] Implement search functionality for the news digests.\n\n### Features for future releases\n\n- [ ] Add weather reports/forecasts\n- [ ] Add exchange rates feature.\n- [ ] Consider more sustainable AI integrations\n- [ ] Add [Diamond TV](https://diamondtvzambia.com) as a news source.\n\n## Credits\n\n### Music\n\n- \u003chttps://pixabay.com/music/beats-sweet-breeze-167504/\u003e\n- \u003chttps://pixabay.com/music/beats-aesthetic-beat-royalty-free-music-215851/\u003e\n- \u003chttps://pixabay.com/music/beats-digital-technology-131644/\u003e\n- \u003chttps://pixabay.com/music/beats-stellar-echoes-202315/\u003e\n- \u003chttps://pixabay.com/music/afrobeat-it-afrobeat-149308/\u003e\n\n### Icons\n\n- \u003chttps://www.pngrepo.com/svg/227923/news-reporter-woman\u003e\n- \u003chttps://www.svgrepo.com/svg/205960/news-paper\u003e\n\n### News Sources\n\n- [ZNBC](https://znbc.co.zm/)\n- [Zambia Daily Mail](http://www.daily-mail.co.zm/)\n- [Times of Zambia](https://times.co.zm/)\n- [News Diggers!](https://diggers.news/)\n- [Muvi TV](https://www.muvitv.com/)\n- [Mwebantu](https://www.mwebantu.com/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fengineervix%2Fzed-news","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fengineervix%2Fzed-news","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fengineervix%2Fzed-news/lists"}