Собственная CMS на GitHub: как Copilot помогает писать, публиковать и анонсировать контент
Во времена вайб-кода можно не покупать дорогие платформы и не настраивать монструозные CMS. Достаточно GitHub-репозитория, нескольких GitHub Actions и Copilot - и у вас готовый автопилот для контент-маркетинга.
Вот как это работает у нас в iconicompany.
Идея: GitHub как CMS
Классические CMS (WordPress, Contentful, Strapi) решают задачу хранения и публикации контента, но тащат за собой инфраструктуру, зависимости и цену. А что если хранить контент там, где уже живет код, - в Git-репозитории?
Репозиторий iconicompany/icontent - это и есть наша CMS:
- Статьи хранятся как
.md-файлы в папкахcontent/ru/blog/иcontent/en/blog/ - Любое изменение в ветке
mainзапускает GitHub Actions - Actions публикует контент, переводит его на английский и рассылает анонсы
Copilot при этом играет роль редактора и автора: помогает писать статьи прямо в браузере или IDE через скилы, знает структуру репозитория и форматирование frontmatter.
Пайплайн: от идеи до поста в Telegram
Весь процесс выглядит так:
- Copilot пишет пост - через скил или прямо в IDE по brief'у
- Файл попадает в
content/ru/blog/- обычный коммит вmain - GitHub Actions запускается автоматически - срабатывает триггер на изменения в
content/** - Автоочистка - убираются кавычки-ёлочки, тире и другие AI-артефакты (
"",--,...) - Автоперевод на английский - LLM переводит пост и кладет его в
content/en/blog/ - Синхронизация с сайтом - вызывается webhook, сайт подтягивает новый контент
- Анонс - LLM генерирует короткий анонс (2-4 предложения), который уходит в Telegram и Max
Весь пайплайн описан в одном файле 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'
---
GitHub Actions: что происходит под капотом
Очистка AI-артефактов - скрипт на sed убирает типографские символы, которые любят вставлять языковые модели: умные кавычки, длинные тире, многоточия. Это важно: MDX-парсеры могут ломаться на нестандартных символах.
Автоперевод - используется утилита llm Simon Willison. Она вызывает LLM через OpenAI-совместимый API (у нас - LiteLLM-прокси), который можно подключить к любой модели.
llm -m default --system "$PROMPT" -f "$FILE" -x > "$EN_FILE"
Если английская версия уже есть в коммите, перевод пропускается - это удобно, когда хочется сделать ручной перевод.
Анонс в мессенджеры - LLM генерирует анонс по тексту поста, затем он отправляется:
- В Telegram через Bot API (
sendMessage) - В Max (российский мессенджер) через
botapi.max.ru
Синхронизация с сайтом - POST-запрос на webhook сайта iconicompany.com. Сайт сам забирает контент из репозитория через библиотеку icontentcollection.
Библиотека 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 как редактор
Copilot знает структуру репозитория через скилы и может:
- Написать пост по brief'у в нужном формате
- Проверить frontmatter на корректность
- Подобрать slug для имени файла
- Предложить теги
Это не просто "помощник в написании текста" - это агент, встроенный в рабочий процесс.
Минимализм инфраструктуры
Нет базы данных. Нет CMS-сервера. Нет дополнительных дашбордов. Только:
- Git-репозиторий (бесплатно)
- GitHub Actions (бесплатно для публичных репо)
- LiteLLM или любой OpenAI-совместимый API
Версионность и история
Каждый пост - это коммит. История правок, ревью через PR, откат изменений - все это из коробки. Хочешь посмотреть, как статья менялась со временем? git log к вашим услугам.
Это и есть вайб-кодинг
Раньше создать такую систему означало выбирать между WordPress, Contentful или самописным решением на месяц. Сейчас это несколько часов с Copilot: описываешь задачу, он пишет workflow, ты проверяешь, пушишь - готово.
Собственный autopilot для контента. Без vendor lock-in. С полным контролем над данными.
Репозиторий открытый: iconicompany/icontent. Смотрите, форкайте, адаптируйте под себя.
Вопросы и обратная связь - в канале @iconicompany.