Rinds #
A collection of feeds under one roof. including Fresh Feeds
Running #
Install go, setup postgres, and then generate the required feed definitions under your user account. You can use https://pdsls.dev to generate a app.bsky.feed.generator record.
Set the rkey to the desired short url value. Itll look like:
https://bsky.app/profile/{you}/feed/{rkey}
for the contents you can use the example below
{
"did": "did:web:${your service endpoint}",
"$type": "app.bsky.feed.generator",
"createdAt": "2025-01-21T11:33:02.396Z",
"description": "wowww very descriptive",
"displayName": "Cool Feed Name",
}
If you are specifically trying to run any of the preexisting feeds, make sure to use the rkey as defined in the /pkg/feeds/*/feed.go and main.go files
Env #
You can check out .env.example for an example
The port is for your feedgen serve, not your postgres port
Pinned Posts #
You can pin one post to the top of the first page of every fresh feed (rinds, random, reposts, mnine, oreplies, and their -replies variants) using these optional env vars:
PINNED_POST_URI=at://did:plc:xxx/app.bsky.feed.post/abc
PINNED_POST_START=2026-08-10T12:00:00Z # optional: hide until this time
PINNED_POST_END=2026-08-11T12:00:00Z # optional: hide after this time
The pinned post renders with a pin reason (app.bsky.feed.defs#skeletonReasonPin) and is only injected on the first page. If the pinned post already appears in the feed it is deduped so it only shows once. Env vars are read at startup, so changing the announcement requires a feedgen restart.
Postgres #
Be sure to set up .env correctly
All relevant tables should be created automatically when needed.
Index #
You should start Postgres first Then go run the firehose indexder inside
cd ./indexer
And then go compile it
go build -o indexer ./indexer.go && export $(grep -v '^#' ./../.env | xargs) && ./indexer
Once compiled, you can use rerun.sh to ensure it will automatically recover after failure
Serve #
Make sure the indexer (or at least Postgres) is running first:
go build -o feedgen cmd/main.go && export $(grep -v '^#' ./.env | xargs) && ./feedgen
Logs are pretty verbose, just FYI.
Todo #
Architecture #
Based on go-bsky-feed-generator. Read the README in the linked repo for more info about how it all works. This repository differs from the template by not using the docker system at all.
/pkg/feeds/static #
Basic example feed from the template. Kept as a sanity check if all else seems to fail.
/pkg/feeds/fresh #
Fresh feeds, all built around a shared Following feed builder and logic to set posts as viewed. May contain some remnant old references to the old name "rinds".
- Go 99%
- Docker <1%
- Makefile <1%
- Shell <1%