Personal Reading Tracker
A clean, self-hosted web app to track your reading history. Designed for personal use on your local machine or a home server like a Raspberry Pi.
- Track your reading — Log books with title, subtitle, author, pages, dates, and ratings
- Automatic calculations — Days to complete, pages per day
- Year-over-year tracking — Books grouped by year with dual numbering (all-time + yearly)
- Book types — Categorize books (Fiction, Non-Fiction, or custom types)
- Cover art — Fetch covers and book info via ISBN from Open Library, or upload your own
- Multiple views — Detailed (horizontal cards) and Compact (stacked) layouts
- Dashboard stats — Draggable info cards with reading charts
- 6 color themes — Ink, Slate, Parchment, Witching Hour, Crimson Veil, Terminal
- Custom backgrounds — Solid colors or upload your own images
- DNF tracking — Mark books as "Did Not Finish" with pages completed
- Fortune bar — Daily quotes with optional sun/moon astrology signs
- Export — CSV or Markdown with date range filtering
- Auto-backup — Configurable automatic backups with retention settings
- Password protected — Secure access with configurable session timeout
- Responsive design — Works on desktop, tablet, and phone
Customizable 5-tier rating system (default names):
- ☆ No rating
- ★ Black
- ★ Bronze
- ★ Silver
- ★ Gold
- ★ Green
- Python 3.10+
# Clone the repository
git clone https://github.com/rsembera/libram.git
cd libram
# Create virtual environment
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Run (production mode with Waitress)
python main.py
# Or run in development mode (auto-reload)
python main.py --debugThe app runs at http://127.0.0.1:8090
On first launch, you'll be prompted to create a password. This protects access to your reading tracker.
- Click Add Book from the main view
- Fill in title, author, pages
- Optionally add ISBN (auto-fills title, author, pages, and cover), or upload a cover
- Set the date you began reading
- When finished, add the completion date
- Add a rating and notes if desired
Yearly numbering is based on when you began a book. A book started December 28, 2024 belongs to 2024 (and counts toward your 2024 total) even if finished in January 2025.
Monthly stats (books per month, average pages per day) are based on when you finished a book. These track your reading output - what you actually completed each month.
Escape— Clear search / Close modals
For 24/7 access on your home network:
export LIBRAM_HOST=0.0.0.0
export LIBRAM_PORT=8090
python main.pyAccess from other devices at http://your-server-ip:8090
LIBRAM_HOST— Bind address (default:127.0.0.1)LIBRAM_PORT— Port number (default:8090)LIBRAM_DEBUG— Set to1for development modeLIBRAM_BROWSER— Set to1to auto-open browser on start
- Database:
data/libram.db(SQLite) - Covers:
covers/ - Backups:
backups/ - Custom backgrounds:
web/static/user_backgrounds/
- Backend: Python 3, Flask, Waitress
- Database: SQLite
- Frontend: Vanilla JavaScript, CSS custom properties
- Fonts: Lexend, Libre Baskerville, Lora, Source Sans 3, Literata
- Icons: Phosphor Icons
AGPL-3.0 License — see LICENSE for details.
Designed by Richard Sembera
Built with Claude
"A libram for every reader."
