Giter Site home page Giter Site logo

importantus / rsswipe Goto Github PK

View Code? Open in Web Editor NEW
8.0 2.0 0.0 22.61 MB

A RSS reader that allows you to find your next article like you would find your next date

Dockerfile 0.31% TypeScript 53.43% JavaScript 0.89% HTML 0.26% Vue 42.23% CSS 2.81% Shell 0.07%
rss rss-reader progressive-web-app pwa

rsswipe's Introduction

RSSwipe

A header image with the name and logo of rsswipe

RSSwipe is a RSS reader that allows you to find your next article just like you would find your next date. Swipe left to skip, swipe right to save for later. It's that simple.

This repo contains the code for the frontend, a progressive web app written in Vuejs, and the backend, an expressjs server with a prisma database exposing a REST api.

RSSwipe was originally developed as a project for a web engineering course at the University of Applied Sciences LΓΌbeck. We took a lot of inspiration from Fox RSS - a similar app for swiping articles but it runs natively on Android and has no backend.

A mockup of the app

Features

πŸ‘† Swipe

You can swipe through articles like you would on a dating app. Swipe left to skip, swipe right to save for later.

πŸ›œ Sync Across Devices

Your account is synced across all your devices. You can use RSSwipe on your phone, tablet and computer.

πŸ“± Progessive Web App

RSSwipe is a progressive web app. You can install it on your phone or computer and use it like a native app. Articles in your readinglist are available offline.

πŸ“° RSS, Atom and RDF Feeds

You can add RSS, Atom and RDF feeds to your account. They are automatically updated on the server every few minutes.

πŸ“‘ Readinglist

You can save articles for later in your readinglist. The readinglist is synced across all your devices. To keep it clean, you can set a time after which articles are automatically removed.

🧾 Read In App

When you find an article you want to read, you can open it in the app. The article is displayed in a clean and readable format powered by Mozillas Readability. You can set per feed if you want to open the article in the app or in the browser - this way you can still support your favorite content creators.

😒 Swipe Limit

You swipe too much? No problem, you can set a swipe limit per day. When you reach the limit, you can still read articles in your readinglist.

Usage & Deployment

The recommended way to deploy RSSwipe is to use the provided docker-compose file.

To deploy the app, you need to have docker and docker-compose installed on your machine.

Get the docker-compose.yml file in the docker directory of this repository:

wget https://raw.githubusercontent.com/Importantus/RSSwipe/main/docker/docker-compose.yml

Create an .env file in the same directory as the docker-compose file and copy the content of the .env.prod file into it.

wget -O .env https://raw.githubusercontent.com/Importantus/RSSwipe/main/.env.prod

Edit the .env file and set the values for the environment variables.

Start the app (this may take a short while):

docker compose up

The app is now running on port 80 or the custom FRONTEND_FORWARD_PORT you set in the .env file.

To run the app in the background, add the -d flag:

docker compose up -d

To update the app, pull the latest changes from the repository and restart the app:

docker compose pull && docker compose up -d

Local Setup

Clone the repo:

git clone https://github.com/Importantus/RSSwipe.git

Create an .env file in the root directory of the project and copy the content of the .env.local file into it. Do the same for the .env file in the /backend/prisma directory.

Start the app:

cd RSSwipe/
docker compose up

Run migrations:

cd backend/
npx prisma migrate deploy

Generate the prisma client:

npx prisma generate

How to make changes to the database

Make changes to the schema.prisma file

Create a migration:

npx prisma migrate dev --name <name of migration>

Troubleshooting

If there are problems with the database, try to delete the docker volumes and restart the app:

docker compose down -v
docker compose up --build

rsswipe's People

Contributors

importantus avatar kyrus-sh avatar draculente avatar yamen1996 avatar max-sternitzke avatar dependabot[bot] avatar kjubbe avatar

Stargazers

 avatar About RSS avatar  avatar  avatar  avatar Jan avatar Leonard-Orlando Menzel avatar  avatar

Watchers

 avatar  avatar

rsswipe's Issues

Refactor feed UI

For development it would be easier to use the same feed-detail component everywhere.

For example:
We could use the same popup component on the feed page and on the article page when clicking on the feed label.
This would fix the bug with the not so smooth animation on the feed page, too.

Keep redirect parameter when registering

As a user I want be redirected to the relevant article or page even if I have to register first.

Currently the redirection parameter vanishes if one navigates away from the login page (e.g. to the "/register" page).

Admin interface

As an admin I want to be able to view the status of and manage my instance easily using a nice ui.

The information displayed could be:

  • The number of feeds
  • The number of articles in the system
  • The number of users / The number of monthly active users
  • The time of the next run of the garbage collector / feedparser
  • Information about all users
  • The last 100 lines of the log

To manage the instance, one could:

  • Reset the passwords of users
  • Remove users / ban users
  • Ban feeds

Add custom user agent header

For polling the rss feeds it would be nice to use a custom user agent header with info about this project (e.g. a link to this repo).

Hide the backend url option

If the option is filled with a default url, the option to change it can be hidden behind a expandable menu or something like that.

Import/export of OPML Lists

As a user, I would like to be able to export my subscribed feeds as a file in OPML format so that I can use them in another reader, for example. It would also be good to be able to import such a list into RSSwipe to make switching easier.

Take a look at the spec here: http://opml.org/spec2.opml#1629042482000

Add option for users to specify custom headers

As a user I want to be able to configure custom headers and cookies to be used when fetching the article content for readability.
This could be used to auto accept cookie banners, or read paywalled articles in news outlets where you have an account.

Filter view is too small

As a user I want to have the option to comfortably choose the feeds the swipe stack is filtered by.

Currently it works fine for a small amout if feeds. If one has a lot of feeds, the scrolling to the right takes ages.

I would be could if the user could expand the filter view to choose the options more quickly.

Fix backnavigation

Fix backnavigation in settings menu. When navigating to settings -> statistics -> settings and then using the browsers go back feature one is brought back to the statistics page instead of the home screen.

Fix backnavigation in reader. When using the browsers back navigation in the article reader one gets navigated to the last article instead of the reading list.

Fix back navigation on reading list. It should return to the home screen, not the last article.

Move between instances

As a user I want to be able to migrate my account to a different instance and take with me my feeds, lists and settings.

As an admin I want to be able to configure if users are able to migrate to my instance.

Add simpler deployment method

Currently only our own instance is automatically deployed. But since it is not publicly available, there should be a way for other people to easily set up RSSwipe for themselves. Then just without automatic deployment.

If this ticket is worked on, please also adjust the corresponding section in the readme.

Option to disable parts of the backend

As an admin I may want to run a microservice infrastructure. To support this without mayor engineer effort we could add the option to disable parts of the backend via envs.
With this setup one could run e.g. the feed-parser and garbage collector on one instance and the api on an other instance, or even potentially multiple other instances.

Encodings are not respected

The encoding headers of rss feed providers are not respected.

Additionally some rss feed providers do not set this as http headers but as xml tags.

Option to change default settings

As a user I want to have the option to change the defaults of the currently "per-device" settings. If I log in on a new device, I want those default settings to take effect, but I want to have the option to change those on a per device basis.

These settings include:

  • The UI size
  • The reader settings (reader color, font size etc.)
  • The swipe actions in the readinglist
  • potentially more...

These minor improvements are warranted, because some mobile browsers have issues where they earase the local storage of websites regularly, thereby removing "per-device" settings.

PS: Don't remove per-device settings when being logged out?

Add privacy policy

The following privacy policy should be added to the login/register and settings view. Additionally, a warning should be added to the register screen indicating that RSSwipe is for personal use only. Include an environment variable to allow the admin to choose whether to display this warning and possibly set some parameters in the privacy policy. Also, retrieve the data storage time from the server.

Privacy Policy

We appreciate your interest in RSSwipe. However, please note once again that it is a purely private offering! If you do not know us personally and do not have our permission, please do not use RSSwipe. We do not have the resources or legal knowledge to host RSSwipe for anything other than private use.

Controller

The controller for the collection, processing, and use of your personal data within the meaning of the General Data Protection Regulation (GDPR) is:

xxx

Collection and processing of data

Logfiles

Our server automatically collects and stores information in so-called server log files, which your browser automatically transmits to us. This includes connection data such as the IP address, the time of the request, the browser and operating system used, the page from which you visit us (referrer URL), the page you visit, and the amount of data transmitted. This data is solely used to ensure the smooth operation of the website and is only analyzed in exceptional cases (such as when errors occur), and does not allow us to draw any conclusions about your person.

Email

When registering, you must provide an email address. We only use this to uniquely assign your account. We will not send you any emails unless you have requested it or it is necessary for the operation of the site.

Usage data

When using RSSwipe, the data necessary for operation is collected and processed. This includes, for example, the feeds you have subscribed to, the articles you have swiped, and the articles you have saved to your reading list. We do not disclose this data to third parties and only use it for the operation of the site.

Handling

We collect and use your personal data only to the extent necessary for the provision of a functioning website, as well as our content and services.

Storage period

Your personal data will be deleted or blocked as soon as the purpose of storage ceases to exist, i.e., as soon as you delete your account. The articles you have rejected while swiping will be deleted after 7 days.

Your rights

You have the right to obtain information about the personal data concerning you. You can also request the correction of incorrect data. In certain cases, you also have the right to request the deletion of data, the restriction of data processing, and the right to data portability. Furthermore, you have the right to complain to the competent supervisory authority for data protection if you believe that the processing of your personal data is not lawful.

Right to information

Feel free to email us at xxx anytime if you have questions about your data, want to know what we have stored about you, or want to delete your data.

Right to complain

You have the right to complain to the competent supervisory authority for data protection if you believe that the processing of your personal data is not lawful. The supervisory authority responsible for us is:

Holstenstraße 98 24103 Kiel

Email: [email protected] (preferably encrypted)

Phone: 0431 988-1200 Fax: 0431 988-1223

Option to disable registration

As an admin I want to be able to disable public registration for my instance. It would be great to be able to configure this via envs.

To be able to register you could need to type in a passphrase the admin can configure

An additional feature could be invites: As in an already registered user can invite others to this instance (via custom link or email).

Overhaul the documentation

For now, I think it's enough to just leave the documentation in the readme. What should be in there:

  • General project information
  • Information for local development
  • Information on deployment such as the possible envs

Improve loadingtime of readinglist

Every time the reading list is called up, it loops over all the articles and checks whether they are older than the maximum age. Then all articles are retrieved again and returned. This inevitably slows down the request and significantly increases server utilisation.

Option to disable article classification

As an admin I want to be able to disable article classification for an instance as it uses a lot of computing time.

The frontend needs to detect that and handle the absence of categories correctly.

Regularly sync readingslist

As a user I want to be able to swipe on one device and when I switch to another device have those articles ready and downloaded to read them offline.

Idea:
Use a service worker to pull the readlingslist regularly.

Will there be a demo ?

Hi. Thanks for the creation. Just wondering if there will be a demo in the near future.

Refactor docker images

The docker images currently use some THL internal docker images as base images. It would be great to replace them.

Enrich feeds with more data

As a user it would be nice to be able to see a description of a feed. Additionally information on how many users are subscribed to the feed and how many articles are published in this feed per time-interval would be nice to have.

Idea: The description could be parsed from the rss feed description or - when there is none - similar to the favicon from the description html tag of the frontpage of the feed.

Filter feed by words

As a user I want to have the option to filter articles in my feeds by words that occur in their headlines.

For example this could be used to filter out "Anzeige: Advertisement..." type of articles.

Notify users if the parsing of a feed failed repeatedly

As a user I want to be notified if the parser failed to get one of my feeds repeatedly, so that I can look into the issue and maybe change to url or something.

Idea: If one of the feeds has an error state, display a little red dot on the homepage next to the feed-page icon. Then display more information about the error next to the feed on the feedpage.

Read article content aloud

As a user I may want the get the content of an article, or better yet the complete readinglist, read to me. E.g. when I am commuting and can't read it myself.

Option to configure different api instance

As a user I may want to use a frontend with a different backend instance.

I want to be able to set a different backend api url. This needs to be possible before login.

As an admin I still want to be able to configure a custom default backend api.

Increase performance of the readinglist

Although it is really hard to test, it appears like the really big readinglist of a single users was the cause for a quite stark drop in performance (over the whole instance) whenever the user opened the readinglist.
This drop in performance was, in fact, so big, that the health check for the instance failed.

I have some ideas to mitigate those issues in the future:

  • Paginate the readinglist
  • Set a default "time-to-disappear" for unread and read articles in the readinglist
  • Set a limit of articles one can add to the list

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.