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 viahost.docker.internal:11434 - Target: Debian 13 server with NVIDIA GPU; Ollama moves into a container with
nvidia-container-toolkitGPU 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