Если вам интересна тема персональных систем управления знаниями и задачами — переходите в мой тг-канал. Там я разбираю инструменты, публикую кейсы и делюсь тем, что работает на практике, а не только выглядит красиво на скриншотах.
Список «хочу прочитать» давно перевалил за сотню. Когда наконец добираешься до книги — появляется другая проблема: хочется зафиксировать цитату или мысль, но непонятно куда. Заметки в телефоне, вкладка в браузере, стикер на полях — через месяц это всё теряется. Обычный подход «одна заметка на книгу» не работал: либо файл разрастался до неприличия, либо я просто забывал его открывать. Тогда я перестал искать «правильный» плагин и спроектировал систему с нуля в Obsidian. В этой статье я покажу архитектуру, реальные шаблоны и конфигурацию баз данных — так, чтобы это можно было повторить.
Архитектура: три уровня, не один файл
Главная ошибка большинства читательских систем — складывать всё в одну заметку. Пересказ сюжета, цитаты, собственные мысли, ссылки на другие книги — всё это разная информация с разным сроком годности и разной частотой обращения.
В моей системе три типа объектов:
Книга — карточка с метаданными (автор, статус, жанр, темы, обложка). Без текста.
Цитата — отдельная заметка с дословным фрагментом, привязанная к книге.
Мысль — отдельная заметка с моим личным соображением, возникшим при чтении.
Цитата и мысль — не разделы внутри книги, а самостоятельные заметки. Это принципиально: они живут в своих папках, попадают в свои базы данных и могут ссылаться на другие заметки в vault независимо от источника.

Заметка о книге: YAML + живая карточка
Каждая книга создаётся через шаблон Templater. Шаблон задаёт вопросы интерактивно: автор, статус, жанр, темы, страна происхождения, URL обложки.
<%* const title = tp.file.title; const author = await tp.system.prompt("Автор") || ""; const statusOptions = ["Буду читать", "Читаю", "Прочитано"]; const status = await tp.system.suggester(statusOptions, statusOptions) || ""; const cover = await tp.system.prompt("URL обложки (Enter если нет)", "") || ""; const genreOptions = ["Fiction", "Non-Fiction"]; const genre = await tp.system.suggester(genreOptions, genreOptions) || ""; const direction = await tp.system.prompt("Темы (Enter если нет)", "") || ""; const countryOptions = ["Иностранное", "Отечественное"]; const country = await tp.system.suggester(countryOptions, countryOptions) || ""; -%>
На выходе — frontmatter со всеми полями и callout-карточка с inline-полями Meta Bind:
--- author: Клаус Шваб tags: - литература status: Прочитано cover: https://... Жанр: Non-Fiction Темы: технологии, общество Страна: Иностранное --- > [!book]+ 📖 Четвёртая промышленная революция >  > > | | | > |---|---| > | **Автор** | `INPUT[text:author]` | > | **Жанр** | `INPUT[inlineSelect(option(Fiction),option(Non-Fiction)):Жанр]` | > | **Темы** | `INPUT[inlineList:Темы]` | > | **Страна** | `INPUT[inlineSelect(option(Иностранное),option(Отечественное)):Страна]` | > | **Статус** | `INPUT[inlineSelect(option(Буду читать),option(Читаю),option(Прочитано)):status]` |
INPUT[] — это синтаксис Meta Bind. Поля в таблице кликабельны прямо в режиме чтения: можно поменять статус с «Читаю» на «Прочитано» не открывая frontmatter. Это мелочь, но она убирает "трение".

Templater: цитаты создаются в два клика
Вот где начинается автоматизация. Когда я хочу сохранить цитату, я создаю новую заметку в папке Цитаты/ — Templater подхватывает шаблон автоматически.
Шаблон делает четыре вещи:
Показывает список всех книг из папки
литература/(кроме самих баз данных — файлы, начинающиеся с00, отфильтрованы).Вытаскивает автора из frontmatter выбранной книги — вводить вручную не нужно.
Просит ввести название цитаты (первые слова или тема) и переименовывает файл.
Открывает книгу и добавляет обратную ссылку в раздел
# Цитаты.
<%* const litFolder = 'ЖИЗНЬ/литература/'; const books = app.vault.getMarkdownFiles() .filter(f => f.path.startsWith(litFolder) && !f.path.includes('/Цитаты') && !f.name.startsWith('00')) .map(f => f.basename) .sort((a, b) => a.localeCompare(b, 'ru')); const book = await tp.system.suggester(books, books, false, 'Из какой книги?'); if (!book) return; const bookFile = app.vault.getFileByPath(litFolder + book + '.md'); const bookMeta = app.metadataCache.getFileCache(bookFile); const author = bookMeta?.frontmatter?.author || ''; const title = await tp.system.prompt('Название / первые слова цитаты'); if (!title) return; await tp.file.rename(title); const bookContent = await app.vault.read(bookFile); let newBookContent; if (bookContent.includes('# Цитаты')) { newBookContent = bookContent.replace('# Цитаты\n', '# Цитаты\n- [[' + title + ']]\n'); } else { newBookContent = bookContent.trimEnd() + '\n\n# Цитаты\n- [[' + title + ']]\n'; } await app.vault.modify(bookFile, newBookContent); -%>
Шаблон для мыслей (Мысль.md) идентичен — только фильтрует ещё и папку /Мысли и пишет в раздел # Мысли книги.

Двусторонние связи без ручной работы
После выполнения шаблона происходит следующее. В заметке цитаты:
--- tags: - цитата book: "[[Четвёртая промышленная революция]]" author: Клаус Шваб --- Бенефициарами инноваций четвёртой промышленной революции в основном являются те, кто обеспечивает интеллектуальный и физический капитал...
В заметке книги автоматически появляется:
# Цитаты - [[Бенефициарами инноваций четвёртой промышленной революции]]
Связь двусторонняя: из книги видно все цитаты, из цитаты — источник через поле book. Никакого ручного труда — шаблон делает всё сам в момент создания.
[скриншот: заметка о книге с заполненными разделами Цитаты и Мысли — списки вики-ссылок]
Obsidian Bases: три базы, пять видов
Bases — встроенный плагин базы данных в Obsidian. Файлы .base лежат прямо в папке литература/ рядом с заметками.
00 Литература.base
Пять видов одной базы:
Карточки — визуальная галерея книг с обложками, автором и статусом. Сортировка по имени.

Представление — полная таблица, сгруппированная по жанрам. Колонки: название, жанр, статус, автор, страна, темы. Сортировка многоуровневая: статус → жанр → автор.
📚 Буду читать — таблица только с нечитанными книгами, по автору.
📖 Читаю — только текущее чтение.
✅ Прочитано — архив прочитанного.

00 Цитаты.base и 00 Мысли.base
Оба устроены одинаково: таблица с колонками «название», «книга», «автор». Сортировка по автору, потом по книге. Это позволяет быстро найти все цитаты конкретного автора — даже если они из разных его книг.

Что в итоге
Сейчас в системе 98 книг, больше 20 цитат и несколько десятков мыслей. Самое ценное — не количество, а то, что каждая сохранённая цитата немедленно связана с источником и попадает в базу. Я не трачу время на организацию после факта — шаблон делает всё в момент захвата.
Три вещи, которые сделали систему рабочей:
Разделение на типы заметок — книга, цитата и мысль не смешиваются в одном файле.
Templater с JS — автоматизация на уровне создания, а не сортировки.
Bases с несколькими видами — одни данные, разные способы смотреть.
Если узнали себя в этой проблеме — напишите в комментариях, как сейчас фиксируете цитаты и мысли по прочитанному. Расскажу, что можно докрутить под ваш контекст. Больше про системы в Obsidian — в моём тг-канале.
