Glofy: стили для AI-фотосессийGlofy: чёрно-белые AI-портреты
Иконка Glofy

Glofy

Приостановлен · 2026

AI-фотосессии и обработка снимков · iOS · 2025–2026

Вся техническая часть · от клиента до инфраструктуры

9 тыс.+
загрузок · 12 версий в App StoreApp Store Connect · на 19.09.2026
~6,5 тыс.
генераций · медиана 54 с
~114 тыс.
строк кода в четырёх частях
  • Сделал Flutter-приложение с подписками и рекламой.
  • Спроектировал серверный пайплайн фото- и видеогенераций.
  • Написал bull-dozer — открытую библиотеку оркестрации workflow.
Стек
FlutterDartTypeScriptNestJSReactRedisPostgreSQLAWSPython
Направления
АрхитектураBackendCI/CDМонетизацияAI-пайплайн
Период
Ноябрь 2025 — релиз в январе 2026 — остановлен в мае 2026
Моя зона
Клиент, сервер, воркеры, админка, инфраструктура
Команда проекта
Дизайн, промпты стилей, маркетинг и закупка — на стороне издателя Evrika Games; интеграцию платежей и подписок доделывал ещё один разработчик

Задача

Мобильное приложение для AI-фотосессий с собственной системой обработки изображений: от загрузки фото до готовой серии снимков и видео в выбранном стиле.

Путь одного заказа

Генерация занимает от минуты до десяти — дольше, чем живёт HTTP-запрос. Поэтому заказ идёт через очередь и отдельный workflow: упавший воркер или оборванная сеть не теряют результат.

  1. APPFlutter-клиент

    Пережимает фото — обычно до 1 МБ — и загружает по протоколу tus с докачкой после обрыва. Повторное фото не грузится заново — его узнаёт хеш.

  2. APINestJS API

    Проверяет пресет и баланс монет, записывает заказ в PostgreSQL и ставит задачу в очередь с id заказа.

  3. QUEUEBullMQ на Redis

    Воркеры забирают задачи из очереди; зависшую задачу очередь отдаёт другому воркеру.

  4. WORKFLOWbull-dozer

    Шаги заказа: генерация в Replicate, для видео — ожидание модели и обработка в ffmpeg, затем ватермарка. У каждого шага свои ретраи.

  5. CDNS3 и CloudFront

    Оригинал, превью и версия с ватермаркой. Подписанные cookie открывают только файлы своего профиля.

  6. RESULTВозврат в приложение

    Сервер публикует статус в Redis-канал пользователя, клиент ждёт его long-polling-запросом до 60 секунд.

Сбой воркера не оплачивается дважды
bull-dozer хранит результат каждого шага в Redis. Перезапущенный workflow берёт готовые шаги из кеша и не вызывает платную модель повторно; сырое видео сохраняется в S3 до того, как истечёт ссылка Replicate.
Результат — в момент готовности
Long-polling поверх Redis pub/sub: клиент узнаёт о завершении сразу, без опроса по таймеру и без отдельной push-инфраструктуры.

Что сделал

Что это дало

Ссылки

Нужен человек, который доведёт продукт до релиза?