{"id":48267541,"url":"https://github.com/nikilyushkin/gday","last_synced_at":"2026-04-04T21:58:14.638Z","repository":{"id":47551120,"uuid":"505752584","full_name":"nikilyushkin/gday","owner":"nikilyushkin","description":"Infomate.club fork in the South Hemisphere","archived":false,"fork":false,"pushed_at":"2024-04-17T01:31:48.000Z","size":443,"stargazers_count":0,"open_issues_count":2,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-04-26T03:32:47.633Z","etag":null,"topics":["django","news","rss-reader","webapp"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nikilyushkin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2022-06-21T08:19:32.000Z","updated_at":"2022-07-20T23:22:16.000Z","dependencies_parsed_at":"2023-10-04T11:47:31.182Z","dependency_job_id":null,"html_url":"https://github.com/nikilyushkin/gday","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nikilyushkin/gday","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikilyushkin%2Fgday","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikilyushkin%2Fgday/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikilyushkin%2Fgday/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikilyushkin%2Fgday/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nikilyushkin","download_url":"https://codeload.github.com/nikilyushkin/gday/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nikilyushkin%2Fgday/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31416054,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T20:09:54.854Z","status":"ssl_error","status_checked_at":"2026-04-04T20:09:44.350Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["django","news","rss-reader","webapp"],"created_at":"2026-04-04T21:58:13.826Z","updated_at":"2026-04-04T21:58:14.599Z","avatar_url":"https://github.com/nikilyushkin.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Gday, mate!\n\n[![Deploy master](https://github.com/nikilyushkin/gday/actions/workflows/deploy.yml/badge.svg)](https://github.com/nikilyushkin/gday/actions/workflows/deploy.yml)\n\nGday.mate is a small web service that shows multiple RSS sources on one page and performs tricky parsing and summarizing articles using TextRank algorithm. \n\nIt helps to keep track of news from different areas without subscribing to hundreds of media accounts and getting annoying notifications.\n\nThematic and people-based collections does a really good job for discovery of new sources of information. Since we all are biased, such compilations can really help us to get out of information bubbles.\n\nThe code of the service created by [Vas3k.club](https://vas3k.club) community. The original service is live [here](https://infomate.club).\n\n### Live URL: [gday.iocats.com](https://gday.iocats.com)\n\n![](https://gday.iocats.com/static/images/gday_poc.png)\n\n## 🐶 This is a fork of a pet-project 😬\n\nWhich means you really shouldn't expect much from it.  No state-of-art kubernetes bullshit, no architecture patterns, even no tests at all. It's here just to show people what a pet-project might look like.\n\nThis code has been written for fun, not for business. \n\n## 🤔 How it works\n\nIt's basically a Django web app with a bunch of [scripts](scripts) for RSS parsing. It stores the parsed data in a PostgreSQL database.\n\nThe web app is only used to show the data (with heavy caching). \nParsing and feed updates are performed by the three scripts running in cron. Like poor people do.\n\n[Feedparser](https://pythonhosted.org/feedparser/) and [BeautifulSoup](https://www.crummy.com/software/BeautifulSoup/bs4/doc/) are used to find, download and parse RSS. \n\nText summarization is done via [newspaper3k](https://newspaper.readthedocs.io/en/latest/) with some additional protection against bad types of content like podcasts and too big pages in general, which can eat all your memory.\n\n## ▶️ Running it locally\n\nThe easy way. Install [docker](https://docs.docker.com/install/) on your machine. Then:\n\n```\ngit clone git@github.com:nikilyushkin/gday.git\ncd gday\ndocker-compose up --build\n```\n\nOn the first run you might need to wait until the \"migrate_and_init\" container will finish its job populating your database. \n\nIt takes a while.\n\nAfter that you can open [localhost:8000](http://localhost:8000) in your favorite browser and enjoy.\n\nIf something stucked or you want to terminate it completely, use this command in another terminal:\n\n```shell script\ndocker-compose down --remove-orphans\n```\n\n\n## ⚙️ boards.yml format\n\nAll collections and feeds are stored in one file — [boards.yml](boards.yml). \nThis is your main and only entry point to add new stuff. \n\n```\nboards:\n- name: Tech            # board title\n  slug: tech            # board url\n  is_visible: true      # visibility on the main page\n  is_private: false     # private boards require logging in\n  curator:              # board author profile\n    name: John Wick \n    title: Main news\n    avatar: https://i.vas3k.ru/fhr.png \n    bio: Major technology media in English and Russian\n    footer: \u003e\n      this is a general selection of popular technology media.\n      The page is updated once per hour.\n  blocks:               # list of logical feed blocks\n  - name: English       # block title\n    slug: en            # unique board id\n    feeds:         \n      - name: Hacker News\n        url: https://news.ycombinator.com\n        rss: https://news.ycombinator.com/rss\n      - name: dev.to\n        url: https://dev.to\n        rss: https://dev.to/feed\n      - name: TechCrunch\n        rss: http://feeds.feedburner.com/TechCrunch/\n        url: https://techcrunch.com\n        is_parsable: false  # do not try to parse pages, show RSS content only\n        conditions:\n          - type: not_in\n            field: title\n            word: Trump   # exclude articles with a word \"Trump\" in title\n```\n\n## 💎 Running in production\n\nDeployment is done using a simple Github Action which builds a docker container, puts it into Github Registry, logs into your server via SSH and pulls it. \nThe pipeline is triggered on every push to master branch. If you want to set up your own fork, please add these constants to your repo SECRETS:\n\n```\nAPP_HOST — e.g. \"https://your.host.com\"\nGHCR_TOKEN — your personal guthib access token with permissions to read/write into Github Registry\nSECRET_KEY — random string for django stuff (not really used)\nSENTRY_DSN — if you want to use Sentry\nPRODUCTION_SSH_HOST — hostname or IP of your server\nPRODUCTION_SSH_USERNAME — user which can deploy to your server\nPRODUCTION_SSH_KEY — private key for this user\n```\n\nAfter you install them all and commit something to the master, the action should run and deploy it to your server on port **8816**. \n\nDon't forget to set up nginx as a proxy for that app (add SSL and everything else in there). Here's example config for that: [etc/nginx/infomate.club.conf](etc/nginx/infomate.club.conf)\n\nIf something doesn't work, check the action itself: [.github/workflows/deploy.yml](.github/workflows/deploy.yml)\n\n## 🎉 Contributing\n\nPull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.\n\nYou can help us with opened issues too. There's always something to work on.\n\nWe don't have any strict rules on formatting, just explain your motivation and the changes you've made to the PR description so that others understand what's going on.\n\n## 👩‍💼 License\n\nOriginal code [Apache 2.0](LICENSE) © Vasily Zubarev\n\n\u003e TL;DR: you can modify, distribute and use it commercially, \nbut you MUST reference the original author or give a link to service","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnikilyushkin%2Fgday","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnikilyushkin%2Fgday","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnikilyushkin%2Fgday/lists"}