Skip to content

dmyates/riverbucket

Repository files navigation

Riverbucket logo Riverbucket


Riverbucket is an app with two faces:

  • River: an organized collection of recent posts from your lovingly curated collection of RSS/Atom feeds.
  • Bucket: a list of links from around the web, bookmarked for later reading.

Features

  • Subscribe by feed or site URL -- this includes blogs, YouTube channels and playlists, Medium profiles/tags/publications, Mastodon accounts, Reddit listings and GitHub releases/tags/commits. Subscriptions are updated periodically or on demand.
  • Browse recent feed items grouped by tag and source.
  • Save feed items to the bucket with one click.
  • Configure select feeds to automatically save new entries to the bucket.
  • Import and export feeds via OPML and bookmarks via JSON/HTML.
  • Add sites to the river current site and pages to the bucket through the companion webextension.

Screenshots

River, dark theme River, light theme
River view in dark theme River view in light theme
Bucket, dark theme Bucket, light theme
Bucket view in dark theme Bucket view in light theme

Non-features

Riverbucket intentionally does not do any of the following:

  • Track or count which feed items you have or haven't read like an email inbox.
  • Provide a reader mode or text backup for article content.
  • Provide algorithmic ranking or similar content suggestions.
  • Use LLMs to summarise articles or provide digests.

Deployment and usage

Riverbucket is a single-user Cloudflare Workers app, with a password for authentication. To use it, sign up for a free Cloudflare account and follow these steps to deploy it with Wrangler.

Install dependencies:

npm install

Create your Wrangler config from the example:

cp wrangler.example.jsonc wrangler.jsonc

Create the remote D1 database and feed refresh queue:

npx wrangler d1 create riverbucketdb
npx wrangler queues create riverbucket-feed-refresh

Copy the D1 database ID from the wrangler d1 create output into wrangler.jsonc as database_id, or update the existing value if your checkout already has a config. If you change the database or queue names, update both wrangler.jsonc and the matching database name in the db:migrate:* scripts in package.json.

Generate a password hash:

npm run password:hash -- "YOUR-SUPER-SECURE-PASSWORD-HERE"

It should resemble this: pbkdf2-sha256$.... Paste it into a secret:

npx wrangler secret put APP_PASSWORD_HASH

Then generate and set a session-signing secret:

openssl rand -base64 48
npx wrangler secret put SESSION_SECRET

Apply the remote database migrations:

npm run db:migrate:remote

And finally, deploy to Cloudflare Workers:

npm run deploy

Your instance should then be available at https://riverbucket.YOURNAME.workers.dev. Log in with your password and start reading.

Browser extension

The extension lives in extension/. To install it:

  1. Open your browser's extensions page.
  2. Enable Developer Mode.
  3. Load extension/ as an unpacked extension.
  4. Configure the Riverbucket app URL and an extension token in the extension options. You can provision extension tokens from the Settings tab on your Riverbucket instance.

The extension can save the current page, save right-clicked links, and discover feeds from the current page.

Development

Install dependencies:

npm install

Run the frontend dev server:

npm run dev

Typecheck the app and Worker:

npm run typecheck

Build the frontend and typecheck the Worker:

npm run build

Apply D1 migrations locally:

npm run db:migrate:local

Apply D1 migrations remotely:

npm run db:migrate:remote

The configured production D1 database name is riverbucketdb.

License

Riverbucket is licensed under the GNU Affero General Public License v3.0. See LICENSE.

About

Follow feeds and save things for later.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors