Next.js не позволяет [channelId] и [id] на одном уровне.
Решение: /api/inbox/channel/[channelId]/* и /api/inbox/message/[id]/*
InboxTab: все fetch пути обновлены
ChannelView: вкладка 'Inbox' рядом с 'Аналитика'
InboxTab.js:
- Webhook setup кнопка (если не настроен)
- Табы: Новые / Все / Отвечено / Игнорировано
- Карточки сообщений с иконкой типа (question/praise/complaint/spam)
- AI-предложенный ответ с кнопкой 'Использовать →'
- Форма ответа прямо в карточке
- Кнопки: Ответить / Игнорировать / Спам
API routes: /api/inbox/[channelId], /reply, /status, /setup-webhook
PollModal:
- Вопрос + 2-10 вариантов ответа
- Типы: обычный / викторина (с правильным ответом и объяснением)
- Настройки: анонимность, несколько ответов
- Отложенная публикация через datetime-local
- Кнопка «📊 Опрос» в ChannelView (только для TG каналов)
HashtagSuggest:
- Появляется под сгенерированным постом
- Запрос в /api/generate/hashtags → Claude Haiku
- Клик по тегу — выбор, кнопка «Добавить в пост»
- Обновление тегов, закрытие панели
Вместо выбора standard/HD показываем информационный блок:
gpt-5-image-mini, routerai.ru, ~₽2.72/картинка, high quality
Убраны: imageQuality state, image_quality payload, HD модель gpt-5.4-image-2
ChannelEdit:
- Вкладка «AI-стиль»: textarea для ai_style_prompt, выбор image_quality (standard/hd)
- Описание моделей: gpt-5-image-mini vs gpt-5.4-image-2 с ценами в кредитах
ChannelView:
- Коллапсируемое поле «Доп. инструкции для AI» под темой поста
- Индикатор (синяя точка) если промт заполнен
- customPrompt передаётся в /api/generate
- app/spending/page.js: расходы по периодам, разбивка по провайдерам и типам
- app/api/usage/summary/route.js: прокси к engine /api/usage/summary
- Header.js: ссылка «Расходы» для admin (TrendingUp иконка)
ChannelEdit.js:
- Добавлены goal (multi-select + кастомные, как в форме создания)
- Добавлен language (select: ru/en/uk/kk)
- Импортированы Plus, X иконки и GOALS константа
app/api/metrics/channel/[channelId]/route.js:
app/api/metrics/best-time/[channelId]/route.js:
- await params (Next.js 16 требует), иначе 500
- Добавлен state imagePromptInstructions с дефолтом из style.image_prompt_instructions
- Новая карточка UI с textarea (макс 500 символов + счётчик)
- Поле включено в PATCH payload
- Размещено между палиткой и info-блоком «Как это работает»
- Auth: iron-session, регистрация/логин по email+password
- Дашборд со списком каналов
- 3-шаговая анкета создания канала (база/стиль/примеры+табу)
- Страница канала с генератором постов через polling
- Тёмная тема, Tailwind 3.4, accent emerald
- Прокси-API к zeropost-engine с x-user-id
- Совместимость с Next 16 async cookies/params