OhnePapier v0.1 β€” Debian 13 GPU Stack

What This Is

OhnePapier ("Without Paper") is a fully local, privacy-first document management stack running on Docker Compose. It ingests scanned documents via Paperless-ngx (OCR + storage), routes them through an AI layer (paperless-ai β†’ local or cloud LLM) for automatic tagging and classification, and stores everything in PostgreSQL β€” zero cloud dependencies unless explicitly configured. Part of the Crumbforest ecosystem.

Core Value

Every document gets intelligently tagged and searchable, fully offline, on your own hardware β€” with cloud LLM as an opt-in escape hatch tracked by token cost.

Requirements

Validated

  • βœ“ Paperless-ngx OCR + document storage running β€” existing
  • βœ“ PostgreSQL 18 + Redis 8 backend running β€” existing
  • βœ“ Ollama local LLM connected (llama3.2 + llama2) β€” existing
  • βœ“ paperless-ai auto-tagging pipeline active (~467 documents processed) β€” existing

Active

  • [ ] Fresh Debian 13 install guide / setup script with GPU support
  • [ ] Ollama containerized inside Docker (not host-side) with GPU passthrough (nvidia-container-toolkit)
  • [ ] Gitea service added to the stack (self-hosted Git, co-located)
  • [ ] Anthropic API as configurable AI provider alternative to Ollama
  • [ ] OpenRouter as configurable AI provider alternative to Ollama
  • [ ] Token cost tracking for cloud LLM usage (#token)

Out of Scope

  • OZMBridge / FPGA integration β€” future milestone, tagged #ozm
  • Nullfeld-Integration (FPGA Γ— SoC star maps) β€” #ozm dependent
  • Vector-Bridge to Eule/Qdrant cross-system RAG β€” #ozm dependent
  • Custom Fields β€” deferred until v0.1 stable

Context

  • Current host: macOS, Ollama running on host via ollama serve, accessed by containers via host.docker.internal:11434
  • Target: Debian 13 server with NVIDIA GPU; Ollama moves into a container with nvidia-container-toolkit GPU passthrough
  • paperless-ai currently supports Ollama and OpenAI-compatible APIs β€” Anthropic and OpenRouter require either native support or a proxy adapter
  • Token tracking (#token): cloud LLM calls must log model, tokens in/out, and estimated cost per document processed
  • OZMBridge lives at /Users/bmt/Documents/OZMBridge β€” FPGA/OZM layer, integration is a separate future milestone

Constraints

  • Philosophy: Local-first, no surveillance, no cloud by default β€” CKL.md / HHL.md ethical licenses apply
  • GPU: NVIDIA assumed (nvidia-container-toolkit path); AMD/ROCm is not in scope for v0.1
  • Gitea: Must be accessible within the Docker network and optionally exposed externally
  • AI providers: Switching between Ollama / Anthropic / OpenRouter must be a config-level change, not a code change

Key Decisions

Decision Rationale Outcome
Containerize Ollama GPU passthrough in Docker is now stable on Linux; removes host dependency β€” Pending
Add Gitea to stack Self-hosted Git co-located with document store; Crumbforest-native β€” Pending
Cloud LLM as opt-in Privacy-first default; cloud only when explicitly configured + token-budgeted β€” Pending

Evolution

This document evolves at phase transitions and milestone boundaries.

After each phase transition (via /gsd-transition):
1. Requirements invalidated? β†’ Move to Out of Scope with reason
2. Requirements validated? β†’ Move to Validated with phase reference
3. New requirements emerged? β†’ Add to Active
4. Decisions to log? β†’ Add to Key Decisions
5. "What This Is" still accurate? β†’ Update if drifted

After each milestone (via /gsd-complete-milestone):
1. Full review of all sections
2. Core Value check β€” still the right priority?
3. Audit Out of Scope β€” reasons still valid?
4. Update Context with current state


Last updated: 2026-04-17 after initialization