AgentToolHub
Skill

frontend-aesthetics

frontend-aesthetics — a Claude Code skill from crossbill-highlights/crossbill-web

Features

  • ✓Sync highlights from KOReader with automatic deduplication
  • ✓Web interface for viewing and managing highlights by book
  • ✓Organize highlights with notes and metadata
  • ✓Create flash cards from your highlights and sync them to Anki or get AI suggestions from highlights.
  • ✓Create AI summaries from your reading sessions. Ollama, OpenAI, Anthropic and Gemini supported.
  • ✓Self-hosted - your data stays on your server
  • ✓Multi-user support

Installation Guide

Easiest way to install and run Crossbill is by using sample docker-compose.yml on top level of this repository.

  • Copy the example environment file to the project root and fill in your values:
  • bash
    cp .env.example .env
    # Edit .env with your configuration

  • Then start the services:
  • bash
    docker compose up

    Then install the Koreader [plugin on your e-reader](clients/koreader-plugin/crossbill.koplugin/README.md).

    Background Worker

    The docker-compose.yml includes an optional worker service that processes background jobs (e.g., batch AI prereading generation for book chapters). It uses the same Docker image as the main app with a different entrypoint.

    The worker requires AI provider configuration (AI_PROVIDER, API keys) to process AI-related tasks. You can adjust concurrency via WORKER_CONCURRENCY (default: 5).

    For development, run the worker separately:

    bash
    make dev-worker

    S3-Compatible Storage (Optional)

    By default, Crossbill stores ebook files and covers on the local filesystem. For multi-container deployments (e.g., Railway) where the app and worker containers cannot share a filesystem, you can configure S3-compatible storage so both containers access the same files.

    Set these environment variables to enable S3 storage:

    text
    S3_ENDPOINT_URL=https://your-s3-endpoint.example.com
    S3_ACCESS_KEY_ID=your-access-key
    S3_SECRET_ACCESS_KEY=your-secret-key
    S3_BUCKET_NAME=crossbill-files
    S3_REGION=your-region

    When these are set, Crossbill automatically uses S3 instead of local disk. When they are not set, local file storage is used (the book-files volume mount).

    For local development or self-hosted server, you can use Garage as an S3-compatible server. The docker-compose.yml includes an optional garage service.
    Start it and run the one-time setup script:

    bash
    docker compose up -d garage
    ./scripts/setup_garage.sh
    
    # After setting the environment variables restart containers if they are already running:
    docker restart crossbill-app crossbill-worker

    The script creates the bucket and API key, then prints the credentials to add to your .env. If you are going to use Garage in production, please refer their docs
    for proper settings to be set in the garage.toml!

    Reviews