Паттерн для использования Obsidian vault как системы управления контентом для веб-сайтов. Контент пишется в markdown, YAML frontmatter управляет поведением (slug, тип вывода, доступ), sync-скрипт трансформирует в web-ready форматы. Vault — единственный источник правды.
Контекст: одна сессия из code project. Агент читает vault по абсолютному пути, пишет код в проекте. Vault-работа минимальна (создать папки, добавить YAML в файлы) — агент делает это через файловый доступ.
Obsidian — редактор. YAML frontmatter — конфигурация. Sync-скрипт — движок. Сайт — вывод.
Человек:
AI:
Obsidian Vault (source of truth)
│
├── Папка A/ .md файлы с YAML frontmatter
├── Папка B/ .md файлы с YAML frontmatter
├── Папка C/ .md файлы с YAML frontmatter
│
└──── Sync-скрипт ─────┐
│ │
▼ ▼
HTML/JSON файлы manifest.json
(в папке сайта) (индекс контента)
│
▼
Deploy
Ключевое: vault и проект сайта — разные директории. Sync-скрипт читает из vault, пишет в проект. Vault не знает о сайте. Сайт не знает об Obsidian.
Контент живёт только в vault. Никаких копий в docs/, content/, или в коде. Sync-скрипт всегда читает из vault напрямую. Чтобы обновить текст на сайте — редактируешь .md в Obsidian, запускаешь sync.
Каждый .md файл содержит YAML frontmatter, который определяет, как этот файл обрабатывается sync-скриптом:
---
slug: getting-started # URL-путь на сайте
type: page # тип вывода (page, fragment, data)
access: public # доступ (public, authorized, cohort-code)
title: Начало работы # заголовок (если отличается от # в теле)
description: Быстрый старт # описание для манифеста и SEO
order: 1 # порядок в навигации
---
YAML — это контракт между автором контента и sync-скриптом. Автор не трогает код — он управляет поведением через метаданные.
Каждая папка-источник имеет свои defaults (тип вывода, доступ). YAML frontmatter в конкретном файле может переопределить любой default. Это convention over configuration: положил файл в Blog/ — он станет публичной страницей без дополнительных настроек. Но можешь добавить access: authorized если нужно.
Standalone page (type: page) — полная HTML-страница. Работает без SPA, индексируется поисковиками. Для публичного контента, лендингов, блога.
Fragment (type: fragment) — JSON с { title, html }. SPA-компонент загружает и рендерит внутри layout. Для контента, встроенного в приложение (курсы, документация с навигацией).
Structured data (type: data) — markdown-таблицы парсятся в JSON-массивы. Для списков, каталогов, расписаний — любых данных, которые удобно вести как таблицу в Obsidian.
Sync запускается локально — ему нужен доступ к vault. Build запускается где угодно (CI, Docker) — ему vault не нужен, он работает с уже готовыми файлами. Sync кладёт результат в папку проекта, build собирает из неё.
Sync-скрипт создаёт manifest.json со списком всего контента: slug, title, description, type, access, order. Компоненты сайта используют манифест для навигации, списков, "следующий/предыдущий". Новый файл в vault = новый пункт автоматически.
1. Редактируешь .md в Obsidian
2. Запускаешь sync (команда, skill, или автоматика)
3. Деплоишь
1. Создаёшь .md файл в нужной папке vault
2. Добавляешь YAML frontmatter (минимум: slug)
3. Запускаешь sync → файл подхватывается автоматически
1. Создаёшь папку в vault
2. Определяешь defaults для этой папки в конфиге sync-скрипта
3. При необходимости — новый UI-компонент на сайте
Входные данные:
Что делает:
Конвертирует .md → HTML с учётом Obsidian-специфики:
-- → — (тире)> [!note])Может быть любая библиотека: marked, remark, markdown-it, pandoc.
Собирает метаданные всех обработанных файлов в один JSON:
[
{
"slug": "getting-started",
"title": "Начало работы",
"description": "Быстрый старт",
"type": "page",
"access": "public",
"order": 1
}
]
Компоненты сайта используют манифест для построения навигации, списков контента, "следующий/предыдущий".
Markdown-таблицы → JSON-массивы объектов. Заголовки таблицы = ключи. Каждая строка = объект. Полезно для: списков видео, расписаний, каталогов, FAQ.
Перед сборкой агент задаёт пользователю эти вопросы.
Sync-скрипт должен работать на машине, где доступен vault. CI/CD обычно не имеет доступа к vault. Решение: sync локально, commit результатов, build в CI. Или: sync как pre-deploy шаг.
Имена файлов в Obsidian могут содержать пробелы, кириллицу, спецсимволы. Slug в URL — нет. Всегда используй slug в YAML frontmatter. Не полагайся на имя файла как slug.
Obsidian [[wikilinks]] не имеют смысла на сайте. Варианты: заменять на HTML-ссылки (если целевой файл тоже на сайте), убирать (оставлять только текст), или оставлять как есть (если контент внутри SPA и wikilinks не видны).
Стандартные markdown-библиотеки не знают про callout-блоки, embed-синтаксис (![[file]]), и другие Obsidian-расширения. Нужен этап препроцессинга, который конвертирует Obsidian-специфику до передачи в markdown-процессор.
Маркетинговые страницы (программа курса, цены, CTA) часто смешивают текст с визуальными компонентами. Автоматический sync здесь не работает. Варианты: vault-файл как source of truth для копирайтинга (перенос в код вручную), или разделение на текстовую и UI-части.
Если sync не запускался, а файлы менялись — манифест не актуален. Решение: запускать sync перед каждым деплоем, или добавить проверку "есть ли неsynced файлы".
Паттерн работает для:
Blog/ → standalone HTML-страницыDocs/ → fragments внутри SPA с навигациейCourse/ → fragments с контролем доступаLanding/ → standalone HTMLChangelog/ → structured data или страницыVideos/ → structured data (таблицы → JSON)FAQ/ → structured dataEmails/ → source of truth для копирайтинга (ручной sync)Для каждого нового типа: папка в vault + defaults в конфиге sync + (опционально) UI-компонент.
Obsidian + любой веб-фреймворк + sync-скрипт на любом языке.
| Компонент | Реализация |
|---|---|
| Vault | Obsidian vault с папками по типам контента |
| YAML frontmatter | slug, type, access, title, description, order |
| Sync-скрипт | Скрипт на любом языке: читает vault, парсит YAML, конвертирует markdown, генерирует manifest |
| Markdown-процессор | marked, remark, markdown-it, pandoc — любая библиотека с расширениями |
| Манифест | manifest.json — массив объектов с метаданными всех страниц |
| Сайт | Любой фреймворк (React, Astro, Next.js, Hugo) или plain HTML |
| Деплой | Ручной, CI/CD, или по команде агента |
Типичный результат: из 10-30 .md файлов в vault получается полноценный сайт с навигацией, SEO, и обновлением контента без перезапуска фреймворка.
После сборки у пользователя должны быть:
| Артефакт | Описание | Как проверить |
|---|---|---|
| Папки контента в vault | Организованы по типам | Существуют, файлы с YAML frontmatter |
| Sync-скрипт | Читает vault, генерирует output | Запуск обрабатывает все файлы без ошибок |
| manifest.json | Индекс всего контента | Содержит записи для каждого .md файла |
| Output-файлы | HTML/JSON в папке проекта | Файлы существуют, контент корректный |
| Команда деплоя | Способ опубликовать на сайт | Деплой работает, контент на сайте |
| Skill или команда | Способ запуска sync одной командой | "Обнови сайт" → sync + deploy |
Курс AI Obsidian — 3 недели, 9 встреч, максимум 32 человека
Записаться →