/ru/blog · материалы
Как мы собрали простую CMS-систему на базе GitHub-репозитория: Copilot пишет статьи, GitHub Actions публикует их на сайте и рассылает анонсы в Telegram и Max.
Во времена вайб-кода можно не покупать дорогие платформы и не настраивать монструозные CMS. Достаточно GitHub-репозитория, нескольких GitHub Actions и Copilot - и у вас готовый автопилот для контент-маркетинга.
Вот как это работает у нас в iconicompany.
Классические CMS (WordPress, Contentful, Strapi) решают задачу хранения и публикации контента, но тащат за собой инфраструктуру, зависимости и цену. А что если хранить контент там, где уже живет код, - в Git-репозитории?
Репозиторий iconicompany/icontent - это и есть наша CMS:
.md-файлы в папках content/ru/blog/ и content/en/blog/main запускает GitHub ActionsCopilot при этом играет роль редактора и автора: помогает писать статьи прямо в браузере или IDE через скилы, знает структуру репозитория и форматирование frontmatter.
Весь процесс выглядит так:
content/ru/blog/ - обычный коммит в maincontent/**"", --, ...)content/en/blog/Весь пайплайн описан в одном файле sync.yml.
content/
ru/
blog/
post-slug.md
en/
blog/
post-slug.md # автоматически генерируется
Каждый пост - это MDX-файл с YAML frontmatter:
---
title: "Заголовок поста"
date: '2026-04-10'
description: "Краткое описание"
tags: ['AI', 'GitHub']
authors: ['slavb18']
language: 'ru'
---
Очистка AI-артефактов - скрипт на sed убирает типографские символы, которые любят вставлять языковые модели: умные кавычки, длинные тире, многоточия. Это важно: MDX-парсеры могут ломаться на нестандартных символах.
Автоперевод - используется утилита llm Simon Willison. Она вызывает LLM через OpenAI-совместимый API (у нас - LiteLLM-прокси), который можно подключить к любой модели.
llm -m default --system "$PROMPT" -f "$FILE" -x > "$EN_FILE"
Если английская версия уже есть в коммите, перевод пропускается - это удобно, когда хочется сделать ручной перевод.
Анонс в мессенджеры - LLM генерирует анонс по тексту поста, затем он отправляется:
sendMessage)botapi.max.ruСинхронизация с сайтом - POST-запрос на webhook сайта iconicompany.com. Сайт сам забирает контент из репозитория через библиотеку icontentcollection.
icontentcollection - это npm-пакет, который умеет читать MDX/MD-файлы из локальной папки или GitHub-репозитория по API, парсить frontmatter и отдавать контент в удобном виде.
Это позволяет сайту на Next.js (или любом другом фреймворке) просто сказать: "дай мне список постов для блога" - и получить готовые данные без базы данных.
В Actions используются:
TELEGRAM_BOT_TOKEN / TELEGRAM_CHANNEL_ID - для анонсов в TelegramMAX_BOT_TOKEN / MAX_CHANNEL_ID - для анонсов в MaxOPENAI_API_KEY / OPENAI_API_BASE / OPENAI_MODEL - для LLM (перевод + анонсы)SYNC_URL / SYNC_TOKEN - для триггера обновления сайтаВсе чувствительные данные - в GitHub Secrets, остальное - в Variables.
Copilot знает структуру репозитория через скилы и может:
Это не просто "помощник в написании текста" - это агент, встроенный в рабочий процесс.
Нет базы данных. Нет CMS-сервера. Нет дополнительных дашбордов. Только:
Каждый пост - это коммит. История правок, ревью через PR, откат изменений - все это из коробки. Хочешь посмотреть, как статья менялась со временем? git log к вашим услугам.
Раньше создать такую систему означало выбирать между WordPress, Contentful или самописным решением на месяц. Сейчас это несколько часов с Copilot: описываешь задачу, он пишет workflow, ты проверяешь, пушишь - готово.
Собственный autopilot для контента. Без vendor lock-in. С полным контролем над данными.
Репозиторий открытый: iconicompany/icontent. Смотрите, форкайте, адаптируйте под себя.
Вопросы и обратная связь - в канале @iconicompany.