All screenshots are mock UIs drawn from fake data. Work projects are described without client or employer names.
personal · agent and automation design · 2026-08 to 2026-09
Capture pipeline: Telegram, Whisper and a vision model writing into an Obsidian vault
A self-hosted n8n agent pipeline. A Telegram bot captures text, voice and photos; Whisper transcribes; a vision model files receipts. LLM passes write daily and topic notes, and a verified pull lands them in an Obsidian vault that the AI tools read through MCP.
The goal was low-friction capture that loses nothing, handed to a later AI learning pass that acts as a thinking partner rather than a completeness logger.
Constraints
One capture surface (Telegram) and one authorised user.
Self-hosted on a VPS, with free-tier LLMs via OpenRouter.
n8n code nodes are sandboxed ($helpers unavailable), so file payloads are hand-rolled.
An empty day skips downstream nodes, and a skipped node looks exactly like one that is still running.
Vault files arrive raw and are never edited by ingest.
What I built
fig 1. Capture to vault. A Next.js review app (not shown) corrects captures and receipts.
Telegram -> n8n "Capture Bot" auth guard, 13-command router
voice -> Whisper container -> transcript
photo -> vision model -> structured receipt | image note
-> Postgres captures (04:00 Europe/Riga day rollover), state,
expenses, expense_items, calendar
21:00 evening one LLM call -> report + <=3 questions
00:30 notes/save LLM -> daily + topic markdown on the VPS inbox, validate/retry
07:30 morning no LLM: weather, agenda, restock candidates from receipt history
any error-trigger workflow -> alert
hourly PowerShell pull: stage -> pack -> transfer -> verify each file by MD5 -> archive -> vault
Designed the whole agent pipeline, the schema and the prompts.
Fixed day-boundary correctness: the 04:00 rollover, and the day is taken from the returned rows rather than now().
Built failure visibility: error alerts, a system-state block in the morning brief, and a validate/retry path on note generation.
Wrote the vault-side contract so AI tools can navigate the notes.
Outcome
date
result
2026-08-28
Error-alert workflow and review app in place
2026-08-30
Redesign made the evening run report-first and turned the day into a parameter
2026-09-02
Calendar integration (/cal, a nightly plan proposing <=5 blocks). Pull rewritten into a staged, MD5-verified transfer: 2,163 -> 12,501 bytes
2026-09-12
v1.0.0: hourly scheduled pull, a backlog sweep of up to 5 days per run, and the /save triple-generation bug fixed. 7 stranded notes recovered, 9 duplicates removed
since 2026-09-03
Capture paused by choice. The pipeline itself is not failing
Transcribed. Saved to today (04:00 rollover). Topic: side-project
[photo: receipt]
Receipt filed: 6 items, total , store
21:00 evening report 3 captures, 1 receipt, 0 calendar gaps. Q1. You said the parser was "done". Which case is still untested? Q2. What would make tomorrow's first block obvious? Q3. Is the restock item urgent or habit?
vault/inbox after pull
daily/2026-09-01.md md5 ok
topics/side-project.md md5 ok
receipts/2026-09-01.md md5 okarchived 3 / 3, 0 retries
fig 2. Mock chat with placeholder content. Chat IDs, store names and amounts are redacted. A 60-second screen video following one voice note to a vault note is planned.