Skip to content

Content Pipeline

An idea hits you in the shower — you record a voice note on Telegram. An interesting article shows up in your feed — you forward the URL to the bot. You snap a photo of a whiteboard after a meeting. Each time, the Content Pipeline structures the content with Claude and stores it as an Obsidian note inside a GitHub vault — ready to be retrieved, expanded, or published.

CommandTypeInputOutput
/noteNoteFree textStructured note with wikilinks
/blogBlogFree textArticle with intro, body, conclusion
/researchResearchTopicIn-depth analysis with sources
(URL)URLWeb linkSummary + key points + citations
(voice)VoiceAudioCleaned, structured transcript
(photo)PhotoImageCorrected, structured OCR text

Content Pipeline · ~12 nodes

Save

Telegram · /note /blog /research, URL, voice, photo

Consolidate input · normalize text/URL/audio/photo

Claude Sonnet via cli-ollama · prompt per type

Generate Markdown + YAML frontmatter

Insert pending · n8n_pending_actions TTL 24h

Telegram preview · Save / Cancel

GitHub API · obsidian-vault


ProblemWithout pipelineWith pipeline
Lost ideasNote in some corner, never foundIndexed and versioned Obsidian vault
FormattingRaw text without structureClaude structures with frontmatter
Scattered contentNotes here, bookmarks thereOne vault, one workflow
Painful publishingCopy-paste between apps/blog → ready-to-publish article

Claude-generated content is not stored straight away. The user first gets a Telegram preview with the title, tags, target path and the first 500 characters. Two buttons let you confirm or cancel. It is a safety net against bad classification or malformed notes.


1. Reception — The Telegram Orchestrator detects a /note, /blog, /research command, a URL, a voice message or a photo and routes it to the Content Pipeline.

2. Consolidation — A Code node normalises the input: text is extracted, URLs are fetched (truncated to 8000 characters), voice messages arrive already transcribed, photos already OCR’d.

3. Claude generation — The LLM (Claude Sonnet via CLI Ollama, 120 s timeout) receives a content-type-specific prompt. Each prompt defines the expected structure, the YAML frontmatter, and the formatting conventions (wikilinks for notes, sections for blogs, sources for research).

4. Temporary storage — The generated Markdown lands in the n8n_pending_actions Data Table with a short identifier (8 hex chars) and a 24 h expiration.

5. Preview — The user gets a Telegram message with the content preview and two buttons:

📝 New note
Title: Docker Networking Guide
Tags: docker, networking, guide
Path: notes/tech/2026-02-19-docker-networking-guide.md
Docker networking in practice involves understanding
bridge networks, overlay networks, and host mode...
[... truncated]
[Save] [Cancel]

6. Save — Clicking [Save] tells the Orchestrator to create the file in the guigpap/obsidian-vault GitHub repo via the API and send a confirmation.

The storage path is decided by type and tags:

ConditionPath
Type = researchknowledge/
Type = blognotes/projects/
Tag contains “project”notes/projects/
Tag contains “reference”notes/reference/
Defaultnotes/tech/

The file is named {date}-{slug}.md (e.g. 2026-02-19-docker-networking-guide.md).

Every note is a Markdown file with YAML frontmatter:

---
title: "Docker Networking Guide"
tags: [docker, networking, guide]
date: 2026-02-19
source: "telegram"
status: "draft"
type: "note"
slug: "docker-networking-guide"
---

For blog articles, two extra fields are produced: description (meta description) and a structure with Introduction, Body, Conclusion.

For research items, the body includes: Overview, Key points, Technical details, Sources, Related topics.


LimitImpactMitigation
No deduplicationSending the same URL twice = two notesThe user can cancel
Imperfect OCRLow-quality photos → messy textClaude fixes obvious mistakes
No vault searchFinding a note = browsing filesTags + Obsidian search + Qdrant (planned)

If automatic publishing is needed:

If semantic search is needed:

  • Generate embeddings for every note
  • Store them in Qdrant for vector search
  • /search Telegram command to query the vault

If note volume grows:

  • Add sub-folders by month or project
  • Keep an automatic Obsidian index
  • Weekly digest of recent notes