Updated 2026-05-19
Project · Live progress

Roadmap проекта

Полная дорожная карта AI Creative Hub: Стадия 1 — 10 этапов MVP-сборки, Стадия 2 — 13 этапов превращения в SaaS. Канон — ai-hub/ROADMAP.md в репо.

📘
Deep architecture research
Провайдерская стратегия, ledger-first wallet, pricing engine, fallback chains, security/GDPR, бюджет на 6 месяцев.
ai-hub/docs/architecture-research.md
Прогресс 9 / 10 этапов · ~85% задач
Done — готово в коде, протестировано In progress — активная работа Next — спека готова, в очереди Backlog — запланировано Blocked — внешняя зависимость
Этапы — навигация
Этап 1
Foundation · структура БД и типы
Postgres + Drizzle ORM + Auth.js + MinIO + BullMQ + миграции
Done
Структура БД
3 миграции применены на проде: 0000_init.sql + 0001_wallet_functions.sql + 0002_onboarding_bonus.sql
Таблица users (Auth.js — id, email, name, role)
Таблица token_wallets (available + reserved + total_purchased + total_spent)
Таблица token_transactions (append-only ledger для аудита)
Таблица ai_tools (каталог инструментов)
Таблица ai_jobs (история запусков с idempotency_key)
Таблица media_assets (S3-ключи MinIO + метаданные)
Таблица payments + payment_packages + promo_codes + promo_redemptions
Auth.js служебные: accounts + sessions + verification_tokens
SQL-функции
4 атомарных wallet-функции (SECURITY DEFINER): wallet_reserve · wallet_charge · wallet_refund · wallet_credit
Триггер on_user_created — auto-create wallet + welcome bonus 100 токенов
Триггеры updated_at на token_wallets / ai_tools / ai_jobs
Типы (вместо Supabase types)
Drizzle schema в src/lib/db/schema.ts — single source of truth
13 row-типов + 6 insert-типов (User, AiTool, AiJob, Payment, NewAiJob, ...)
6 string-union enum-типов (JobStatus, ProviderId, ToolCategory, ...)
Aggregate Database interface — аналог Supabase Database
Seed
13 AI-инструментов в drizzle/seed/tools.sql (image, video, face, content)
4 token-пакета: Starter / Creator / Pro / Studio
Этап 2
Личный кабинет
Dashboard, баланс, история, каталог
Done
Реализован личный кабинет/dashboard (server component, protected middleware'ом)
Показан баланс токенов — в Header (badge с available + reserved) + полная страница /wallet (4 metric cards)
Показана история генераций/history (50 свежих jobs с status-бэйджами, error_message)
Показан каталог AI-инструментов/tools (13 моделей по 6 категориям: image, video, face, audio, content, analysis)
Дополнительно: /gallery — grid всех генераций пользователя с presigned URLs из MinIO
Дополнительно: страница инструмента /tools/[slug] с дженерик-runner'ом — форма рендерится из input_schema JSON-схемы
Mobile polish — backlog
Onboarding flow для новых юзеров — backlog
Этап 3
Token Wallet
Reserve → Charge / Refund · race-free · идемпотентно
Done
Перед запуском задачи проверяем балансwallet_reserve() бросает INSUFFICIENT_FUNDS (P0001) если available < cost→ 402
Резервируем токены → atomic UPDATE token_wallets SET available -= N, reserved += N WHERE available >= N RETURNINGrace-free
При успехе списываемwallet_charge() в webhook handler'е + worker'е. Partial charge поддержан (refund разницы)
При ошибке возвращаемwallet_refund() в catch блоке worker'а + watchdog подбирает stuck jobs >15min
Welcome bonus 100 токенов автоматически при INSERT в users (триггер on_user_created)
Append-only ledger token_transactions — все 7 типов (purchase, spend, refund, bonus, reserve, release, adjustment) с balance_after для аудита
Идемпотентность: webhook повторно не списывает (проверка job.status уже finalized)
Promo code redemption endpoint + UI — таблицы готовы, эндпоинта нет
Этап 4
AI Provider Router
Универсальный интерфейс ProviderAdapter · router-map
Done
Реализован Routersrc/lib/providers/router.ts, статический map ProviderId → ProviderAdapter
Универсальный интерфейс ProviderAdapter (src/lib/providers/types.ts):
submit(args) — async-вариант runJob(input). Принимает model + input + webhookUrl + jobId, возвращает {status, providerJobId}
getStatus(providerJobId) — polling-fallback, идентичен спецификации getJobStatus(jobId)
parseWebhook(headers, body, secret) — async-вариант getResult(jobId). Верифицирует подпись, возвращает завершённый результат
cancel(providerJobId) — optional, поддержан где провайдер позволяет
Per-provider webhook-секреты: FAL_WEBHOOK_SECRET · REPLICATE_WEBHOOK_SECRET и т.д. (src/lib/providers/secrets.ts)
Адаптеры: fal.ai (HMAC SHA-256) + Replicate (Standard Webhooks svix). kling/runware/modelslab/internal — стабы
Fallback-цепочки: provider A падает → провайдер B. Backlog
A/B-тестирование: одна задача на двух провайдерах для сравнения качества. Backlog
Cost-based routing: автоматический выбор cheapest provider. Backlog
Этап 5
Первые инструменты · 7 моделей
text-to-image · upscale · background remover · face swap
Done
text-to-image через fal.ai → fal-ai/flux/dev · 5 токенов
image upscale через Replicate → nightmareai/real-esrgan · 3 токена
background remover через fal.ai → fal-ai/birefnet/v2 · 2 токена
face swap через Replicate → cdingram/face-swap · 10 токенов
Бонус: image-edit через fal.ai → fal-ai/flux-pro/kontext · 8 токенов
Бонус: Nano Banana (Google Gemini 2.5 Flash Image) — text→image и edit · 10/12 токенов
Бонус: Clarity Upscaler (Pro tier) · 8 токенов
Media ingest в MinIO: ingestJobMedia() обходит JSON output, скачивает медиа-URLs, кладёт в bucket, инсертит media_assets row
Presigned URLs (TTL 1h) для отдачи юзеру — независимы от TTL провайдера
Этап 6
Video tools · Kling 1.6 + 2.1 Master
image-to-video · text-to-video · video upscale
Done
image-to-video через fal.ai → fal-ai/kling-video/v1.6/standard/image-to-video · 80 токенов
text-to-video через fal.ai → fal-ai/kling-video/v1.6/standard/text-to-video · 100 токенов
Pro-тир: image-to-video Pro Kling 2.1 Master · 220 токенов (кинематографическое качество)
Pro-тир: text-to-video Pro Kling 2.1 Master · 250 токенов
video upscale — в работе, через fal-ai/topaz/upscale/video
Решение: не пилим отдельный Kling JWT-адаптер — fal уже проксирует Kling 1.6/2.1, тот же webhook-flow что у image-моделей
Progress bar для долгих задач (>30sec) — backlog
Этап 7
Payments · Stripe + Telegram Stars
Покупка токенов · webhook · начисление · история
In progress
Покупка токенов → Server Action buyPackage(slug) создаёт Stripe Checkout session (price_data, без manual Stripe products)
Webhook оплаты/api/webhooks/stripe, верифицирует подпись через stripe.webhooks.constructEvent
Начисление токенов → на checkout.session.completed зовём wallet_credit(type='purchase')
История платежей/wallet (token_transactions) + /admin/payments (registry)
4 пакета в БД: Starter ($9.90) / Creator ($29.90) / Pro ($69.90) / Studio ($199)
Welcome bonus 100 токенов при регистрации (триггер)
Идемпотентность по Stripe event_id (защита от двойного credit на ретрае webhook'а) — следующее
Промокоды + redemptions UI — таблицы готовы, эндпоинта нет
!RU-платежи — Stripe не для физлиц РФ. Дублируем на Telegram Stars (паттерн из tma.46-62-215-11.nip.io)
Этап 8
Обработка ошибок + observability
Watchdog · timeout · refund · health · rate-limit
Done
Недостаточно токенов → 402 в /api/tools/[slug]/run с подсказкой «нужно N токенов»
API provider error → worker catch блок: wallet_refund + status='refunded' + error_code
Timeout → watchdog (15 min default) подбирает jobs в queued/processing и рефандит автоматически
Failed generation → webhook handler ставит status='refunded' с error от провайдера
Refund tokenswallet_refund() атомарно возвращает reserved → available + пишет ledger row
Rate-limit: 5 параллельных jobs на юзера (env MAX_CONCURRENT_JOBS_PER_USER) → 429 с понятной ошибкой
Healthcheck /api/health — ping DB + Redis, JSON с таймингами, 200/503. Используется в Docker HEALTHCHECK
Structured JSON logger (stdout/stderr) — child(scope), LOG_LEVEL env
BullMQ retries намеренно skip — дубли provider submit опасны (двойное списание у провайдера). Watchdog покрывает stuck-кейс
Sentry — backlog, по желанию подключается через child(scope) в logger.ts
Email-уведомления о длинных видео — backlog
Этап 9
Admin panel · 5 табов
Overview · Users · Jobs · Tools · Payments
Done
Список пользователей/admin/users — таблица 100 свежих с wallet'ом и jobs count, inline grant ±N tokens
Список задач/admin/jobs — фильтры по статусу, manual refund button с confirm
Список транзакций/admin/payments (платежи) + per-user в /wallet (token_transactions)
Настройка стоимости инструментов/admin/tools · inline tokenCost-edit, изменения мгновенно
Включение/отключение инструментов → status select (active / beta / disabled) на /admin/tools
Overview tab: метрики платформы (users + 24h jobs + GMV) — live queries
Role guard: middleware + requireAdminPage() / requireAdminApi()
Admin-таб в Header виден только для role='admin'
API: /api/admin/jobs/:id/refund · /api/admin/tools/:id · /api/admin/users/:id/grant-tokens
Аудит: все мутации админа пишутся в token_transactions.metadata с by: admin@email
Provider P&L по моделям (аггрегация provider_cost_usd vs charged_tokens) — backlog
Этап 10
Production deploy
Dockerfile · compose · prod БД и bucket · Caddy
In progress
Dockerfile (multi-stage: deps → builder → web target / worker target)
Next.js output: "standalone" для слим runtime image (~200MB)
docker-compose.yml (web + worker, external network aisales_aisales-net)
БД ai_hub создана в aisales-postgres на проде, 13 таблиц + триггеры
13 tools + 4 packages засидены в проде
MinIO bucket ai-hub-media создан
Backup конфигов: pg_backup.sh.bak.20260519_093701, backup.env.bak.…
pg_backup.sh патч под PG_DBS список — PATCH в DEPLOY.md, юзер применяет вручную (auto-classifier заблокировал авто-правку критичного backup-скрипта)
Caddy блок aihub-app.46-62-215-11.nip.io → готовый блок в DEPLOY.md
!Env keys от пользователя: FAL_KEY, REPLICATE_API_TOKEN, STRIPE_SECRET_KEY, SMTP_URL
!Финальный build + deploy на проде — блокируется env keys выше
Beyond MVP
Backlog
Что добавим после запуска
Backlog
Promo codes UI + redeem endpoint (таблицы готовы)
RU-платежи через Telegram Stars (паттерн из transcribe в tma.46-62-215-11.nip.io)
MinIO bucket backup: расширить aux_backup.sh через mc mirror или bucket replication
Sentry / error tracking (через child(scope) в logger.ts)
Email-уведомления о длинных задачах (видео >1 min)
Onboarding flow для новых юзеров (демо-генерация на welcome bonus)
Mobile polish (медиа-grid в галерее, форма runner'а на iOS)
Direct Kling JWT-адаптер (если fal upcharges станут существенными)
Provider fallback-цепочки (fal падает → Replicate)
A/B-тестирование качества (одна задача на двух провайдерах)
Cost-based routing — автоматический выбор cheapest provider
Reels script generator (Claude Sonnet 4.6 integration)
Provider P&L в admin (margin per model)
/admin/transactions — отдельный таб для админа со всеми token_transactions (включая reserve/spend/refund)
Илья, следующие этапы — уже не «собрать MVP», а превратить его в рабочий SaaS-продукт, который можно продавать, масштабировать и контролировать по экономике.
10
QA / тестирование всей системы
Главная цель: убрать баги до первых пользователей

Проверить:

  • регистрация / вход
  • покупка токенов
  • списание токенов
  • возврат токенов при ошибке
  • генерации через каждый AI-инструмент
  • загрузка файлов
  • история задач
  • ошибки API
  • лимиты
  • работа очередей
  • админка
11
Pricing и unit-экономика
Себестоимость каждого инструмента → маржа → цена в токенах

Для каждого AI-инструмента посчитать:

  • стоимость API
  • стоимость хранения
  • комиссия платёжки
  • желаемая маржа
  • цена в токенах
Пример · Kling video себестоимость $0.35 → продаём за $1.2–1.5 в токенах → маржа 60–75%
12
Тарифные пакеты
Продавать не «токены», а результат
Starterдля теста
Creatorосновной массовый тариф
Proдля активных креаторов
Agencyдля команд и продакшенов
Важно — как продавать «100 Reels-креативов» · «50 AI-видео» · «200 фото для контента» · «30 рекламных концепций» — а не абстрактные «10 000 токенов».
13
Onboarding
После регистрации юзер сразу понимает что делать
  • стартовые бесплатные токены
  • короткий tutorial
  • блок «начни отсюда»
  • 3–5 готовых сценариев использования
  • шаблоны промптов
  • примеры результатов

Иначе люди зайдут, увидят много кнопок и выйдут.

14
Creator Templates
Готовые сценарии поверх моделей — вот что можно продавать

Не просто «text-to-image», а:

  • Reels Hook Generator
  • Luxury Product Video
  • AI Avatar Intro
  • Face Swap для рекламы
  • Before / After креатив
  • Instagram Visual Pack
  • UGC Ad Generator
  • Product Photo Upscale
  • Talking Avatar Script
  • Viral Reel Concept
15
Preset System
Юзер выбирает стиль, платформа подставляет промпт

Стили:

  • luxury editorial
  • cinematic
  • UGC ad
  • fashion campaign
  • podcast clips
  • Instagram expert style
  • viral TikTok style

→ результат получается предсказуемее.

16
Project Workspace
Юзер работает не «по одному файлу», а внутри проектов
  • проекты
  • папки
  • бренды
  • сохранённые стили
  • история генераций внутри проекта
  • повторить генерацию
  • remix результата
  • скачать пакет файлов
17
Brand Kit
Очень сильная функция для B2B и креаторов

Пользователь загружает:

  • логотип
  • цвета
  • шрифты
  • описание бренда
  • tone of voice
  • референсы
  • лицо / аватар
  • продукты

→ все генерации адаптируются под его бренд.

18
Admin Analytics
Видеть не «пользователей», а деньги
  • revenue
  • MRR
  • ARPU
  • CAC
  • LTV
  • маржа по каждому инструменту
  • самый дорогой API
  • самый прибыльный инструмент
  • failed jobs rate
  • refund rate
  • активные пользователи
  • retention
  • conversion to payment
19
Beta Launch
Запускать через закрытую бету, не публично
  1. взять 30–50 лояльных пользователей
  2. дать бесплатные токены
  3. собрать обратную связь
  4. понять, какие инструменты реально используют
  5. убрать лишнее
  6. усилить самые востребованные функции
20
Лендинг и оффер
Единый AI-кабинет без 20 разных подписок

Позиционирование: Единый AI-кабинет для создания Reels, рекламы, видео, фото и креативов без 20 разных подписок.

Главные блоки:

  • боль: слишком много AI-сервисов
  • решение: один кабинет
  • что внутри
  • примеры генераций
  • кому подходит
  • тарифы
  • кейсы
  • CTA: получить стартовые токены
21
Viral Loop
Механика роста
  • водяной знак на бесплатных генерациях
  • «создано в AI Creative Hub»
  • реферальные токены
  • бонус за приглашение друга
  • публичная галерея лучших работ
  • шаблоны, которыми можно делиться
22
Следующий большой модуль · AI Marketing Agent
После MVP — не новые модели, а агент

Должен:

  • анализировать Instagram
  • находить слабые места
  • предлагать контент-стратегию
  • генерировать Reels
  • создавать креативы
  • делать контент-план
  • давать рекомендации по росту

Вот это станет твоим отличием от обычного агрегатора.

Главный следующий шаг
Сейчас тебе нужно не ещё 20 функций, а 3 вещи
1
довести MVP до стабильности
2
упаковать 8–12 сценариев использования для креаторов
3
запустить закрытую бету на свою аудиторию

После этого будет понятно, что масштабировать.

Важные требования · все выполнены
Архитектурные инварианты
Все API keys только в .env — никогда в коде, никогда не отдаются на frontend
Не вызываем внешние AI API с frontend — только из Route Handlers и worker'а
Все задачи проводятся через backend (/api/tools/[slug]/run → BullMQ → worker)
Для долгих задач используется очередь — BullMQ на Redis, отдельный worker-контейнер
Все результаты сохраняются в Storage — MinIO bucket ai-hub-media, presigned URLs
Не ломаем текущий функционал — ai-hub/ изолирован от pages/, infra-worker/, других сервисов в монорепо
Все новые функции вынесены в модуль /ai-hub — свой Postgres-проект ai_hub, свой compose, свой поддомен
Reference
Deep architecture research
Источник архитектурных решений · mapping в реализацию
Reference

Глубокое research-исследование (~700 строк) загружено в проект как ai-hub/docs/architecture-research.md. Охватывает провайдерскую стратегию, ledger-first wallet, pricing engine, fallback chains, security/GDPR, 6-month budget и подробный mapping research → текущая реализация.

Что внутри
Executive summary + рекомендуемая архитектура (что строить самому, что брать с рынка)
Провайдерская матрица: fal / Replicate / Kling / Runware / ModelsLab — что брать первым и почему
Целевая схема платформы (Mermaid) + 5 архитектурных принципов (async-first, ledger-first, provider-neutral, cost-aware, private-by-default)
ER-схема БД с расширениями (workspaces, job_attempts, provider_models) + критичные индексы
Формула pricing + конкретные примеры токенизации (Nano Banana, Kling 720p, upscale) с multiplier 1.52
API-контракт: 13 endpoints + расширенный ProviderAdapter (quote / submit / poll / parseWebhook / cancel)
Адаптеры для Replicate и Kling с реальными API-вызовами (~250 строк TS)
Router policy + scoring формула
Security / Webhook hardening / Payment provider map / GDPR / AI Act / Observability / CI-CD
MVP план: P0/P1/P2 + 14 этапов с оценкой 246-384ч (6-10 недель) + 3-sprint порядок
Тест-план (Unit / DB / Integration / E2E / Chaos / Security / Financial / Load) + критерии готовности
Бюджет: месячный API-budget (~$2.8-3.3k/мес) + 6-month operational ($5.6k-37.8k)
Главные gaps research → наша реализация
quote() API для динамической оценки цены до резерва
Таблица job_attempts для retry/fallback lineage
Provider health scoring + fallback chains (router сейчас static)
Two-plane wallet: разделить money и tokens (FX/margin tracking)
Sentry + OpenTelemetry (Stage 2 observability)
GDPR + AI Act Article 50 (применяется с 2026-08-02) compliance — consent flow для face-swap, DPA inventory
Provider P&L analytics — есть provider_cost_usd, нет агрегаций по марже