Self-Hosted Feed Reader

Platforms

A news feed reader: paste the RSS or Atom address of a website, and new articles are gathered into one page where you can read, categorise, bookmark and search them; the subscription list and reading history are kept in your own database. You bring it up on your own machine with Docker Compose, and the passwords for the administrator and the database are generated at random by a script. Derived from a frozen snapshot of an open-source project under the Apache-2.0 licence; the delivery adds a Dockerfile that builds from source, an orchestration file that includes the database, a password generation script and a quick-start guide in Traditional Chinese.

SubscriptionUS$49 per month
Last run2026-11-02
In practice
Readiness4 / 5
What you need
Few changes needed4 / 5

Who it is for

Individuals and small teams who want to follow the updates of many websites in a reader they run themselves, and keep the subscription list and reading history in their own database.

How to start

$ sh scripts/quickstart/init-env.sh
$ docker compose up -d --build

Browse the files

Files in the product repository at the pinned commit. A few house files are left out of the zip.

File overview678 paths
▸client7
README.md
client.go
client_test.go
doc.go
model.go
options.go
request.go
▸contrib65
README.md
ansible/
bruno/
docker-compose/
grafana/
sysvinit/
thunder_client/
▸internal548
api/
cli/
config/
crypto/
database/
fever/
googlereader/
http/
integration/
locale/
…
▸packaging15
debian/
docker/
miniflux.conf
rpm/
systemd/
▸scripts1
quickstart/
▫ATTRIBUTION.md
▫CONTRIBUTING.md
▫Dockerfile.quickstart
▫LICENSE
▫LICENSE-99LL.md
▫Makefile
▫PRODUCT.md
▫Procfile
▫QUICKSTART.md
▫README.md
▫SECURITY.md
▫SECURITY.upstream.md
▫delivery-manifest.txt
▫docker-compose.yml
▫go.mod
▫go.sum
▫main.go
▫miniflux.1
▫Config and hidden files 24

Latest passing run

Clone → Checkout → Toolchain → Build images → Reader and admin login

Pre-purchase Disclosure

What you are buying

A self-hosted news subscription reader: paste a website’s RSS or Atom address and new articles are collected into one page, where you can read, sort, bookmark and search them. It is brought up with Docker Compose.

Derived from an open-source project under the Apache-2.0 licence, and not the original project itself. Our work: a Dockerfile that builds the image from source, an orchestration file, a password generation script and a quick-start guide in Traditional Chinese.

Delivery is a frozen snapshot: one zip, taken from the product repository at revision 7620ce0.

Known limitations

  • The service serves plain HTTP on port 8080 of the local machine; TLS and a reverse proxy are yours to bring
  • The interface after sign-in is in English by default, and Traditional Chinese is switched on in the settings
  • The administrator password is set only on the first start, and changing .env afterwards does not change an existing account
  • After it starts, the service connects to the websites you subscribe to from time to time and fetches their public feed content
  • The data lives in a Docker named volume, and docker compose down -v deletes all of it
  • The first start builds the image from source, fetching from registries and package repositories during that time
  • Pinned to the delivered snapshot; it does not follow upstream.

The liability cap, the scope of what is promised and the statutory floor are governed by the Terms of Service.

Vetting record

Everything below was checked against the pinned commit 8de58f8. Every verdict carries its full reasoning, an evidence link and the checker; failures are published, not hidden — do not take our word for it, verify it yourself.

5 PASS0 WARN0 FAIL

Source ReviewPASS

Execution surface of the delivery reviewed item by item. Our own additions were read line by line: docker-compose.yml (the port is bound to 127.0.0.1 only; the database opens no port, is fixed at a major version and keeps its data in a named volume; it refuses to start when the database password or the administrator account and password are missing), scripts/quickstart/init-env.sh (openssl generates random values, .env is mode 600, and an existing .env only has missing or empty entries completed with the other lines kept as they are) and Dockerfile.quickstart (compared line by line with upstream’s Alpine one, differing only in comments and in the base image being fixed in version). Compared with upstream, the product repository changes no upstream source, only adds files and adjusts the ignore list and the security notes file. The upstream Go and front-end sources were not read file by file; the basis is the Apache-2.0 licence and container isolation.

Evidence is in our private repository (not publicly accessible):https://github.com/dev-zillio-cc/dsp-050-self-hosted-feed-reader/blob/7620ce02113d0b396772ec948cadd2cf93e22526/docker-compose.ymlChecked in 2026Checked by claude-code build-product session
Script SafetyPASS

The scripts on the buyer’s delivery path were each inspected: init-env.sh is ours (read line by line); the build goes through Dockerfile.quickstart (read line by line: the executable is built from source with make and system packages are installed from apk, with no download piped straight into a shell); the final image runs upstream’s executable as a non-root user.

Evidence is in our private repository (not publicly accessible):https://github.com/dev-zillio-cc/dsp-050-self-hosted-feed-reader/blob/7620ce02113d0b396772ec948cadd2cf93e22526/Dockerfile.quickstartChecked in 2026Checked by claude-code build-product session
RecencyPASS

This product is a frozen snapshot and does not follow upstream: the upstream source is pinned to the main-line revision taken on the day the product repository was created (see the evidence link), and the product repository is that snapshot plus our own commits.

Evidence ↗Checked in 2026Checked by claude-code build-product session
LicensePASS

SPDX:LicenseRef-99LL-Product

Upstream LICENSE was checked word for word (the evidence link points at the file itself at the pinned version and matches the copy inside the product repository): the full Apache License 2.0 text. It allows commercial use, modification, derivative works, redistribution and sale; the duties are to include the licence text, keep the copyright and attribution notices and mark files that were modified (LICENSE and ATTRIBUTION.md ship in the zip); upstream has no NOTICE file. The decision does not rest on GitHub’s licence field. For the product as a whole the 99LL product licence template is attached: upstream’s LICENSE is kept as it is and LICENSE-99LL.md is added as the sale and liability terms for the part we built, with spdx recorded as LicenseRef-99LL-Product.

Evidence ↗Checked in 2026Checked by claude-code build-product session
Dependency LicensesPASS

This records the declared side, not a scan result: the Go dependencies are declared in go.mod and locked by go.sum, and the packages themselves are fetched from their own repositories when the buyer builds; the base image, the database image and the system packages come from a registry and apk. These dependency trees were not scanned package by package for licences. Upstream has no submodule and no third-party dataset was copied in (see ATTRIBUTION.md).

Evidence is in our private repository (not publicly accessible):https://github.com/dev-zillio-cc/dsp-050-self-hosted-feed-reader/blob/7620ce02113d0b396772ec948cadd2cf93e22526/ATTRIBUTION.mdChecked in 2026Checked by claude-code build-product session
HEALTH VERIFIED

Last verified passing: 2026-11-02

Subscribe for everything
US$49/ monthwas US$99

A subscription unlocks the whole catalogue; you do not buy this one separately.See what is included

Sign in with Google first; if you are signed out you will be sent to the sign-in page. Your subscription is billed to that same email address.

Already subscribed? This downloads straight away. Otherwise you are sent to the pricing page, or to sign in first.