Как мы собрали главную страницу из markdown-блоков
Главная страница сайта — это HTML-шаблон. Обычно текст зашит прямо в код. Чтобы поменять заголовок, нужно лезть в шаблон, искать нужное место, не сломать вёрстку.
Мы сделали иначе: контент живёт в markdown-файлах, шаблон только отображает.
Проблема
Старая главная начиналась так:
Публикация заметок из Obsidian
Технически верно. Но человек без контекста не понимает, зачем ему это. «Obsidian» — слово для гиков. Остальные уходят.
Решение
Попросили AI проанализировать текст с точки зрения не-IT человека. Получили конкретный ответ:
- «Граф знаний» — математический термин, пугает
- Начинаете с механики, а не с пользы
- Нет историй, только определения
AI предложил метафору: «Персональная Википедия». Все знают Википедию. Никто не спрашивает, что такое граф.
Новая структура
Разбили главную на блоки. Каждый блок — отдельный markdown-файл:
_main_hero.md — заголовок и подзаголовок
_main_audience.md — для кого (3 карточки)
_main_faq.md — частые вопросы
_index.md — возможности (как было)
Как это работает
Файл _main_faq.md:
### Мне нужно уметь программировать?
Нет. Пишете заметки в Obsidian, нажимаете «Опубликовать».
### Сколько это стоит?
Первый месяц бесплатно. Дальше — $10/месяц.
Шаблон загружает файл и превращает секции в HTML:
{{ faq := nvs.ByPath("/_main_faq.md") }}
{{ range i, q := faq.PartialRenderer().Sections(3) }}
<div class="faq-item">
<h3>{{ q.TitleHTML | unsafe }}</h3>
<p>{{ q.ContentHTML | unsafe }}</p>
</div>
{{ end }}
Добавить вопрос — отредактировать markdown. Шаблон не трогаем.
Что изменилось
| Было | Стало |
|---|---|
| «Публикация заметок из Obsidian» | «Персональная Википедия, которая приносит доход» |
| Техническое описание | «Делитесь знаниями. Зарабатывайте на экспертизе. AI отвечает за вас.» |
| Контент в HTML | Контент в markdown-файлах |
| Нет FAQ | 6 вопросов, снимающих страхи |
Процесс с AI
- Показали текущие тексты
- Попросили проанализировать с точки зрения не-IT человека
- Получили список проблем и предложений
- Вместе переписали блоки
- AI сгенерировал код шаблона
Весь процесс — один разговор. От «проанализируй» до работающей страницы.
Итог первой версии
Главная теперь редактируется через markdown. Тексты понятны людям без технического бэкграунда. Структура модульная — легко добавлять и убирать блоки.
AI помог не только с кодом, но и с копирайтингом. Анализ текста, метафоры, FAQ — всё в одном разговоре.
Обновление: делаем страницу живее
Первая версия работала, но выглядела пустовато. Много белого пространства, нет картинок. Решили доработать вместе с AI.
Картинка, которая объясняет идею
Попросили нейросеть нарисовать схему: мозг в центре, вокруг заметки-документы. Часть заметок внутри пунктирного круга (приватные), часть снаружи (публичные).
Получилась простая иллюстрация, которая сразу показывает суть: ваши знания → заметки → часть публикуется в интернет.
Текст слева, картинка справа
Раньше всё было по центру — текст, кнопки, картинка друг под другом. Смотрелось скучно.
Сделали как у современных сервисов: текст слева, картинка справа. На телефоне — друг под другом. Сразу стало живее.
Блоки «Для кого» — теперь видно текст
Оказалось, что светло-серый текст на светлом фоне почти не читается. Сделали текст темнее, фон чуть контрастнее. Простое изменение — большая разница.
Видео с пояснениями
Было два видео без подписей. Непонятно, зачем смотреть каждое.
Добавили заголовки:
- Сайт из заметок — как опубликовать страницы и настроить платный доступ
- Публикация в Telegram — как отправлять посты по расписанию
Теперь понятно, что в каждом видео, ещё до просмотра.
Секция «Узнать больше»
Добавили блок со ссылками на главные разделы: Философия, Документация, Блог. Каждая карточка с коротким описанием — сразу понятно, куда ведёт.
Фон — мягкая волна, сгенерированная нейросетью. Карточки полупрозрачные, с лёгким размытием под ними.
Простой футер
Раньше элементы были разбросаны: ссылки в одном месте, контакты в другом, иконки где-то сбоку.
Теперь всё по центру, три строки: навигация, контакты, юридическая информация. Чисто и понятно.
Как мы работали
- Смотрим на страницу — видим, что не так
- AI предлагает варианты
- Выбираем подходящий
- Публикуем, смотрим результат
- Повторяем
За час — несколько итераций. Каждый раз решали конкретную проблему.
Почему это быстро
Вся главная страница — от первого макета до финальной версии — заняла около часа. Не потому что мы гении, а потому что инструменты не мешают.
Markdown вместо CMS
В WordPress нужно: открыть админку → найти страницу → открыть редактор → понять, где какой блок → отредактировать → сохранить → проверить на сайте.
Здесь: открыл файл → написал текст → сохранил. Всё.
AI работает с текстом напрямую
Claude Code видит файлы как есть. Не нужно объяснять, где кнопка «Редактировать» или как устроена база данных.
Говоришь: «сделай текст темнее в блоке Для кого». AI находит файл, меняет класс с text-slate-600 на text-slate-800, готово.
Шаблон + контент = разделение
Дизайнер меняет шаблон. Редактор меняет markdown. Никто друг другу не мешает. AI может работать с обоими.
Итерации за минуты
Цикл «увидел проблему → исправил → проверил» занимает минуту-две. За час можно сделать 20-30 итераций. В традиционной CMS — может 5.
Вывод
trip2g — не про «ещё одна CMS». Это про скорость. Markdown понятен людям и AI. Шаблоны отделены от контента. Git хранит историю.
Результат: сайт, который можно собрать за час, а редактировать — за секунды.
Новая страница: контент важнее дизайна
Главная рассказывает про продукт в целом. Но есть конкретная аудитория — эксперты с ценными знаниями, которые не знают, как делиться. Им нужна отдельная страница.
Проблема эксперта
Человек годами копит знания. Хочет поделиться, но:
- Книга — проект на год, большинство не дописывают
- Блог — нужно регулярно публиковать, пропустил месяц — читатели ушли
- Курс — записать, смонтировать, продать, поддерживать
- Telegram — один пост = одна мысль, сложную тему не раскроешь
Все форматы требуют линейного потока. А знания — это граф. Одна тема связана с десятью другими.
Третий путь
Что если писать не статьи, а заметки? Одна мысль — одна заметка. Десять минут, не час. Заметки связываются ссылками. Через полгода — 200 заметок. Это уже база знаний.
Подключаешь к сервису — получаешь сайт. Дизайн базовый, но контент уже работает. Красоту можно добавить потом.
Как писали текст
Использовали режим групповой дискуссии с AI-агентами. Каждый со своей специализацией:
- Storyteller — нашёл крючок: «У тебя уже есть сайт. Ты просто этого не знаешь»
- Innovation Strategist — добавил бизнес-логику: путь к монетизации, упущенная выгода
- Design Thinking Coach — построил путь пользователя от боли к решению
Результат — структура страницы:
- Боль (знания застряли)
- Тупики (книга, блог, курс, канал)
- Решение (заметки + связи)
- Механика (как публиковать)
- Монетизация (три модели дохода)
- Примеры (кто так делает)
- Призыв (первый шаг)
Проверка на ясность
После написания прогнали текст через редактора информационного стиля. Нашёл:
- Канцелярит («для использования» → убрать)
- Абстракции без ссылок (упоминаем MCP — дай ссылку на документацию)
- Слабый призыв (читатель дошёл до конца и не знает куда кликнуть)
Добавили 10 внутренних ссылок. Страница перестала быть тупиком.
Отдельный layout
Главная показывает возможности сеткой карточек. Для длинного текста это не работает — глаз скачет, сложно читать последовательно.
Создали отдельный шаблон:
- Hero с заголовком под тему страницы
- Контент как статья (prose), не карточки
- CTA в конце — общий блок, переиспользуется
Вынесли повторяющиеся элементы в общие блоки: иконка Telegram, секция призыва к действию. Меньше копипасты, проще поддерживать.
Процесс для другой нейронки
Если делаешь похожую страницу:
- Определи аудиторию — кто конкретно, какая боль
- Найди тупики — что они уже пробовали, почему не сработало
- Предложи решение — как твой продукт решает именно эту боль
- Покажи путь к результату — от первого шага до цели
- Добавь монетизацию — если применимо, покажи как это приносит деньги
- Проверь на ясность — убери канцелярит, добавь ссылки
- Выбери layout — карточки для обзора, prose для истории
Главное: страница должна отвечать на вопрос читателя, а не рассказывать про фичи продукта.
Отладка Jet-блоков: почему выводится false
При создании переиспользуемого CTA-блока столкнулись с багом: вместо заголовка и подзаголовка выводилось false false.
Симптом
{{ block cta_section(title, subtitle) }}
<h2>{{ title }}</h2>
<p>{{ subtitle }}</p>
{{ end }}
{{ yield cta_section(title="Готовы?", subtitle="Напишите нам") }}
Результат: <h2>false</h2><p>false</p>
Причина
Jet требует значения по умолчанию для параметров блока. Без них именованные аргументы не связываются с параметрами.
Решение
{{ block cta_section(title="", subtitle="") }}
...
{{ end }}
Добавили ="" — заработало.
Альтернатива: механизм content
Для длинного текста лучше использовать встроенный механизм content:
{{ block cta_section(title="") }}
<h2>{{ title }}</h2>
<p>{{ yield content }}</p>
{{ end }}
{{ yield cta_section(title="Готовы?") content }}
Напишите в Telegram — поможем настроить.
{{ end }}
content — зарезервированное слово в Jet. Нельзя использовать как имя параметра (ошибка парсинга), но можно передавать вложенный HTML через yield ... content ... end.
Как нашли
- Написали минимальный тест с
jet.NewInMemLoader() - Увидели, что без дефолтов —
false - Проверили
contentкак параметр — ошибка парсинга - Задокументировали в лучших практиках
Три теста теперь фиксируют поведение Jet: именованные параметры, зарезервированный content, механизм yield content.
Ссылки
- Контент важнее дизайна — результат
- Главная страница — для сравнения
- Документация по шаблонам — как работает
PartialRenderer - Лучшие практики шаблонов — подводные камни Jet
- Философия — зачем вообще публиковать знания графом