--- 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**.