slavb18

    Собственная CMS на GitHub: как Copilot помогает писать, публиковать и анонсировать контент

    AICopilotGitHubCMSAgentsDevOpsАвтоматизация

    Во времена вайб-кода можно не покупать дорогие платформы и не настраивать монструозные 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

    Весь процесс выглядит так:

    1. Copilot пишет пост - через скил или прямо в IDE по brief'у
    2. Файл попадает в content/ru/blog/ - обычный коммит в main
    3. GitHub Actions запускается автоматически - срабатывает триггер на изменения в content/**
    4. Автоочистка - убираются кавычки-ёлочки, тире и другие AI-артефакты ("", --, ...)
    5. Автоперевод на английский - LLM переводит пост и кладет его в content/en/blog/
    6. Синхронизация с сайтом - вызывается webhook, сайт подтягивает новый контент
    7. Анонс - 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 - для анонсов в Telegram
    • MAX_BOT_TOKEN / MAX_CHANNEL_ID - для анонсов в Max
    • OPENAI_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.


    📚 Читайте также