--- title: Content Pipeline url: https://blog.guigpap.com/en/workflows/content-pipeline/ url_md: https://blog.guigpap.com/en/workflows/content-pipeline.md category: automation date: '2026-03-28' maturite: production techno: - n8n - telegram - claude - github application: - automation - content - knowledge --- # Content Pipeline > Telegram-to-Obsidian pipeline that captures notes, blog drafts and AI research ## 1. What? — Definition and context 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. > **Note - Obsidian** > > **Obsidian** is a Markdown note editor that keeps everything as local files. By using a GitHub repository as the vault, notes are versioned, accessible everywhere, and synchronised across devices. ### Six content types supported | Command | Type | Input | Output | |---------|------|-------|--------| | `/note` | Note | Free text | Structured note with wikilinks | | `/blog` | Blog | Free text | Article with intro, body, conclusion | | `/research` | Research | Topic | In-depth analysis with sources | | (URL) | URL | Web link | Summary + key points + citations | | (voice) | Voice | Audio | Cleaned, structured transcript | | (photo) | Photo | Image | Corrected, structured OCR text | ### Architecture ```mermaid flowchart TD TG["Telegram · /note /blog /research, URL, voice, photo"] subgraph Pipeline["Content Pipeline · ~12 nodes"] direction TB Consolidate["Consolidate input · normalize text/URL/audio/photo"] Claude["Claude Sonnet via cli-ollama · prompt per type"] Gen["Generate Markdown + YAML frontmatter"] Pending["Insert pending · n8n_pending_actions TTL 24h"] end Preview["Telegram preview · Save / Cancel"] GH["GitHub API · obsidian-vault"] TG --> Consolidate --> Claude --> Gen --> Pending --> Preview Preview -->|Save| GH ``` --- ## 2. Why? — Stakes and motivations ### Problems solved | Problem | Without pipeline | With pipeline | |---------|------------------|---------------| | **Lost ideas** | Note in some corner, never found | Indexed and versioned Obsidian vault | | **Formatting** | Raw text without structure | Claude structures with frontmatter | | **Scattered content** | Notes here, bookmarks there | One vault, one workflow | | **Painful publishing** | Copy-paste between apps | `/blog` → ready-to-publish article | ### Why a review workflow? 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. > **Tip - Automatic expiration** > > Pending content expires after 24 hours. A cleanup workflow removes unconfirmed entries to avoid build-up. --- ## 3. How? — Technical implementation ### The journey of a piece of content **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: ```text 📝 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. ### Automatic classification The storage path is decided by type and tags: | Condition | Path | |-----------|------| | Type = research | `knowledge/` | | Type = blog | `notes/projects/` | | Tag contains "project" | `notes/projects/` | | Tag contains "reference" | `notes/reference/` | | Default | `notes/tech/` | The file is named `{date}-{slug}.md` (e.g. `2026-02-19-docker-networking-guide.md`). ### Output format Every note is a Markdown file with YAML frontmatter: ```yaml --- 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. --- ## 4. What if? — Outlook and limits ### Current limits | Limit | Impact | Mitigation | |-------|--------|------------| | **No deduplication** | Sending the same URL twice = two notes | The user can cancel | | **Imperfect OCR** | Low-quality photos → messy text | Claude fixes obvious mistakes | | **No vault search** | Finding a note = browsing files | Tags + Obsidian search + Qdrant (planned) | ### Evolution scenarios **If automatic publishing is needed**: - The [Obsidian Blog Publisher](/en/workflows/obsidian-publish/) workflow can take over - Blog notes flagged `status: ready` are publishing candidates **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 --- ## Related pages ### Workflows - [Telegram Orchestrator](/en/workflows/telegram-orchestrator/) — Routing of content commands - [Voice Transcription](/en/workflows/voice-transcription/) — Transcription of voice messages - [YouTube Digest](/en/workflows/youtube-digest/) — Similar pipeline for videos ### Infrastructure - [AI Stack](/en/infrastructure/ai-stack/) — CLI Ollama for Claude ## Metadonnees agent - Cet article est issu du blog GuiGPaP Lab. - Contexte global du blog: https://blog.guigpap.com/llms.txt - Contact auteur: https://odoo.guigpap.com/mon-cv - Licence: CC-BY-SA 4.0