166 lines
9.9 KiB
Markdown
166 lines
9.9 KiB
Markdown
# 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.
|