---
title: "Paper-First, Server-Backed: My North Star Productivity System (Roadmap)"
date: 2025-08-17
tags: ["stationery","paper","zettelkasten","self-hosting","linux","automation","ai","hugo","nextcloud"]
series: ["Analog & Slipbox"]
summary: "A practical, paper-first system that hands off to my server for capture, search, and publishing."
draft: false
---

## The promise (in one sentence)
**Think on paper; let the server do the grunt work.** Everything starts with pen and card. The server handles capture, OCR, search, and publishing—quietly, reliably, and without fuss.

## Who this is for
People who like nice paper and tidy systems, and also run a homelab or at least don’t mind one small Linux box humming along in the background.

## What you need
- **Stationery kit:** A6 (or Plotter Bible) cards/pages, a date-ID stamp (e.g., `20250816-01`), and a decent pen.
- **Phone with a scanner app** (the stock iOS “Scan Document” works).
- **Sync target:** Nextcloud (or Syncthing) with a folder called `INBOX`.
- **Server bits (Ubuntu/Debian):**
  - OCR & tools: `tesseract-ocr`, `ocrmypdf`, `pdftotext`, `zbar-tools`, `img2pdf`
  - Python + packages: `python3-pip`, then `pip install watchdog pypdf python-frontmatter`
- **A notes vault** (e.g., `~/Nextcloud/notes/zettels`).
- **Static site generator:** Hugo.
- **Optional AI** for summaries/tags (light touch—assistant, not author).

## The flow (bird’s-eye view)
**Paper → Scan → `INBOX/` → OCR + ID → Markdown & PDF → Vault → Draft → Publish**

- Every card/page gets an **ID** and a **short title**.
- You scan to `INBOX/`.
- A tiny server watcher:
  - OCRs the scan,
  - grabs the ID (from text or QR),
  - creates `ID-title.md` with front matter + extracted text,
  - parks the pair (`.md` + `.pdf`) in your vault.
- Promotable notes become blog posts. The rest stay as durable, searchable notes.

## Set it up (step-by-step)

### 1) Standardize IDs on paper
- Stamp the top-right of every card with `YYYYMMDD-##` (e.g., `20250816-01`).
- Under it: **Title**, then a single line: **Tags** and **Next Action**.
- Optional: print a tiny QR with the ID (helps linking later; not required).

### 2) Create the capture lane
- In Nextcloud, make `/Nextcloud/INBOX/` and `/Nextcloud/notes/zettels/`.
- On your phone, a Shortcut that:
  - Scans → saves PDF to `INBOX/`
  - Names it something dumb like `scan.pdf` (the server will rename).

### 3) Install the server tools
```bash
sudo apt update
sudo apt install -y tesseract-ocr ocrmypdf poppler-utils zbar-tools img2pdf python3-pip
pip3 install watchdog pypdf frontmatter
```

### 4) Wire the watcher (high level)
- The watcher does four things:
  1) **Normalize & OCR** any image/PDF dropped in `INBOX/`.
  2) **Detect the ID** (regex on text; optional QR fallback).
  3) **Rename** to `ID-title.pdf` and create a matching `ID-title.md` with:
     ```yaml
     ---
     id: 20250816-01
     title: "Short, human title"
     tags: []
     created: 2025-08-16
     ---
     ```
  4) **Move** both into `notes/zettels/`.

> You can run the watcher as a `systemd` service so it survives reboots:

```
# /etc/systemd/system/paper-watcher.service
[Unit]
Description=Paper ingest watcher
After=network.target

[Service]
Type=simple
User=rock
ExecStart=/usr/bin/python3 /home/rock/bin/paper_ingest.py
Restart=on-failure

[Install]
WantedBy=multi-user.target
```

Then:
```bash
sudo systemctl daemon-reload
sudo systemctl enable --now paper-watcher
```

*(I’ll publish my `paper_ingest.py` skeleton in a separate post; the roadmap here is the “what” and “why”—keep reading.)*

### 5) Keep AI on a leash (optional but handy)
- Start manual: paste the OCR’d text into your assistant and ask for **3 bullets + 5 tags**. Paste those into the note’s front matter.
- Later, add an API call in the watcher to auto-suggest tags/summary. You still review.

### 6) Publishing with Hugo (light touch)
- Add a `series` taxonomy so you can group posts like “Analog & Slipbox” or “Self-Hosting & Linux”.
- Promote a note to a post by:
  - Copying its `.md` into `content/posts/`,
  - Keeping the `id` in front matter,
  - Adding a link back to the card’s PDF for provenance.

## Operating rhythm (the part that actually makes this work)

**Daily (AM, 5–8 min):**
- Stamp 2–3 cards. One gets a title and a single next action.

**Daily (PM, 10–15 min):**
- Scan the day’s cards to `INBOX/`. Let the server sweep them into place.
- Skim the new Markdown; fix the title if the OCR guessed poorly.

**Weekly (30 min):**
- Pick one note and promote it to a draft post (600–900 words).
- Cross-link two related notes. Don’t overthink it—just link.

**Monthly (30–45 min):**
- Trim dead tags. Backup vault. Review the watcher logs for errors.

## Guardrails & gotchas (learned the hard way)
- **Don’t chase feature creep.** If the pipeline breaks, you won’t scan. Keep it boring.
- **Prefer PDFs over JPGs.** OCR is cleaner; search is better.
- **Title discipline beats tagging sprawl.** Short titles with real nouns.
- **AI is seasoning, not the stew.** Use it to suggest, not decide.

## FAQ (the questions people ask)
**Does this replace notebooks?**  
No. It respects them. Paper stays the thinking surface; the server just stops your ideas from vanishing in a drawer.

**What if I’m offline?**  
Write as usual. Scan later. Nothing in this depends on constant connectivity.

**Is this private?**  
Yes—if you keep Nextcloud self-hosted and don’t spray your vault across third-party services. Encrypt backups.

**Why not just type everything?**  
Because writing by hand helps you think straighter. This lets you keep that advantage without paying a search penalty later.

## What I’ll publish next (so you can copy it)
1) **Printable A6 + Plotter Bible templates** (ID/Title/Tags/Next boxes).
2) **The watcher script** (`paper_ingest.py`) with install notes.
3) **A Shortcuts/iOS scan-to-INBOX recipe**.
4) **A TRAMP/Emacs guide** for editing your vault and site remotely.

---

### About the name “North Star”
“North Star” is a common phrase for a guiding principle or metric. I’m using it here as **my label** for this specific setup—**paper-first, server-backed**—not claiming an existing trademarked methodology. In short: the phrase exists everywhere; **this system and framing are mine**.
