Structure

Overview

OhnePapier is a configuration-only project β€” no application source code exists. The repository contains Docker Compose orchestration files, documentation, and philosophical/licensing texts. All application logic lives inside Docker images.

Directory Layout

OhnePapier-v.0.0/
β”œβ”€β”€ docker-compose.yml          # Primary orchestration file β€” all services defined here
β”œβ”€β”€ docker-compose.env          # Secret environment variables (NOT in git β€” must be created manually)
β”œβ”€β”€ .env                        # Non-secret env vars (e.g. PAPERLESS_AI_PORT)
β”œβ”€β”€ .gitignore                  # Excludes docker-compose.env, consume/, export/
β”‚
β”œβ”€β”€ CLAUDE.md                   # AI assistant instructions + project context
β”œβ”€β”€ README.md                   # Project overview and usage guide
β”œβ”€β”€ LICENSE.md                  # Crumbforest combined license
β”œβ”€β”€ CKL.md                      # Crumbforest Knowledge License (non-military, non-surveillance)
β”œβ”€β”€ HHL.md                      # Human Heritage License (human-before-machine clause)
β”œβ”€β”€ NO_AHAB_GUIDE.md            # Anti-obsession guide (Crumbforest principles)
β”‚
β”œβ”€β”€ manifest_59_Ahab_und_der_Wal.md   # Crumbforest manifesto #59
β”œβ”€β”€ manifest_60_ahab_reflex.md        # Crumbforest manifesto #60
β”‚
β”œβ”€β”€ img/                        # Project images/assets
β”‚
β”œβ”€β”€ consume/                    # (git-ignored) Hot-folder: drop files here for Paperless ingestion
β”‚                               # Mounted to webserver:/usr/src/paperless/consume
β”œβ”€β”€ export/                     # (git-ignored) Export folder for Paperless document exports
β”‚                               # Mounted to webserver:/usr/src/paperless/export
β”‚
└── .planning/                  # GSD planning artifacts (this directory)
    └── codebase/               # Codebase map documents

Docker Volumes (managed by Docker, not in repo)

Volume Purpose Mounted To
data Paperless application data webserver:/usr/src/paperless/data
media Paperless document media/files webserver:/usr/src/paperless/media
pgdata PostgreSQL database files db:/var/lib/postgresql
redisdata Redis persistence broker:/data
paperless-ai_data paperless-ai config/state /app/data

Key File Locations

File Purpose Notes
docker-compose.yml Service definitions Primary file to edit for infra changes
docker-compose.env Secrets + Paperless config Not in git β€” must exist before up
.env Non-secret vars Currently only PAPERLESS_AI_PORT
CLAUDE.md AI context + runbook Always read first for operational commands

Naming Conventions

  • Service names in docker-compose.yml use lowercase with hyphens: broker, db, webserver, paperless-ai
  • Container name: paperless-ai has explicit container_name: paperless-ai; others default to compose-generated names (e.g. paperless-webserver-1)
  • Volume names: lowercase, no hyphens except paperless-ai_data (underscore)
  • Documentation files: UPPERCASE.md for licenses/guides, lowercase_with_underscores.md for manifests

Where to Add New Configuration

What you're adding Where it goes
New Docker service docker-compose.yml under services:
New secret/credential docker-compose.env (never commit)
New non-secret env var .env
New bind-mount directory Root of repo (created on host) + mount in docker-compose.yml
New documentation Root of repo as UPPERCASE.md
Planning/roadmap artifacts .planning/

Runtime Filesystem (host machine, outside repo)

Ollama runs on the host machine β€” not in Docker β€” to access GPU:
- Binary: wherever ollama is installed on the host
- Models: ~/.ollama/models/ (default)
- Accessible to containers via host.docker.internal:11434


Mapped: 2026-04-17