LedgerDock

LedgerDock is a self-hosted document management system (DMS) for ingesting, processing, organizing, and searching files.

Core Capabilities

  • Drag and drop upload from anywhere in the UI
  • File and folder upload with path preservation
  • Asynchronous extraction and OCR for PDF, images, DOCX, XLSX, TXT, and ZIP
  • Metadata and full-text search
  • Routing suggestions based on previous decisions
  • Original file download and extracted markdown export

Technology Stack

  • Backend: FastAPI, SQLAlchemy, RQ worker (backend/)
  • Frontend: React, Vite, TypeScript (frontend/)
  • Infrastructure: PostgreSQL, Redis, Typesense (docker-compose.yml)

Runtime Services

The default docker compose stack includes:

  • frontend - React UI (http://localhost:5173)
  • api - FastAPI backend (http://localhost:8000, docs at /docs)
  • worker - background processing jobs
  • db - PostgreSQL (internal service network)
  • redis - queue backend (internal service network)
  • typesense - search index (internal service network)

Requirements

  • Docker Engine
  • Docker Compose plugin
  • Internet access for first-time image build

Quick Start

From repository root:

docker compose up --build -d

Before first run, set required secrets and connection values in .env (or your shell):

  • POSTGRES_USER
  • POSTGRES_PASSWORD
  • POSTGRES_DB
  • DATABASE_URL
  • REDIS_PASSWORD
  • REDIS_URL
  • ADMIN_API_TOKEN
  • USER_API_TOKEN
  • APP_SETTINGS_ENCRYPTION_KEY
  • TYPESENSE_API_KEY

Open:

  • Frontend: http://localhost:5173
  • API docs: http://localhost:8000/docs
  • Health: http://localhost:8000/api/v1/health

Stop the stack:

docker compose down

Common Operations

Start or rebuild:

docker compose up --build -d

Stop:

docker compose down

Tail logs:

docker compose logs -f

Tail API and worker logs only:

docker compose logs -f api worker

Reset all runtime data (destructive):

docker compose down -v

Frontend-Only Local Workflow

If backend services are already running, you can run frontend tooling locally:

cd frontend && npm run dev
cd frontend && npm run build
cd frontend && npm run preview

npm run preview serves the built app on port 4173.

Configuration

Main runtime variables are defined in docker-compose.yml:

  • API and worker: DATABASE_URL, REDIS_URL, REDIS_SECURITY_MODE, REDIS_TLS_MODE, STORAGE_ROOT, PUBLIC_BASE_URL, CORS_ORIGINS, ALLOW_DEVELOPMENT_ANONYMOUS_USER_ACCESS, TYPESENSE_*, APP_SETTINGS_ENCRYPTION_KEY
  • Frontend: optional VITE_API_BASE, optional VITE_API_TOKEN compatibility fallback, optional VITE_DEV_PROXY_TARGET

When VITE_API_BASE is unset, the frontend uses relative /api/v1 paths via Vite proxy.

Application settings saved from the UI persist at:

  • <STORAGE_ROOT>/settings.json (inside the storage volume)

Provider API keys are persisted encrypted at rest (api_key_encrypted) and are no longer written as plaintext values.

Settings endpoints:

  • GET/PUT /api/v1/settings
  • POST /api/v1/settings/reset
  • POST /api/v1/settings/handwriting
  • POST /api/v1/processing/logs/trim

Note: the compose file currently includes host-specific URL values (for example PUBLIC_BASE_URL and VITE_API_BASE). Adjust these for your environment when needed.

Data Persistence

Docker named volumes used by the stack:

  • db-data
  • redis-data
  • dcm-storage
  • typesense-data

Validation Checklist

After setup or config changes, verify:

  • GET /api/v1/health returns {"status":"ok"}
  • Upload and processing complete successfully
  • Search returns expected results
  • Preview and download work for uploaded documents
  • docker compose logs -f api worker has no failures

Repository Layout

  • backend/ - FastAPI API, services, models, worker
  • frontend/ - React application
  • doc/ - technical documentation for architecture, API, data model, and operations
  • docker-compose.yml - local runtime topology

Documentation Index

  • doc/README.md - technical documentation entrypoint
  • doc/architecture-overview.md - service and runtime architecture
  • doc/api-contract.md - endpoint and payload contract
  • doc/data-model-reference.md - persistence model reference
  • doc/operations-and-configuration.md - runtime operations and configuration
  • doc/frontend-design-foundation.md - frontend design rules
Description
Document command deck for OCR, routing intelligence, and controlled metadata ops.
Readme 979 KiB
Languages
Python 67.2%
TypeScript 27.8%
CSS 4.7%
Dockerfile 0.3%