Quartz 4 в этом проекте
Quartz часто описывают как способ выложить Obsidian-vault в интернет. Это хорошая отправная точка, но для этого проекта такое описание уже слишком узкое. Здесь Quartz — основа сайта Smirnoff на домене slavx.ru: блог, проектные заметки, лендинги, контакты, юридические документы и отдельная витрина для книжной полки.
Главная ценность связки с Obsidian в том, что автор не обязан разрывать рабочий процесс на две части: отдельно писать заметки, отдельно собирать сайт. Материалы живут в content, их удобно редактировать как обычные Markdown-записи, связывать через wiki-links и раскладывать по разделам. Quartz берёт этот привычный формат и превращает его в публичный сайт, где читателю доступны навигация, поиск, превью, связанные материалы и аккуратно собранные страницы.
При этом сайт не ограничивается цифровым садом. Поверх заметок добавлен слой компонентов: лендинг главной, страница контактов, карточное меню, форма заявки, библиотека, кастомные OG-картинки и превью списков. Поэтому статья дальше не про абстрактный «экспорт заметок», а про практический способ вести живой сайт из той же базы знаний, где рождаются проектные материалы.
Что изменилось по сравнению с «чистым» Quartz
В старой версии этой заметки было утверждение, что Quartz работает на SvelteKit. Для текущего Quartz 4 в этом репозитории это неверный ориентир. Здесь стек ближе к статическому генератору на Node.js, TypeScript, Preact-компонентах и SCSS. На выходе получается статический сайт, который публикуется как набор файлов: текст остаётся в понятном формате, а сложность сборки прячется в конфигурации и компонентах.
Ключевые настройки лежат в quartz.config.ts:
pageTitle: "Smirnoff";baseUrl: "slavx.ru";enableSPA: true— переходы внутри сайта работают без полной перезагрузки страницы;enablePopovers: true— внутренние ссылки получают всплывающие превью;- аналитика подключена через Plausible;
- локаль сейчас
en-US, хотя основная часть контента написана по-русски; - шрифты: Inter для заголовков и текста, IBM Plex Mono для кода;
- включены RSS, sitemap, поиск, TOC, KaTeX, подсветка кода и Obsidian-flavored Markdown.
То есть Quartz здесь не просто «публикует заметки». Он собирает статический сайт с набором кастомных интерфейсов и помогает не потерять главное преимущество Obsidian: быстро писать, связывать и обновлять материалы без ощущения, что каждый текст нужно заново переносить в CMS.
Контент и сайт Smirnoff
Основной контент лежит в content. Для автора это важно практически: новые материалы можно добавлять как обычные заметки, а не как отдельные сущности в админке. Раздел content/Проекты используется для проектных материалов, в том числе для серии про Obsidian и Quartz. Отдельно есть content/library.md — страница библиотеки, а также юридические документы и служебные страницы сайта.
Главная страница и контакты устроены иначе, чем обычная заметка. В quartz.layout.ts для них есть специальные исключения:
indexполучает лендинговый набор блоков изquartz/static/data/home.json;Кoнтактысобираются изquartz/static/data/contacts.json;libraryрендерится через компонентLibraryPageи данныеbookshelf.json.
Это удобный компромисс: тексты и страницы остаются в Quartz, но сложные экраны можно собирать из JSON-данных и компонентов, не превращая Markdown в кашу из HTML. Читатель видит цельную страницу, а автор сохраняет нормальную структуру материалов.
Навигация: не стандартный Explorer
В левой колонке вместо обычного Explorer используется CardMenu. Это не декоративная замена, а попытка сделать навигацию ближе к реальному сайту: человеку проще выбрать раздел или служебную страницу, не разбираясь в полном дереве vault. Сейчас рядом с ним стоит Avatar, а на мобильных появляется компактная панель с поиском, переключателем темы и режимом чтения.
CardMenu строит меню по дереву файлов, умеет сворачивать папки, сохранять состояние в localStorage, показывает навигационные кнопки и поддерживает дополнительный drawerComponent. В текущих настройках есть кнопки:
- Контакты;
- RSS;
- Архив.
Это уже не черновой эксперимент с меню, а фактическая навигация сайта: она помогает читателю быстро понять, куда идти дальше, а не оставляет его один на один со списком файлов.
Карточки превью и списки
Для страниц папок и тегов включён режим usePreviewList. Его используют эмиттеры FolderPage и TagPage в quartz.config.ts. Вместо сухого списка ссылок сайт показывает карточки с заголовком, описанием, датой, тегами и картинкой из preview_image. Так обзор раздела становится похож на витрину материалов: можно быстро понять, о чём статья и стоит ли открывать её сейчас.
Картинка берётся из frontmatter статьи. Компонент PagePreviewList резолвит путь через resolveRelative, поэтому абсолютные пути вида /images/example.png и относительная навигация проходят через одну механику Quartz.
Custom OG images
В проекте включён CustomOgImages с шаблоном smirnoffSocialImage. Это нужно, чтобы страницы красиво выглядели при шаринге. Но у этой функции есть цена: генерация изображений может заметно замедлять build. В конфиге прямо оставлен комментарий, что emitter можно временно отключить, если нужно ускорить сборку.
Библиотека внутри Quartz
Отдельная часть сайта — библиотека. Это хороший пример того, что Quartz может быть не только оболочкой для заметок, но и частью более широкой системы. Он не хранит книги как источник истины. Он показывает витрину, а данные приходят из BOOK-LIBRARY:
content/library.mdзадаёт страницу;LibraryPageрендерит интерфейс;bookshelf.jsonхранит backend URL и путь к static catalog;bookshelfCatalog.tsна build-time может подготовить generated catalog и mirrored covers;- клиентский скрипт умеет использовать live API и fallback к статическому каталогу.
Важно: generated-файлы библиотеки не редактируются руками. Они побочный результат сборки и синхронизации с BOOK-LIBRARY. За счёт этого страница остаётся частью сайта, но данные не приходится дублировать в Markdown вручную.
Где Quartz здесь особенно полезен
Quartz хорошо подошёл этому сайту не потому, что он «лучший способ» публиковать заметки. Такая формулировка звучит рекламно и ничего не объясняет.
В этом проекте он полезен по другой причине: можно держать рядом статьи, проектные документы, лендинговые страницы, граф связей, поиск, RSS и кастомные компоненты. Markdown остаётся понятным источником текста, а TypeScript-компоненты закрывают места, где обычной заметки уже мало.
Для автора это решает понятную проблему: знания, черновики и проектные описания не застревают внутри личного vault, но и не превращаются в отдельный тяжёлый сайт, который нужно обслуживать отдельно от текстов. Для читателя это даёт другой результат — не папку случайных заметок, а связанный сайт, где можно читать материалы, переходить по темам и видеть контекст.
Если коротко: Quartz здесь — статический каркас сайта Smirnoff, а не просто экспорт Obsidian в веб.