Obsidian Publisher & Sync
1. What? — Definition and context
Section titled “1. What? — Definition and context”The Content Pipeline captures ideas inside an Obsidian vault. Then what? Two workflows complete the chain: one publishes blog notes to the Astro Starlight site, the other syncs the vault with Odoo Knowledge for multi-channel access.
Two complementary workflows
Section titled “Two complementary workflows”| Workflow | Nodes | Trigger | Role |
|---|---|---|---|
| Obsidian Blog Publisher | ~12 | Telegram callback | Obsidian note → Astro blog PR |
| Obsidian-Odoo Sync | ~40 | GitHub webhook + Odoo + schedule | Two-way sync vault ↔ Odoo Knowledge |
Architecture
Section titled “Architecture”2. Why? — Stakes and motivations
Section titled “2. Why? — Stakes and motivations”Problems solved
Section titled “Problems solved”| Problem | Without these workflows | With these workflows |
|---|---|---|
| Manual publication | Copy-paste, format conversion | One Telegram button |
| Knowledge silos | Notes in Obsidian, articles in Odoo | Two-way sync |
| Fragmented search | Search in 3 different places | Unified search through Qdrant |
3. How? — Technical implementation
Section titled “3. How? — Technical implementation”Blog Publisher
Section titled “Blog Publisher”When a note in the vault has the frontmatter type: blog and status: ready, the user can trigger publication from Telegram via a content_publish_{shortId} callback.
The workflow:
- Parses the Obsidian YAML frontmatter (title, tags, description)
- Routes to the right folder based on the tags:
| Tags | Blog folder |
|---|---|
| workflow, automation | workflows/ |
| infrastructure, docker, stack | infrastructure/ |
| reference, glossary | reference/ |
| (default) | workflows/ |
-
Converts Obsidian syntax to Starlight MDX:
- Wikilinks
[[page|label]]→ Markdown links[label](/docs/en/path/) - Callouts
> [!note]→<Aside type="note">components
- Wikilinks
-
Creates a Git branch, commits the MDX file, and opens a Pull Request with an auto-generated title
-
Notifies on Telegram with the PR link
Obsidian-Odoo Sync
Section titled “Obsidian-Odoo Sync”The two-way sync runs in three phases:
Phase 1 — GitHub → Odoo (push webhook)
When a file is changed in the vault (notes/* or knowledge/*), the GitHub webhook triggers the sync:
- YAML frontmatter parsing
- Mapping Obsidian tags to Odoo Knowledge categories
- Upsert of the article into
knowledge.article - Embedding generation (OpenAI
text-embedding-3-small) - Vector upsert into Qdrant
Phase 2 — Odoo → GitHub (hourly schedule)
Odoo articles changed (apart from those with source “obsidian”) are converted into Markdown with YAML frontmatter and committed to the vault. The conflict strategy is “latest wins”, and deletions trigger archiving (no destruction).
Phase 3 — Unified search (Telegram command)
The /search Telegram command queries Qdrant with an embedding of the request and returns the 5 most relevant results, grouped by source (Obsidian, Odoo, YouTube).
4. What if? — Outlook and limits
Section titled “4. What if? — Outlook and limits”Current limits
Section titled “Current limits”| Limit | Impact | Mitigation |
|---|---|---|
| No automatic translation | Blog in French only | translate: true flag prepared (v1 deferred) |
| Sync conflict | Simultaneous Obsidian + Odoo edits | ”Latest wins” |
| In-memory Qdrant | Vector loss on restart | Re-sync from sources |
Evolution scenarios
Section titled “Evolution scenarios”If multilingual blog:
- Enable automatic translation through Claude
- Generate MDX files in
en/alongsidefr/
If the knowledge base grows:
- Add full-text search alongside the vector one
- Dedicated web UI to browse the vault
- Automatic suggestions of related notes (AI wikilinks)
Related pages
Section titled “Related pages”Workflows
Section titled “Workflows”- Content Pipeline — Initial content capture
- YouTube Digest — Another indexed content source
Infrastructure
Section titled “Infrastructure”- AI Stack — Qdrant for vector search
- Odoo 18 on Docker — Knowledge module