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 .env
Edit 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 tidy
Run directly with Go:
go run cmd/api/main.go
Or use Task (if installed):
task run
For development with live reload:
task dev
To build a binary:
mkdir dist
go build -o dist/bookfeed cmd/api/main.go
Or with Task:
task build
Run tests:
go test ./... -v
Or with Task:
task test
Once 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:
task download-schema
Generate Go code from GraphQL schema:
task generate
The 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