A Go application that generates standardized RSS/Atom/JSON feeds for book tracking and review platforms.
This service provides feeds for recent book releases, author releases, series releases, and personalized user feeds from Hardcover.app.
The application is architected to potentially support additional book tracking platforms in the future.
- Multiple output formats: RSS, Atom, and JSON
- Rate-limited API endpoints for public access
- Recent book releases feed
- Author-specific releases feed
- Series-specific releases feed
- Personalized user feeds based on reading history
- Go 1.25+
- Provider API token (for development - Hardcover token currently required)
These instructions will get you a copy of the project up and running on your local machine.
Copy the example environment file and configure your settings:
cp .env.example .envEdit the .env file to set your configuration:
PORT: The port to run the server on (default: 8000)HARDCOVER_TOKEN: Your Hardcover API token (required for development)
Install dependencies:
go mod tidyRun directly with Go:
go run cmd/api/main.goOr use Just (if installed):
just runFor development with live reload:
just devTo build a binary:
mkdir dist
go build -o dist/bookfeed cmd/api/main.goOr with Just:
just buildRun tests:
go test ./... -vOr with Just:
just testOnce running, the application exposes the following endpoints:
GET /hc/recent.atom- Recent releases in Atom formatGET /hc/recent.rss- Recent releases in RSS formatGET /hc/recent.json- Recent releases in JSON format
GET /hc/author/{author}.atom- Specific author's releases in Atom formatGET /hc/author/{author}.rss- Specific author's releases in RSS formatGET /hc/author/{author}.json- Specific author's releases in JSON format
GET /hc/series/{series}.atom- Specific series' releases in Atom formatGET /hc/series/{series}.rss- Specific series' releases in RSS formatGET /hc/series/{series}.json- Specific series' releases in JSON format
GET /hc/me/{username}.atom- Personalized releases based on user's reading history in Atom formatGET /hc/me/{username}.rss- Personalized releases based on user's reading history in RSS formatGET /hc/me/{username}.json- Personalized releases based on user's reading history in JSON formatGET /hc/me/{username}.atom?filter=author- Filter to only show author releasesGET /hc/me/{username}.atom?filter=series- Filter to only show series releases
Update the GraphQL schema from the Hardcover API:
just downloadSchemaGenerate Go code from GraphQL schema:
just generateThe application can be deployed as a standalone binary or Docker container. It requires the PORT environment variable to be set.
Build the Docker image:
docker build -t bookfeed .Run with Docker:
docker run -p 8000:8000 bookfeed