# ZeroPost — Roadmap (план фич) Живой документ. Обновлять по мере выполнения. Последнее обновление: 2026-06-08 --- ## Контекст / архитектура - **zeropost.ru** (web) — блог + админка. PM2 `zeropost-web` (pm_id=5, порт 3042), `/var/www/zeropost-web`. - **app.zeropost.ru** (tool) — SaaS для управления каналами TG/VK/MAX. PM2 `zeropost-tool` (pm_id=4, порт 3041), `/var/www/zeropost-tool`. - **engine** — общий движок API + LLM-pipeline. PM2 `zeropost-engine` (pm_id=3, порт 3030), `/var/www/zeropost-engine`. - БД: PostgreSQL, db=`zeropost`. - Cron: `*/10 * * * * zeropost-autogen.sh`, `* * * * * zeropost-publish-scheduled.sh` (обе очереди). - Internal secret: `zeropost_internal_2026`. TG-прокси: CF Worker в `app_settings.TELEGRAM_API_BASE`. --- ## ✅ DONE ### Photo-search (Yandex) - `user_posts.image_credit` (JSONB), `users.is_admin` (BOOLEAN). - Engine: proxy `/api/photo-search/*`. Tool: `/system` (admin-only), `PhotoSearchModal`. - Web: категория `photo_search` скрыта из blog-админки. ### Auto-publish статей блога → каналы - `channels.auto_publish_{enabled,categories,delay_min,template,with_cover,button_text,image_source}`. - Engine: `articleAutoPublish.js`, `scheduledPostsRunner.js`, `/api/scheduled-posts/*`. - Хук в `PATCH/POST articles` при `draft→published`. Typeahead `/api/articles/admin/search`. - Cron обновлён — дёргает обе очереди (`user_posts` + `scheduled_posts`). - Web: `ArticlePicker`, `AutoPublishTab`, 4 вкладки в `ChannelEditor`. ### Журнальная главная страница zeropost.ru - Engine: `/api/articles/home` (hero / byCategory / popular / recent). - Web: `CategoryRow`, `PopularBlock`, `RecentBlock` (группировка Сегодня/Вчера/Эта неделя). - `ArticleCard` с 3 размерами (hero/regular/compact) + цветной category badge без дублей. - Header упрощён (2 пункта desktop + расширенное мобильное меню). ### Персонаж Зеро - 15 поз: `avatar, coding, tools, lock, gears, eureka, confused, facepalm, victory, tired, reading, magnifier, chart, meditate, present` → `/var/www/zeropost-uploads/zero-{name}.webp`. - `src/services/zeroCharacter.js` — выбор позы по тексту/категории статьи (эмоциональные триггеры + категорийные). - `channels.auto_publish_image_source = 'alternating'` — чётные посты = AI-обложка, нечётные = Зеро. - `scheduledPostsRunner` — multipart upload (не URL) чтобы CF Worker не падал. ### Промпт Зеро - `src/services/promptBuilder.js` — секция `author_persona` в `buildArticleSystemPrompt`. - `src/services/articles.js` — `blogChannel.author_persona` (голос, правила, запрещённые фразы). - Статьи теперь пишутся от первого лица с личными историями. ### TG-канал @zeropostru — запуск - Welcome-пост от Зеро с аватаром + кнопкой (msg_id=13, закреплён). - 4 статьи опубликованы (по одной на каждую категорию), режим alternating. ### zeropost.ru — страница Зеро + TG-продвижение - `/about/zero` — страница с описанием персонажа + галерея 8 поз. - Footer — TG-банер с аватаром Зеро на каждой странице. - Конец каждой статьи — блок «Понравилась заметка? → В канал». - `/about` — ссылка «Познакомьтесь с Зеро». --- ## 🚀 ПЛАН: что делать дальше ### СЕЙЧАС (не отложить) **A. Revoke бота** — токен @zeropostru_bot засветился в этом чате. Зайди в @BotFather → /mybots → выбери бота → API Token → Revoke. Потом обнови в `/admin/channels/1` → Настройки → Bot Token. **B. Статья на Habr** — главный бесплатный способ получить первые 200-500 живых читателей. Тема: «Я сделал блог, который ведёт ИИ с персонажем-маскотом. Как работает pipeline». Напишу черновик — дай команду. --- ### ✅ СДЕЛАНО СЕГОДНЯ (08.06.2026) - P1 Календарь: /calendar, месяц/неделя/список, drag&drop, фильтр по каналу - P2 PostPreview: правая колонка TG/VK/MAX, счётчик символов - P3 PostTemplates: 7 пресетов структур постов - P4 ChannelAnalytics: вкладка аналитики, реакции, гистограммы день/час - P5 FromUrlModal: URL→черновик (веб/YouTube/TG) ### app.zeropost.ru — приоритетный порядок #### P1. Календарь публикаций (1–2 дня) Самый частый запрос у SMM-инструментов. Без него непонятно «что когда выходит». - Страница `/calendar` — визуальная сетка (неделя + месяц). - Данные: `user_posts.scheduled_at` + `publish_slots` канала. - Карточки по цветам: draft=серый, scheduled=синий, published=зелёный, failed=красный. - Drag & drop между датами → PATCH `scheduled_at`. - Фильтр по каналу. #### P2. Превью под платформу (0.5–1 день) Сейчас пишешь пост и не знаешь как он будет выглядеть. - Компонент `PostPreview` в `ChannelView` справа от textarea. - Рендерит Markdown как TG: **жирный**, _курсив_, обрезка caption 1024, превью ссылки. - Переключатель TG / VK / MAX — разные ограничения форматирования. #### P3. Шаблоны постов (0.5 дня) Ускоряет создание поста в 3 раза. - 7 кнопок-пресетов: Новость, Анонс, Кейс, Лонгрид, Подборка, Опрос-разбор, Личное мнение. - Каждый — готовая структура поста + hint для AI. - В `ChannelView` рядом с кнопкой «Идеи тем». #### P4. Аналитика постов (2–3 дня) Без метрик невозможно понять что заходит. - Таблица `post_metrics(user_post_id, captured_at, views, forwards, reactions JSONB)`. - Воркер раз в 15 мин: пуллит views через TG embed для постов < 7 дней. - В `ChannelView` у каждого поста — строчка «👁 N ↗ N ❤️ N». - График: «лучший день/час для публикации» по медиане views. #### P5. URL → черновик (1–2 дня) Killer feature которой нет у конкурентов в таком качестве. - Вставил ссылку → AI читает статью/YouTube/TG-пост → пишет пост в стиле канала. - `POST /api/generate/from-url`. Для статей: cheerio + og-meta. Для YouTube: yt-dlp транскрипт. #### P6. Комментарии + AI-ответы (4–7 дней) Большая фича, отдельный спринт. - TG webhook → unified inbox. - Классификатор haiku: вопрос/спам/похвала/троллинг. - Предложенный AI-ответ с кнопкой «отправить». #### P7–P10. Опросы, хештеги, best-time, URL-shortener По 0.5–1 дню каждое, делаем после P1–P5. --- ### zeropost.ru — мелкий должок | Задача | Срочность | |---|---| | Revoke бота @zeropostru_bot | 🔴 СЕЙЧАС | | Статья на Habr про ZeroPost | 🟠 На этой неделе | | Кнопка «Бэкфилл статей» в AutoPublishTab | 🟡 Низкая | | История публикаций канала | 🟡 Низкая | | Балансы внешних сервисов в /system | 🟡 Низкая | --- ### zeropost.ru — рост аудитории (без бюджета) | Действие | Ожидаемый результат | Когда | |---|---|---| | Habr: «Как я сделал AI-блог с маскотом» | 200–500 переходов | На этой неделе | | vc.ru: то же самое | 100–300 переходов | На этой неделе | | 5 комментариев в AI-чатах TG | 20–50 подписчиков | Постоянно | | Взаимный пиар с 3 каналами (tgstat.ru) | 50–150 подписчиков | 1–2 недели | | Reddit r/artificial | 50–200 переходов | На этой неделе | | SEO (органика) | Долгосрочно | Само, 2–3 мес | --- ## Технический долг - ENGINE_URL default в `lib/engine.js` tool'а = 3040, должен быть 3030. - `per_day` в `autogen_settings` не используется в логике (только `run_hour:run_minute`). - TOPIC_BANK заканчивается — нужен AI-генератор новых тем. - VK: публикация без фото (нужен 2-step `photos.getWallUploadServer`). - MAX: заглушка `throw new Error('не реализована')`. --- ## Не делаем - Холст / визуальный редактор. - Stories / Reels. - Команда / роли (до 5+ клиентов). - White Label. - Парсинг конкурентов через MTProto.