Harbor

Harbor documentation

Harbor is a self-hosted document vault for a household. These pages take you from a blank Linux box to a vault your family uses every day, and back from a dead disk.

On this page

Harbor runs as a small stack of containers on one Linux machine, with everything it stores on one encrypted volume. Your household reaches it over a Tailscale tailnet, your own network, or a VPN you already run; Tailscale is the easiest path, not a requirement. Paperwork gets in by upload or by email. Harbor reads it, makes every word searchable, proposes where it belongs and who it is about, and keeps the deadlines it contains on a short list. Nightly encrypted backups go wherever you point them, and once a month Harbor proves it can restore one.

Start here#

  1. Prerequisites: the box, the disk, and the accounts you need. Five minutes.
  2. Install: one script, three questions, about ten minutes plus pulling images.
  3. First run: create the first owner and prove the vault works.

Then, before you trust it with anything: Backups and The break-glass envelope.

What you are building#

Outside the house

  • Your laptop or phoneover your tailnet, your own network, or a VPN
  • Your mailboxIMAP, read only
  • The model you chosetext of each document
  • Your backup targetencrypted snapshots, nightly

The box

  • tailscaleoptional: serves the app on your tailnettalks to your laptop or phone
  • webthe appinternal only
  • apiHTTP API, sessions, migrationsinternal only
  • workerOCR and text extraction; the only process that opens a documentno route out
  • suggestertitles, categories, dates, summariestalks to the model you chose
  • mailfetchreads connected mailboxestalks to your mailbox
  • backupnightly dump and snapshot, monthly restore testtalks to your backup target
  • postgres · redisstate and queuesinternal only

/data one encrypted volume: documents, database, queues, secrets

Nothing on the box listens on the public internet. Each container that talks outside talks to one thing.

Two of those containers are worth knowing by name. The worker is the only process that ever opens a document, and it has no route to the internet at all. The suggester is the one that talks to a language model, and it sends text, never files. The language model says exactly what it sends, and What runs describes every container.

Where these pages come from#

They are written from the repository's own docs: deploy.md, restore.md, and the design spec. Where they disagree, the repository is right and this page is behind.