Как в 14 лет запустить ИИ-видеостудию на Next.js и Supabase: разбор Edge-архитектуры, защита от абузеров и экономия на API
Пока крупные студии тратят тысячи долларов на монтажеров, а бизнес пытается понять, как внедрить нейросети дальше генерации картинок, реальная ценность уходит в автоматизацию готовых бизнес-цепочек. Ручной монтаж в CapCut или After Effects — это прошлый век. Собрать видео по текстовому запросу, наложить сгенерированный ИИ голос и динамические субтитры теперь можно полностью автоматически с помощью кода.
Я разработал Stackly — платформу, которая заменяет рутину JSON-манифестами Shotstack API и ElevenLabs. Проект создавался не как пет-проект, а как полноценная production-ready система.
Ниже — подробный кейс о том, как спроектировать бэкенд на Edge Runtime для полной ликвидации задержек, оптимизировать базу данных PostgreSQL и защитить баланс API от жесткого наплыва абузеров.
Архитектурный паттерн: почему Node.js не подошел
Для ИИ-сервиса критически важна скорость ответа. Если пользователь нажимает кнопку «Сгенерировать» и ждет три секунды только ради того, чтобы сервер «проснулся», продукт теряет удержание.
Стандартные серверные функции на Vercel страдают от проблемы Cold Starts (холодного старта). Поэтому вся логика генерации и ИИ-поддержки Stackly была перенесена на Edge Runtime. За счет работы на облегченном движке V8 в распределенной сети edge-нод время холодного старта сократилось до единиц миллисекунд.
Для достижения минимального TTFB (Time to First Byte) менее 200мс на сквозных запросах я отказался от последовательных await-вызовов. Все независимые обращения к Supabase и внешним провайдерам выполняются параллельно:
TypeScriptexportconst config = { runtime: 'edge' }; exportdefaultasyncfunctionhandler(req: Request) { const startTime = Date.now(); const { userId, prompt, configId } = await req.json(); // Параллельное выполнение вместо последовательного блокированияconst [userProfile, systemConfig] = awaitPromise.all([ fetch(`${process.env.SUPABASE_URL}/rest/v1/profiles?id=eq.${userId}`, { headers: { Authorization: `Bearer ${process.env.SUPABASE_ANON_KEY}` } }).then(res => res.json()), fetch(`${process.env.SUPABASE_URL}/rest/v1/configs?id=eq.${configId}`, { headers: { Authorization: `Bearer ${process.env.SUPABASE_ANON_KEY}` } }).then(res => res.json()) ]); returnnew Response(JSON.stringify({ success: true, latency: Date.now() - startTime }), { status: 200, headers: { 'Content-Type': 'application/json' }, }); }
Проектирование БД: хронология миграций в PostgreSQL
Данные системы хранятся в управляемой базе Postgres от Supabase. Схема данных должна была не просто связывать сущности, но и выдерживать пиковые нагрузки без деградации производительности. Привожу логику трех основных миграций:
- Инициализация профилей и связей: Создание базовых таблиц с каскадным удалением зависимых данных (ON DELETE CASCADE).
- Логирование тикетов: Таблица support_tickets для связи пользователей с бэкенд-поддержкой в случае сбоев генерации ИИ-моделей.
- Оптимизация индексов: Чтобы база не ложилась при поиске по текстовым статусам и связям, были развернуты составные B-Tree индексы.
SQL-- Оптимизация выборки истории генераций для конкретного пользователяCREATE INDEX idx_video_generations_user_created ON public.video_generations (user_id, created_at DESC); -- Ускорение работы модуля поддержки клиентовCREATE INDEX idx_support_tickets_user_status ON public.support_tickets (user_id, status);
Продуктовый анти-фрод контур: как спасти бюджет на API
Главный инсайт при запуске ИИ-продуктов: без жесткой безопасности вас разорят в первый же день. Каждый запрос к OpenRouter Tier 1, ElevenLabs и Shotstack стоит реальных денег. Боты и любители бесплатных токенов могут «вымыть» баланс за считанные часы.
Чтобы этого не произошло, был внедрен трехэтапный защитный контур:
- Валидация через Zod: Входящие промпты проверяются на размер (строго от 10 до 500 символов), защищая контекстное окно моделей от перегрузки.
- Лимиты на Edge-уровне: На бесплатном тарифе действует ограничение — не более 5 запросов в час. Запрос режется на уровне Middleware, даже не доходя до БД.
- Device Fingerprinting: На уровне промежуточного слоя собираются хэши системных заголовков браузера и IP-адреса пользователя, генерируя уникальный SHA-256 слепок сессии. Если злоумышленник пытается регистрировать аккаунты-однодневки в Supabase Auth с одного железа, система моментально блокирует сессию.
Для защиты реферальных и конкурсных механик регистрация была переведена на Telegram OAuth через механизм Deep Links (t.me/bot?start=token). Бэкенд бота анализирует метаданные ТГ-аккаунта (возраст, наличие Premium), полностью отсекая авторег-фермы ботов.
Итоги и выводы для рынка
Рынок «простых оберток» над сторонними API умер. Чтобы ИИ-продукт приносил пользу и был экономически устойчив, разработчик должен решать сложные инфраструктурные задачи: контролировать расходы на API, выстраивать отказоустойчивую архитектуру и защищать проект от фрода.
Посмотреть на реализацию интерфейса и протестировать стабильность архитектуры можно на живом примере: stacklyapp.ru.
Каким вы видите будущее автоматизации видеоконтента? Поделитесь в комментариях своими мыслями по поводу Edge Runtime и оптимизации тяжелых бэкенд-процессов.
Теги: стартапы, искусственный интеллект, разработка, технологии, личный опыт, инди-хакинг, бэкенд