Files
ReadMeABook/documentation
Claude 5188fe1727 Fix qBittorrent category save path not updating when config changes
Previously, when a user changed the download_dir setting after initial
setup, the qBittorrent category "readmeabook" would retain the old save
path. This could cause torrents to download to the wrong location,
depending on qBittorrent's Automatic Torrent Management (ATM) settings.

Root cause:
- ensureCategory() only created the category if it didn't exist
- createCategory API is idempotent but doesn't update existing categories
- If download_dir changed from /downloads to /downloads/RMAB, category
  would still have savePath=/downloads

qBittorrent behavior:
- If ATM enabled: category savePath overrides per-torrent savepath
- If ATM disabled: per-torrent savepath takes precedence

Fix:
- ensureCategory() now calls both createCategory AND editCategory
- createCategory: ensures category exists (idempotent)
- editCategory: updates save path to match current download_dir config
- This guarantees category path is always synced with database config

Benefits:
- Users can change download_dir setting and it takes effect immediately
- Works regardless of ATM settings in qBittorrent
- No manual qBittorrent category management needed

Updated documentation/phase3/qbittorrent.md to explain category
management and save path synchronization.
2026-01-28 11:41:56 -05:00
..
2026-01-28 11:41:24 -05:00
2026-01-28 11:41:24 -05:00
2026-01-28 11:41:24 -05:00
2026-01-28 11:41:24 -05:00
2026-01-28 11:41:24 -05:00
2026-01-28 11:41:24 -05:00
2026-01-28 11:41:24 -05:00
2026-01-28 11:41:24 -05:00
2026-01-28 11:41:24 -05:00
2026-01-28 11:41:24 -05:00

ReadMeABook - Audiobook Library Management

Status: MVP Complete (Phases 1-4 ) | Docker deployment pending

Stack

  • Frontend: Next.js 14+, TypeScript, Tailwind CSS
  • Backend: Node.js/Express via Next.js API routes
  • Database: PostgreSQL (Docker embedded)
  • Queue: Bull + Redis (Docker embedded)
  • Deployment: Single Docker image

Architecture

Docker Container
├── Next.js App (Frontend + Backend)
├── PostgreSQL (users, audiobooks, requests, config, jobs)
├── Bull Queue + Redis (background jobs)
└── Volumes: /config, /downloads, /media

External integrations: Plex (auth + library), Prowlarr/Jackett (indexers), qBittorrent/Transmission (downloads), Audible (metadata scraping)

Core Features (Implemented)

  • Plex OAuth authentication
  • Setup wizard (8 steps: admin, Plex, Prowlarr, download client, paths)
  • Audiobook discovery (popular, new releases via Audible scraping)
  • Request management with status tracking
  • Automation pipeline: search → download → organize → Plex scan
  • Admin dashboard with metrics, active downloads, recent requests
  • Settings pages (Plex, Prowlarr, download client, paths)
  • Scheduled jobs (Plex scan, Audible refresh, retry logic, cleanup)
  • User/admin RBAC

User Flow

  1. Login with Plex → 2. Search/browse audiobooks → 3. Request → 4. Auto: search indexers → download torrent → organize files → scan Plex → 5. Available in Plex library

Documentation Map

Backend:

Integrations:

Automation (Phase 3):

Frontend:

Admin:

Deployment:

Development Phases

Phase 1: Foundation (auth, database, setup wizard) Phase 2: User features (discovery, requests, dashboard) Phase 3: Automation (search, download, organize, Plex integration) Phase 4: Admin tools (dashboard, settings, monitoring, scheduled jobs) Phase 5: Enhanced features (WebSockets, advanced search) Phase 6: Advanced admin (analytics, notifications, quality profiles)

Standards

  • Files ≤400 lines
  • File headers link to documentation
  • Update docs before/after code changes
  • Type-safe TypeScript throughout
  • Encrypted sensitive config (AES-256)