8. SMTP: emailService.js (nodemailer), templates (welcome/payment/low_credits)
/api/admin/email/test — тест отправки
app_settings category=smtp (HOST/PORT/USER/PASS/FROM/ENABLED)
9. Maintenance mode: middleware в index.js, MAINTENANCE_MODE в engine settings
При true → 503 для всех запросов кроме /uploads и /api/settings
10. Blog topic bank:
DB: blog_topics(category,topic,is_used,source,priority)
40 тем мигрированы из хардкода (source=hardcoded)
autogen.js: getNextTopic берёт из DB, fallback на TOPIC_BANK
admin API: GET/POST /blog-topics, DELETE /:id, POST /generate (AI +10)
- Персонаж Зеро: 23 позы (zeroCharacter.js), скрипты генерации
- Auto-publish статей в TG: multipart upload, кнопки, режим alternating Zero/cover
- Fallback цепочка обложек: aiprimetech gpt-5.5 → Pollinations → local SVG (6 палитр)
- Auto-series: Claude haiku определяет серию для каждой статьи автоматически
- Channel stats: подписчики, история, delta 24h/7d
- Photo-search: Yandex API, профили доменов, Redis лимиты
- Scheduled posts runner: backfill, preview, queue, cancel
- promptBuilder: author_persona Зеро, голос от первого лица
- Fixes: dollar-placeholder bugs в PATCH channels/autogen, listArticles фильтры
- AI model: gpt-5.5 для image generation
Старый endpoint /v1/images/generations на gpt-image-* возвращает temporarily unavailable
уже несколько часов, а тот же ключ через /v1/responses на GPT-5 успешно генерирует картинки.
- covers.js полностью переписан: generateCoverViaResponses как основной путь
- tool_choice: image_generation — заставляем модель ВСЕГДА вызывать инструмент
- wrappedInput: явная подсказка чтобы GPT не отвечала текстом
- legacy fallback: если /responses упал — пробуем старый /v1/images/generations
- sharp оптимизация: оригинал PNG → WebP 1600w q84 (уменьшение в ~30 раз)
- timeout до 5 минут — GPT-5 с reasoning + image это долго