Froidefond Julien 648d86970f feat: suivi de la progression de lecture par livre
- API : nouvelle table book_reading_progress (migration 0016) et module
  reading_progress.rs avec GET/PATCH /books/:id/progress (token read)
- API : GET /books/:id enrichi avec reading_status, reading_current_page,
  reading_last_read_at via LEFT JOIN
- Backoffice : badge de statut (Non lu / En cours · p.N / Lu) sur la page
  de détail et overlay sur les BookCards
- OpenSpec : change reading-progress avec proposal/design/specs/tasks

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-10 21:53:52 +01:00
2026-03-09 23:48:08 +01:00
2026-03-06 11:56:50 +01:00

Stripstream Librarian

A comprehensive comic book and e-book management system with automatic indexing, full-text search, and a modern web interface.

Architecture

The project consists of the following components:

  • API (apps/api/) - Rust-based REST API service
  • Indexer (apps/indexer/) - Rust-based background indexing service
  • Backoffice (apps/backoffice/) - Next.js web administration interface
  • Infrastructure (infra/) - Docker Compose setup with PostgreSQL and Meilisearch

Quick Start

Prerequisites

  • Docker and Docker Compose
  • (Optional) Rust toolchain for local development
  • (Optional) Node.js 18+ for backoffice development

Environment Setup

  1. Copy the example environment file:

    cp .env.example .env
    
  2. Edit .env and set secure values for:

    • MEILI_MASTER_KEY - Master key for Meilisearch
    • API_BOOTSTRAP_TOKEN - Bootstrap token for initial API authentication

Running with Docker

cd infra
docker compose up -d

This will start:

  • PostgreSQL (port 6432)
  • Meilisearch (port 7700)
  • API service (port 7080)
  • Indexer service (port 7081)
  • Backoffice web UI (port 7082)

Accessing the Application

Default Credentials

The default bootstrap token is configured in your .env file. Use this for initial API authentication.

Development

Local Development (without Docker)

API & Indexer (Rust)

# Start dependencies
cd infra
docker compose up -d postgres meilisearch

# Run API
cd apps/api
cargo run

# Run Indexer (in another terminal)
cd apps/indexer
cargo run

Backoffice (Next.js)

cd apps/backoffice
npm install
npm run dev

The backoffice will be available at http://localhost:3000

Features

Libraries Management

  • Create and manage multiple libraries
  • Configure automatic scanning schedules (hourly, daily, weekly)
  • Real-time file watcher for instant indexing
  • Full and incremental rebuild options

Books Management

  • Support for CBZ, CBR, and PDF formats
  • Automatic metadata extraction
  • Series and volume detection
  • Full-text search with Meilisearch

Jobs Monitoring

  • Real-time job progress tracking
  • Detailed statistics (scanned, indexed, removed, errors)
  • Job history and logs
  • Cancel pending jobs
  • Full-text search across titles, authors, and series
  • Library filtering
  • Real-time suggestions

Environment Variables

Variable Description Default
API_LISTEN_ADDR API service bind address 0.0.0.0:7080
INDEXER_LISTEN_ADDR Indexer service bind address 0.0.0.0:7081
BACKOFFICE_PORT Backoffice web UI port 7082
DATABASE_URL PostgreSQL connection string postgres://stripstream:stripstream@postgres:5432/stripstream
MEILI_URL Meilisearch connection URL http://meilisearch:7700
MEILI_MASTER_KEY Meilisearch master key (required) -
API_BOOTSTRAP_TOKEN Initial API admin token (required) -
INDEXER_SCAN_INTERVAL_SECONDS Watcher scan interval 5
LIBRARIES_ROOT_PATH Path to libraries directory /libraries

API Documentation

The API is documented with OpenAPI/Swagger. When running locally, access the docs at:

http://localhost:7080/swagger-ui

Project Structure

stripstream-librarian/
├── apps/
│   ├── api/              # Rust REST API
│   ├── indexer/          # Rust background indexer
│   └── backoffice/       # Next.js web UI
├── infra/
│   ├── docker-compose.yml
│   └── migrations/       # SQL database migrations
├── libraries/            # Book storage (mounted volume)
└── .env                  # Environment configuration

License

[Your License Here]

Description
No description provided
Readme 6.9 MiB
Languages
TypeScript 48.5%
Rust 48.2%
Shell 1.9%
CSS 0.7%
Dockerfile 0.5%
Other 0.2%