Замість найму SEO-команди й копірайтерів Directoria побудувала автономну AI-команду на одному VPS-сервері за 2GB RAM: Claude Code під капотом, 4 спеціалізовані AI-агенти (seo-researcher, content-writer, image-creator, wp-publisher), Telegram-бот як «директор у кишені» і cron, який щоранку публікує нову статтю. Це наш перший кейс — meta-кейс про власні процеси. Усі цифри й налаштування — реальні, бо це інфраструктура, на якій працює сам сайт directoria.com.ua, де ви зараз цей текст і читаєте.
Контекст: чому ми взагалі це зробили
На ранньому етапі B2B-сервісу контент-маркетинг — найдешевший канал, який має сенс для SEO і довіри. Але має одну проблему: дорого і повільно у класичній моделі. Копірайтер 12–25 тис. ₴/міс, дизайнер на картинки, час редактора на правки, повільна швидкість випуску (1 стаття на тиждень — оптимістично). Альтернатива — раз на місяць «генератор з ChatGPT»: нерелевантна вода без бренд-тону, факти не верифіковані, SEO випадкове.
Ми обрали третій шлях: побудувати свою AI-команду, яка робить ту саму роботу що копірайт-команда, але автоматично і за фіксовану інфраструктурну вартість. Не «GPT-генератор», а кілька спеціалізованих агентів, що відтворюють реальний редакційний workflow: пошук теми → ресерч → бриф → драфт → редагування → картинки → публікація з SEO-метаданими.
Стек: один VPS, Claude Code, Python
- VPS: Ubuntu 24.04, 2 ГБ RAM, 1 CPU, 20 ГБ диску. Найдешевший серверний тариф, ~5–10 $/міс. SSH-алас, root-доступ, без жодних додаткових послуг хостингу.
- Claude Code (Anthropic CLI) — це CLI-обгортка над Claude API, що дозволяє створювати спеціалізованих агентів через файли
.claude/agents/<name>.md. Працює через підписку Claude Pro/Max, не через окремі API-ключі. Це ключовий вибір — Claude Code дає нам структуру «головна сесія делегує спеціалістам» з коробки. - Python 3.12 для скриптів-оркестраторів і інтеграцій з зовнішніми API.
- python-telegram-bot v21.6 для Telegram-моста (стрімінг повідомлень з AI у Telegram).
- Gemini API (gemini-2.5-flash-image) для генерації картинок — швидше і дешевше за DALL-E на нашому об’ємі.
- WordPress REST API для публікації постів і завантаження медіа — авторизація через WP Application Password.
- systemd + cron для оркестрації daily-pipeline і фонових процесів.
AI-команда: Director + 4 спеціалісти
Director (operating manager)
Метарівень над спеціалістами. Не виконавець конкретних задач, а координатор. Працює на VPS у директорії /opt/directoria/. Отримує задачу від фахівця через Telegram → визначає тип задачі → делегує конкретному спеціалісту → веде журнал виконання в work/log.md → доповідає назад. Це окрема Claude Code сесія з власним CLAUDE.md (його роль, межі повноважень, як делегувати, що писати в журнал).
seo-researcher
Спеціалізований leaf-агент. Отримує тему від директора → робить ресерч через WebSearch інструмент Claude → аналізує конкурентів, ключові слова, питання людей з пошуку, тренди в галузі → складає структурований бриф у content/briefs/<slug>.md. Бриф містить: title-кандидати, primary keyword, semantic keywords (LSI), цільову аудиторію, рекомендовану структуру H2/H3, ключові факти і цифри для включення, оцінку складності рейтингу.
content-writer
Бере готовий бриф від researcher → пише статтю українською в бренд-тоні Directoria. Орієнтиром служить його власний CLAUDE.md з прикладами «як ми пишемо» (короткі речення, без води, з конкретикою, з реальними цифрами де доречно, без емодзі, без хвостових summary-абзаців «Як підсумувати…»). Драфт зберігає у content/drafts/<slug>.md у форматі Markdown з усіма H2/H3, списками, плейсхолдерами для картинок.
image-creator
Отримує драфт → визначає, які картинки потрібні (зазвичай 1 hero + 1–2 ілюстрації по ходу) → формує детальний промпт для Gemini залежно від контексту (photorealistic для фото-сцен, isometric для архітектури і концепцій) → викликає скрипт generate_image.py → зберігає PNG у /tmp/images/. Бренд-палітра прописана в його CLAUDE.md: navy blue + warm amber, без яскравого неонового, без stock-photo сухості.
wp-publisher
Фінальний етап. Бере драфт + картинки → завантажує картинки у WP Media Library через REST API з SEO-метаданими (title, alt-text, caption, description під SEO) → створює пост з призначеним featured image → ставить категорію та теги → публікує у статусі publish. Окремо: видаляє дублікат H1 з тіла статті (бо WordPress сам рендерить заголовок з поля title, і без цього отримаєш два H1 на сторінці).
Telegram-бот: «директор у кишені»
Як це працює з мого боку як власника: я ставлю задачу директору через Telegram-бот . Бот отримує повідомлення → пересилає в Claude Code сесію Director-а на VPS → отримує відповідь у стрімі → шле назад мені у формі коротких update-повідомлень з прогресом і фіналом.
Технічно: Python-скрипт telegram_bot.py постійно слухає updates з Telegram Bot API. Для кожного нового повідомлення запускає subprocess з командою claude --permission-mode bypassPermissions ... з контекстом сесії, стрімить вивід назад у Telegram через partial-message updates кожні 30 секунд (щоб клієнт не вирішив, що бот завис).
Подвійний режим (failover): основний — Claude (через Pro/Max підписку), резервний — Gemini API. Якщо ловимо rate limit на Claude — автоматично перемикаємось на Gemini для повідомлень, де якість трохи менше критична (наприклад, перший draft, який пізніше доопрацює інший етап).
Daily-pipeline: щоранку нова стаття
Cron-скрипт daily_pipeline.sh запускається о 09:00 UTC щодня. Послідовність дій повністю автоматична:
- Бере наступну тему з черги в
content/topics.md(плейн-лист тем, який ми ведемо в repo вручну — це навмисний human-in-the-loop, щоб AI не випадково писав про щось зайве) - Делегує
seo-researcher→ чекає поки бриф готовий (зазвичай 2–4 хвилини) - Делегує
content-writer→ чекає поки драфт готовий (4–8 хвилин) - Делегує
image-creator→ чекає поки картинки готові (1–3 хвилини) - Делегує
wp-publisher→ пост опублікований у WP (30–60 секунд) - Шле Власнику в Telegram нотифікацію «Стаття опублікована: title, link»
Час одного циклу: 8–15 хвилин залежно від теми. Все на одному 2 ГБ-VPS, без зовнішніх воркерів, без черг типу Redis/RabbitMQ. Простий послідовний bash-скрипт.
Реальні метрики vs традиційний копірайт-цикл
| Параметр | Класичний копірайт-цикл | AI-команда Directoria |
|---|---|---|
| Час від теми до публікації | 3–7 днів | 8–15 хвилин |
| Орієнтовна вартість 1 статті | 1500–2500 ₴ (копірайт + дизайнер + редактор) | 80–150 ₴ (підписки і API на pro-rate basis) |
| Pipeline throughput | 1–2 статті/тиждень за нормального темпу | 1 стаття/день на cron, до 5/день на ручному режимі |
| Інфраструктура | Зовнішні підрядники, ризик зриву строків | 1 VPS за ~10 $/міс — повний контроль |
| Час на запуск | 2–4 тижні: пошук, найм, onboarding копірайтера | 2–3 тижні: архітектура й налаштування AI-команди |
| Якість стартового драфта | висока (досвідчений копірайтер) | середня (потребує редактора для топ-сторінок) |
| Консистентність бренд-тону | залежить від людини | детермінована — описана у CLAUDE.md спеціаліста |
Що було важко (чесно, без полірування)
- Permissions і sandbox. Claude Code за замовч просить підтверджень на критичні операції (write до системних файлів, network-запити з певних патернів). Для cron-режиму без людини потрібен
--permission-mode bypassPermissions+ envIS_SANDBOX=1. Налаштовується не з першого разу — пройшли через помилку, коли під rootbypassPermissionsсам по собі не працював. Знайшли — додали env-variable у systemd-unit. - Rate limits. На Pro-підписці зловили 5-годинне обмеження вже після першого тижня daily-cron. Купили Max-підписку. Pro-підписки вистачає на ~10–15 годин активної AI-роботи на тиждень, цього мало для двох-агентної системи з cron.
- Telegram timeout. Якщо AI «думає» більше 5 хвилин (наприклад, складний multi-search ресерч) — Telegram update-callback втрачається і клієнт думає, що бот завис. Зробили streaming-режим: бот шле «ще працюю, n секунд» кожні 30 секунд як update предыдущего message і фінальний дамп у кінці.
- WordPress + EWWW особливості. Плагін EWWW Image Optimizer автоматично конвертує uploaded PNG → JPG → WebP. Тому коли upload PNG у Media, URL відразу повертає
.jpgрозширення, і тіло поста треба патчити з урахуванням цього. Замість банальногоfilename.pngу HTML —filename.jpg. - Якість контенту. AI-стаття без редактора ≠ якість досвідченого копірайтера. Для long-tail SEO-статей якість прийнятна. Для топових landing-сторінок (як цей кейс, який ви читаєте) — все одно треба людина у фінальній рев’ю. AI-команда — це 80% роботи на автопілоті, 20% — людина для топового шарф.
- WebSearch під root. WebSearch інструмент Claude повертав «недоступний» коли бот запускався як root. Розібралися: проблема була у тому ж
permission-mode, не у privileges. Виправили env-змінною.
Що далі
Контентний конвеєр — це лише перший layer. Зараз будуємо те ж саме для inbox-менеджменту (AI читає вхідні листи, фільтрує, відповідає за шаблонами на типові), для управління календарем (AI з’ясовує, коли всі зручні, бронює), для CRM-нотаток з дзвінків (AI слухає, конспектує, ставить таски). Ціль одна — не «AI замість співробітників», а «AI забирає 70% механічної роботи, щоб ми могли робити не-механічне».
Чому це цікаво для вашої компанії
Якщо ви читаєте цей кейс і думаєте «у нас же все інакше, у нас CRM, замовлення, документообіг — це не контент» — він якраз для вас. Архітектура, яку ми побудували, не специфічна під контент. Та сама схема (VPS + Claude Code + спеціалізовані агенти + інтерфейс-бот) працює і для:
- Автоматичної обробки замовлень з усіх каналів (сайт, Telegram, Instagram, телефон) в одну CRM
- Кваліфікації лідів і автозаповнення CRM з дзвінків і чатів
- AI-підтримки клієнтів з знанням історії і ескалацією до оператора
- Генерації договорів з шаблонів і OCR вхідних рахунків
На безкоштовній 30-хвилинній зустрічі-знайомстві покажемо, як така ж архітектура виглядатиме під ваш конкретний процес — з оцінкою кількості агентів, інтеграцій і потенційного ROI під ваш бізнес. Замовити зустріч →