Files
council/scripts/audiopen-webhook/audiopen-ingest.path.example
T
jpmschweitzerandClaude Opus 4.7 2c8df9425b add AudioPen ingest pipeline and sync architecture setup docs
Voice-note capture as the primary mobile input channel. AudioPen
polishes on their cloud, POSTs to a self-hosted receiver on the
desktop (exposed via Tailscale Funnel so no router ports open and
nothing behind Authentik). The receiver writes to inbox/raw/; a bash
normaliser wraps each drop in frontmatter and moves it to inbox/;
/triage-inbox routes them from there.

scripts/audiopen-ingest.sh — 80-line bash normaliser. Idempotent;
safe to re-run. Extracts title, slugifies, computes capture timestamp
from mtime, rewrites with fleeting-note frontmatter.

scripts/audiopen-webhook/main.py — stdlib-only Python HTTP server.
Zero pip deps; binds to 127.0.0.1 by default. Accepts flexible
payload shapes (title/name + body/output/summary/polished/
orig_transcript) so AudioPen version drift is logged rather than
silently dropped.

scripts/audiopen-webhook/*.example — systemd user-unit templates for
the receiver and the path/service pair that fires the ingest wrapper
on inbox/raw/ changes.

scripts/pyproject.toml + README.md — Python venv convention. Zero
deps today; venv location reserved at scripts/.venv/ (gitignored),
manifest at scripts/pyproject.toml, bootstrap documented for both
plain pip and uv. Optional-dependencies groups let individual tools
pull what they need without bloating the whole env.

docs/setup/audiopen.md — full setup guide: generating the shared
secret, installing the systemd units, pairing with Tailscale Funnel,
configuring AudioPen's webhook, and the IMAP-fallback path for
setups that can't run a public-reachable receiver.

docs/setup/sync.md — companion guide: Gitea SSH remote (works even
with Authentik gating HTTPS), obsidian-git plugin configuration,
Syncthing desktop↔phone pairing with the critical .stignore patterns,
and the three phone-role tiers so the user can pick Tier 1 / 2 / 3
at their own pace.

.gitignore gains **/.venv/, **/venv/, **/__pycache__/, and *.pyc so
nobody accidentally commits a materialised environment.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-19 20:17:48 +02:00

35 lines
1.0 KiB
Plaintext

# audiopen-ingest path + service units — example
#
# These two units let the ingest wrapper fire automatically whenever
# inbox/raw/ gains a file. Install:
#
# cp audiopen-ingest.path.example ~/.config/systemd/user/audiopen-ingest.path
# cp audiopen-ingest.service.example ~/.config/systemd/user/audiopen-ingest.service
# systemctl --user daemon-reload
# systemctl --user enable --now audiopen-ingest.path
#
# (Adjust %h paths or vault location as needed.)
# ---- audiopen-ingest.path ----
[Unit]
Description=Watch council/inbox/raw for new AudioPen drops
[Path]
PathChanged=/var/mnt/data/projects/council/inbox/raw
Unit=audiopen-ingest.service
[Install]
WantedBy=default.target
# ---- audiopen-ingest.service ----
# (Put this in a separate file — audiopen-ingest.service — systemd does not
# allow two units in one file.)
#
# [Unit]
# Description=Normalise AudioPen drops into council/inbox/
#
# [Service]
# Type=oneshot
# ExecStart=/var/mnt/data/projects/council/scripts/audiopen-ingest.sh
# Environment=COUNCIL_REPO=/var/mnt/data/projects/council