Stremio-inspired discovery and reading platform for books with plugin-based sources.
- Frontend: dark-themed dashboard and reader (desktop + responsive mobile)
- Backend API: FastAPI
- Data: PostgreSQL for persistence, Redis for cache/rate limiting
- Metadata providers:
- Primary: Open Library API
- Fallback: Google Books API
- Plugin system:
- Install by plugin manifest URL
- Resource endpoints:
/catalog,/meta,/sources - Per-user plugin enable/disable
- Runtime dynamic resolution without restart
backend/FastAPI app, SQLAlchemy models, provider integration, plugin orchestratorfrontend/dashboard and reader UIplugin-sdk/manifest schema and sample plugindeploy/nginx configdocker-compose.ymlfull local stack
- Auth: register/login with JWT
- Discovery: rails for trending/popular/recommended/new releases
- Search: title/author/ISBN/subject through local + provider merge
- Library: bookmark/reading/completed
- Reader APIs: progress updates and retrieval
- Caching: Redis-backed search/discovery caching
- Rate limiting: per-IP middleware
- Install plugin with
POST /api/v1/plugins/install - Manifest validation for required fields
- Source and metadata aggregation from enabled plugins
- Per-user enable/disable state via
POST /api/v1/plugins/state
- Open Library:
- search:
/search.json - details:
/works/{id}.json - subject rails:
/subjects/{subject}.json
- search:
- Google Books fallback:
- search/details from
/volumes
- search/details from
Implemented in SQLAlchemy and mirrored in backend/schema.sql.
Core tables:
- users
- books_cache
- user_library
- reading_progress
- collections
- collection_books
- reading_history
- installed_plugins
- user_plugin_state
- UI based on provided design layout:
- left navigation panel
- central discovery + synopsis area
- right quick library panel
- Search has a dedicated results section and does not overwrite Continue Reading
- Clicking a book opens a rich detail view with synopsis, metadata, plugin sources, and external read or buy links
- dark theme with high contrast and matching density
- responsive behavior for tablet/mobile
- Supports:
- EPUB through epub.js
- PDF through pdf.js
- TXT directly
- Features:
- adjustable font size
- dark mode toggle
- chapter list (EPUB)
- progress slider and progress save API
- Stremio-like source-first flow: reader is effectively unlocked when plugin sources are available
See plugin-sdk/README.md:
- manifest specification
- endpoint contracts
- sample plugin and run instructions
docker compose up --build- Frontend:
http://localhost:8080 - Backend health:
http://localhost:8000/health - API docs:
http://localhost:8000/docs
cd backendpython -m venv .venvCopy-Item .env.example .env -Force.venv\\Scripts\\python.exe -m pip install -r requirements.txt.venv\\Scripts\\python.exe -m uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
Defaults are local-friendly:
DATABASE_URL=sqlite:///./nox.dbREDIS_URL=redis://localhost:6379/0
If Redis is not running, the app falls back to an in-memory cache automatically.
cd frontendpython -m http.server 8080- Open
http://localhost:8080
- Backend:
./scripts/start-backend.ps1 - Frontend:
./scripts/start-frontend.ps1 - Smoke test:
./scripts/smoke-test.ps1
cd plugin-sdk/sample-pluginpip install -r requirements.txtuvicorn main:app --reload --port 9001- Install via API using
http://localhost:9001/manifest.json
- Input validation on all API payloads
- per-IP request throttling
- plugin timeout and payload size controls
- Redis cache layer for hot endpoints
- stateless API for horizontal scaling
- CDN-ready static frontend and cover URLs