Go to file
Ivo Oskamp 5d83bfccab Performance: lazy covers, ETag caching, single DOM pass, SQL tag aggregation
- IntersectionObserver defers both cover images and placeholder canvas
  drawing until cards enter viewport — eliminates 1000+ upfront ops
- ETag on /library/list: browser gets 304 Not Modified when nothing changed
- Single DOM pass in renderBooksGrid/renderDuplicatesView/renderSeriesDetail:
  card.querySelector replaces second iteration with 500+ getElementById calls
- book_tags joined via json_agg in main query, removing separate SELECT + Python merge
- loadLibrary: error handling prevents silent failures showing as infinite loading
- Delete TODO-PERF-library-load.md (all four bottlenecks resolved)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-28 01:04:32 +01:00
containers/novela Performance: lazy covers, ETag caching, single DOM pass, SQL tag aggregation 2026-03-28 01:04:32 +01:00
docs Performance: lazy covers, ETag caching, single DOM pass, SQL tag aggregation 2026-03-28 01:04:32 +01:00
stack Standardize remaining UI/config text to English 2026-03-22 19:46:48 +01:00
.gitignore Update gitignore for local and Python cache files 2026-03-22 16:14:05 +01:00
build-and-push.sh Bootstrap Novela 2.0 implementation and docs 2026-03-22 16:13:45 +01:00
README.md Add AI-assisted development disclaimer to README 2026-03-22 19:40:29 +01:00

Novela

Novela is a self-hosted web application for managing and reading a personal digital library. It supports EPUB, PDF, and CBR/CBZ, with metadata editing, reading progress tracking, and Dropbox backups.

What Novela Provides

  • Library import and indexing for EPUB/PDF/CBR/CBZ
  • Home dashboard with continue reading and unread/read sections
  • Reader support for EPUB, PDF, and comics (CBR/CBZ)
  • Metadata editing (title, author, publisher, series, volume, tags, genres)
  • New review workflow with list/grid view, column toggles, and bulk actions
  • Reading analytics/statistics dashboard
  • Dropbox backup with:
    • versioned snapshots
    • object deduplication
    • retention policy
    • scheduled background runs

Tech Stack

  • FastAPI
  • Jinja2 templates + vanilla JavaScript
  • PostgreSQL 16
  • Docker / Docker Compose style deployment

Repository Layout

  • containers/novela/ - application code (routers, templates, static assets, migrations)
  • stack/ - deployment stack files and environment configuration
  • docs/ - technical status and changelog documentation
  • build-and-push.sh - helper script for container build/push

Quick Start (Development)

  1. Configure environment values in stack/novela.env.
  2. Start the stack using your preferred Docker workflow (Compose/Portainer stack).
  3. Open the app and complete backup credential setup on /backup if needed.

Key Environment Variables

  • POSTGRES_DB
  • POSTGRES_USER
  • POSTGRES_PASSWORD
  • NOVELA_MASTER_KEY
  • CONFIG_DIR
  • LIBRARY_DIR (optional override)

Documentation

  • Technical status: docs/TECHNICAL.md
  • Develop changelog: docs/changelog-develop.md

Disclaimer

This project was developed entirely with AI-assisted implementation workflows. Use it at your own discretion and responsibility, and validate behavior, security, and data handling for your environment before production use.

Status

This repository is actively evolving. The develop documentation reflects implemented behavior in the current codebase.