Docs
Documentation for the sepia home server.
Quick Reference
- Hostname: sepia
- Domain: veenboer.xyz / uitgeest.veenboer.xyz
- Primary Compose:
/opt/compose.yaml - Docker Project:
/opt/ - Docker Containers: ~11 running services
Structure
docs/
├── MEMORY.md # Curated long-term knowledge
├── RUNBOOK.md # Operational procedures
├── HEARTBEAT.md # Periodic check-in tasks
├── JOURNAL/ # Daily operational logs
├── REFERENCE/ # Quick reference
│ ├── services.md
│ ├── network.md
│ ├── storage.md
│ ├── caddy.md
│ └── postgres.md
├── APPLICATIONS/ # Per-app documentation
└── PLANS/ # Project plans with lifecycle
├── active/
├── completed/
└── backlog/
JOURNAL vs PLANS
Both track work, but at different levels of abstraction:
| JOURNAL | PLANS | |
|---|---|---|
| Time | Past — what happened on a given day | Future — what we intend to do |
| Grain | Mixed topics per day, stream of work | One focused goal per document |
| Lifecycle | Immutable chronological record | Active → Completed lifecycle |
| Purpose | "When did X change? Why did we decide Y?" | "What's the plan? What's left to do?" |
JOURNAL entries are the raw work log — what you did, what broke, what you decided, all in one place per day.
PLANS define structured projects with context and steps. They graduate through active/ → completed/ as work progresses.
They complement each other: working on a plan generates journal entries, and journal entries feed into plan updates. Templates cross-reference both directions.
Environment Variables
Many services rely on .env files and shell environment variables:
- HOST_IP - Host IP address (used in extra_hosts)
- DOMAIN - veenboer.xyz
- SUBDOMAIN - uitgeest
- Database credentials for various services
- API keys for external services
See individual compose files for service-specific variables.