--- type: reading title: "AudioPen integration paths — self-hosted research" author: "various" source: "web (conversation notes during PKB planning, 2026-04-19)" status: done started: 2026-04-19 finished: 2026-04-19 tags: [audiopen, self-hosting, pkb, tailscale] --- # AudioPen integration paths — self-hosted research ## Summary AudioPen ships several output integrations: email, webhooks, direct-to-Obsidian (which routes through Obsidian's sync cloud), clipboard, and a few third-party automation platforms. The "direct to Obsidian" path is the one an earlier investigation surfaced, and it implicitly sends content through Obsidian Sync. For a self-hosted setup, that path is the wrong choice. The cleaner architecture routes AudioPen's polished prose into user-controlled infrastructure via either a webhook (to a self-hosted receiver exposed via Tailscale Funnel) or email with IMAP pull on the desktop. Both fully avoid Obsidian's sync cloud. The distinction worth holding: AudioPen's *processing* cloud (audio → polished prose) is unavoidable with AudioPen. The *storage/sync* cloud (Obsidian's paid service) is optional. This document is about the second. ## Highlights - **Tailscale Funnel is the right tool for the webhook path.** Outbound-initiated; `*.ts.net` endpoint; no router ports opened; bypasses Authentik (which is gating Gitea's HTTPS in this setup). - **Email+IMAP is the no-open-ports fallback.** Works if running a public-reachable receiver isn't feasible. Fully outbound. - **Raw → normalised is a two-step pipeline.** AudioPen produces bare prose; a small bash wrapper wraps it in frontmatter and moves it from `inbox/raw/` to `inbox/`. Keeps the receiver stupid; all schema decisions live in one shell script. ## My notes - AudioPen's payload shape varies slightly across versions. The receiver accepts multiple possible body keys (`body`, `output`, `summary`, `polished`) to avoid fragility; the raw payload is logged to stderr so you can inspect drift. - If AudioPen's pricing or terms ever change, the documented escape hatch is whisper.cpp + a local polishing LLM + a phone-side Tasker/Shortcut. Out of scope for v1 but noted. ## Connections - [[projects/mql/brief|mql CLI]] — separate but related self-hosted tooling push - [[notes/pkb-as-lens-substrate|PKB as substrate]] — the overall architecture frame - [[daily/2026-04-19|today's daily note]] — where the decision to go webhook-via-Funnel was made