A single self-hosted notifier that monitors your reading lists across multiple fiction platforms and sends Discord notifications when new books or chapters are released.
Supported platforms:
- GoodReads — new books and series entries from authors on your shelf
- ScribbleHub — new chapters on stories in your reading list
- Literotica — new stories from your favourite authors
- RoyalRoad — new books and chapters entries from your favourites
- Ao3 — new books and chapters entries from your favourites
One container, one .env file. Run one notifier or all three concurrently.
- Docker installed
- Accounts on whichever platforms you want to monitor
- A Discord Webhook URL
Important
AO3 and ScribbleHub require a FlareSolver instance to be running to use.
docker pull ghcr.io/riisdev/book-notifier:latestSet NOTIFIER to a comma-separated list of the platforms you want to monitor. Only include variables for the platforms you are running.
# Which notifiers to run (comma-separated, any combination)
NOTIFIER=goodreads,scribblehub,literotica,royalroad,ao3
# FlareSolver for required services
FLARESOLVER_URL=your_flaresolver_url
# Shared
WEBHOOK=https://your.webhook.url/here
# ---- GoodReads ----
GOODREADS_RECHECK_MS=300000
GOODREADS_USER_ID=your_goodreads_user_id
GOODREADS_SHELF_TAG=your_shelf_name
# ---- ScribbleHub ----
SCRIBBLEHUB_RECHECK_MS=60000
SCRIBBLEHUB_USERID=your_scribblehub_userid
# ---- AO3 ----
AO3_RECHECK_MS=6000000
AO3_USERNAME=your_username
AO3_PSEUDO=your_pseudo #optional, will fallback to username
# ---- Literotica ----
LITEROTICA_RECHECK_MS=600000
LITEROTICA_USERNAME=your_literotica_username
LITEROTICA_PASSWORD=your_literotica_password
# ---- Royal Road ----
ROYALROAD_RECHECK_MS=300000
ROYALROAD_USERID=your_royalroad_user_iddocker run -d \
--name book-notifier \
--env-file .env \
-v $(pwd)/data:/app/data \
ghcr.io/riisdev/book-notifier:latestOr build from source:
git clone https://github.com/riisdev/BookNotifier.git
cd BookNotifier
docker build -t book-notifier ./BookNotifier
docker run -d \
--name book-notifier \
--env-file .env \
-v $(pwd)/data:/app/data \
book-notifier| Variable | Description |
|---|---|
NOTIFIER |
Comma-separated list of notifiers to run. Valid values: goodreads, scribblehub, literotica, royalroad |
WEBHOOK |
Discord webhook URL where notifications will be sent |
FLARESOLVER_URL |
URL of a locally instanced FlareSolverr to fix login issues |
| Variable | Description |
|---|---|
GOODREADS_RECHECK_MS |
Interval in milliseconds between checks |
GOODREADS_USER_ID |
Your GoodReads user ID — found in your profile URL |
GOODREADS_SHELF_TAG |
Shelf to watch (e.g. to-read, currently-reading) |
| Variable | Description |
|---|---|
SCRIBBLEHUB_RECHECK_MS |
Interval in milliseconds between checks |
SCRIBBLEHUB_USERID |
Your ScribbleHub userid |
| Variable | Description |
|---|---|
AO3_RECHECK_MS |
Interval in milliseconds between checks |
AO3_USERNAME |
Your Ao3 username |
AO3_PSEUDO |
Your Ao3 pseudoname |
| Variable | Description |
|---|---|
LITEROTICA_RECHECK_MS |
Interval in milliseconds between checks |
LITEROTICA_USERNAME |
Your Literotica username |
LITEROTICA_PASSWORD |
Your Literotica password |
| Variable | Description |
|---|---|
ROYALROAD_RECHECK_MS |
Interval in milliseconds between checks |
ROYALROAD_USERID |
Your Royal Road user ID — found in your profile URL |
Each enabled notifier runs concurrently in its own loop on its own interval. They do not block or affect each other.
GoodReads fetches your shelf, collects all distinct authors, retrieves their full book lists, and checks for new standalone books and series entries against the local cache. A fresh HTTP client is created each cycle to avoid caching issues.
ScribbleHub fetches your PUBLIC reading list and each story's full table of contents, then compares the latest chapter against the cache. FlareSolver is REQUIRED.
Literotica logs in once and reuses the session across cycles, checking for new stories from your favourite authors each interval.
RoyalRoad fetches your favourites, looks through all the books and checks for new chapters, will also look if new books are added.
Ao3 fetches your public bookmarks (Max first 3 pages), looks through all the books and checks for new chapters, will also look if new books are detected.
| Notifier | Triggers |
|---|---|
| GoodReads | New book by a tracked author; new series entry |
| ScribbleHub | New story on reading list; new chapter released |
| Literotica | New story from a favourite author |
| RoyalRoad | New story on reading list; new chapter released |
| Ao3 | New story on reading list; new chapter released |
docker stop book-notifier
docker rm book-notifierTo reset the cache:
rm -rf ./dataParts of this project were developed with AI assistance. Below is a summary of where it was used:
- README generation — documentation written with AI assistance based on source code
- Summary Tags — In instances of C# Summary tags, they're generated by Visual Studio built in agent
- HTML parsing logic — CSS & HTML DOM selector and regex patterns for scraping responses
- Webhook payload formatting — Discord embed structure and message formatting
- Models Advice — Internal records and class data types were often helped formed using AI (Cleanup / Standardizing)
- GitHub Actions workflow — CI/CD pipeline for building and publishing Docker images
MIT License