Bibliotheca is a self-hosted personal library and reading tracker web app built with Flask. It lets you log, organize, and visualize your reading journey. Add books by ISBN, track reading progress, log daily reading, and generate monthly wrap-up images of your finished titles.
- 📖 Add Books: Add books quickly by ISBN with automatic cover and metadata fetching. Now featuring import from Goodreads CSV files!
- ✅ Track Progress: Mark books as Currently Reading, Want to Read, Finished, or Library Only.
- 📅 Reading Logs: Log daily reading activity and maintain streaks.
- 🖼️ Monthly Wrap-Ups: Generate shareable image collages of books completed each month.
- 🔎 Search: Find and import books using the Google Books API.
- 📱 Responsive UI: Clean, mobile-friendly interface built with Bootstrap.
Bibliotheca can be run completely in Docker — no need to install Python or dependencies on your machine.
- Docker installed
- Docker Compose installed
docker run -d \
-v bibliotheca_data:/app/data \
-p 5054:5054 \
--name bibliotheca \
pickles4evaaaa/bibliotheca:latest
Create a docker-compose.yml
file:
version: '3.8'
services:
bibliotheca:
image: pickles4evaaaa/bibliotheca:latest
container_name: bibliotheca
ports:
- "5053:5054"
volumes:
- bibliotheca_data:/app/data
restart: unless-stopped
environment:
- TIMEZONE=America/Chicago # ✅ Set your preferred timezone here
- WORKERS=6 # Set the number of Gunicorn workers to 6
volumes:
bibliotheca_data:
Then run:
docker compose up -d
Variable | Description | Default / Example |
---|---|---|
TIMEZONE |
Sets the app's timezone | America/Chicago |
READING_STREAK_OFFSET |
Adjusts reading day streak | 160 (160 days + new days logged) |
WORKERS |
Number of Gunicorn worker processes | 6 |
- Python 3.8+
pip
-
Clone the repository
git clone https://github.com/pickles4evaaaa/bibliotheca.git cd bibliotheca
-
Create a Python virtual environment
python3 -m venv venv source venv/bin/activate
-
Install dependencies
pip install -r requirements.txt
-
Run the app
gunicorn -w NUMBER_OF_WORKERS -b 0.0.0.0:5054 run:app
Visit: http://127.0.0.1:5054
💡 No need to manually set up the database — it is created automatically on first run.
-
By default, uses SQLite (
books.db
) and a simple dev secret key. -
For production, you can configure:
SECRET_KEY
DATABASE_URI
via environment variables or.env
.
bibliotheca/
├── app/
│ ├── __init__.py
│ ├── models.py
│ ├── routes.py
│ ├── utils.py
│ └── templates/
├── static/
├── requirements.txt
├── run.py
├── docker-compose.yml
└── README.md
Licensed under the MIT License.
Bibliotheca is open source and contributions are welcome!
Pull requests, bug reports, and feature suggestions are appreciated.