diff --git a/.gitignore b/.gitignore index 5e3c552a..382433b6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules/ package-lock.json github.secrets +.DS_Store diff --git a/apps/rss/config.json b/apps/rss/config.json new file mode 100644 index 00000000..77ae5419 --- /dev/null +++ b/apps/rss/config.json @@ -0,0 +1,16 @@ +{ + "$schema": "../schema.json", + "name": "RSS", + "port": 8141, + "available": true, + "exposable": true, + "id": "rss", + "tipi_version": 1, + "version": "v1.2.0", + "categories": ["utilities, media"], + "description": "A simple twitter-feed-style RSS aggregator written in PHP, Laravel, Inertia.js, Tailwind and Vue.js", + "short_desc": "A simple, opinionated, RSS feed aggregator.", + "author": "https://github.com/ssddanbrown", + "source": "https://github.com/ssddanbrown/rss", + "form_fields": [] +} diff --git a/apps/rss/data/storage/feeds.txt b/apps/rss/data/storage/feeds.txt new file mode 100644 index 00000000..47958518 --- /dev/null +++ b/apps/rss/data/storage/feeds.txt @@ -0,0 +1,3 @@ +https://noted.lol/rss Notedā­[#9233B1] #self-hosting +https://www.linuxserver.io/blog.rss Linux-Server[#0078b9] #self-hosting +https://blog.networkprofile.org/rss Network-Profile[#D48D27] #self-hosting \ No newline at end of file diff --git a/apps/rss/docker-compose.yml b/apps/rss/docker-compose.yml new file mode 100644 index 00000000..5345da8d --- /dev/null +++ b/apps/rss/docker-compose.yml @@ -0,0 +1,26 @@ +version: "2" + +services: + rss: + image: ghcr.io/ssddanbrown/rss:v1.2.0 + container_name: rss + environment: + - APP_NAME=Tipi-RSS + - APP_FEED_UPDATE_FREQUENCY=35 + - APP_LOAD_POST_THUMBNAILS=true + volumes: + - ${APP_DATA_DIR}/data/storage:/app/storage + ports: + - "${APP_PORT}:80" + restart: unless-stopped + labels: + traefik.enable: ${APP_EXPOSED} + traefik.http.routers.rss.rule: Host(`${APP_DOMAIN}`) + traefik.http.routers.rss.entrypoints: websecure + traefik.http.routers.rss.service: rss + traefik.http.routers.rss.tls.certresolver: myresolver + traefik.http.services.rss.loadbalancer.server.port: 80 + networks: + - tipi_main_network + + diff --git a/apps/rss/metadata/description.md b/apps/rss/metadata/description.md new file mode 100644 index 00000000..e4b7863d --- /dev/null +++ b/apps/rss/metadata/description.md @@ -0,0 +1,89 @@ +# RSS + +A simple, opinionated, RSS feed aggregator. + +# Edit the feeds.txt file. + +## Feed Configuration + +Feed configuration is handled by a plaintext file on the host system. +By default, using our docker image, this configuration would be located in a `feeds.txt` file within the path you mounted to `/app/storage`. + +The format of this file can be seen below: + +```txt +https://feed.url.com/feed.xml feed-name #tag-a #tag-b +https://example.com/feed.xml Example #updates #news + +# Lines starting with a hash are considered comments. +# Empty lines are fine and will be ignored. + +# Underscores in names will be converted to spaces. +https://example.com/feed-b.xml News_Site #news + +# Feed color can be set using square brackets after the name. +# The color must be a CSS-compatible color value. +https://example.com/feed-c.xml Blue_News[#0078b9] #news #blue +``` + +## Features + +The following features are built into the application: + +- Supports RSS and ATOM formats. +- Regular auto-fetching of RSS feeds. + - Every hour by default, configurable down to 5 mins. +- Custom feed names and colors. +- Feed-based tags for categorization. +- 3 different post layout modes (card, list, compact). +- Fetching of page open-graph images. +- Feeds managed via a single plaintext file. +- System-based dark/light theme. +- Post title/description search. +- Ready-to-use docker image. +- Mobile screen compatible. +- Built-in support to prune old post data. + +## Limitations + +The below possibly expected features are missing from this application. +This is not a list of planned features. Please see the [Low Maintenance Project](#low-maintenance-project) section below for more info. + +- No import of full post/article content. +- No feed management via the UI. +- No user system or user management system. +- No authentication or authorization built-in. +- No customization, extension or plugin system. +- No organisation upon simple feed-level tagging. +- Error handling is limited and will likely not alert clearly upon issue. + +Upon the above, it's quite likely you'll come across issues. This project was created to meet a personal need while learning some new technologies. Much of the logic is custom written instead of using battle-tested libraries. + +## Screenshots + + + + + + + + + + + +
+ Card View + + + List View + + + Compact View + + + Dark Mode + +
+ + + diff --git a/apps/rss/metadata/logo.jpg b/apps/rss/metadata/logo.jpg new file mode 100644 index 00000000..a0f440b8 Binary files /dev/null and b/apps/rss/metadata/logo.jpg differ