На Авито полно квартир за 80, 100 и 180 тысяч в месяц, которые выглядят так, будто их специально фотографировали как можно хуже. Тёмные комнаты, кривые ракурсы, пересветы, ванная как из хоррора — и всё это в объявлениях, где вообще-то пытаются сдать или продать дорогой объект.

Видеовизитка: Посмотрите, я существую


Я бесился как человек, который увлекается фотографией. А потом решил починить это image-edit нейронками. Мне 15, и в тот момент я ещё не понимал, что между «прикольной идеей» и «рабочим продуктом» лежат модели, промпты, GPU, серверы, гранты, баги и куча моментов, когда хочется всё бросить.

Так появилась Yokva — сервис, который должен был превратить час ручной возни с фотками квартиры в одну нормальную кнопку.

Скрин Yokva
Скрин Yokva

Под катом — не история про «смотрите, какой я молодец в 15 лет». Это скорее честный разбор того, как красивая AI-идея постепенно превращалась в (почти) нормальный продукт


Оглавление и что будет дальше:

  1. Как я вообще пришёл к этой идее через фотографию и одну квартиру

  2. Почему разговор с риелтором оказался полезнее любых догадок

  3. Почему ChatGPT здесь не равен продукту

  4. Как всё начиналось в реализации

  5. Когда Yokva перестала быть простой

  6. Как я пересобирал подход и к чему в итоге пришёл

  7. Как я GPU считал и почему самый мощный не всегда самый выгодный

  8. Какие баги и костыли сделали этот сервис более реальным

  9. Как в этой истории появились гранты, Timeweb Cloud и взрослый слой проекта

  10. Что у меня в итоге получилось, что не получилось и зачем я вообще всё это пишу


❯ Как я вообще пришёл к этой идее через фотографию и одну квартиру

Я увлекаюсь фотографией. Не интерьерной, не коммерческой, а стритом и документалистикой, особенно люблю всячески издеваться над рекламными баннерами.

Картинки

К недвижимости это сначала вообще не имело отношения. Но в какой-то момент моя тётя Ира попросила меня отснять квартиру под сдачу. Я согласился: и опыт, и немного денег, и просто интересно, как работать в коммерческой съемке.

Как и что получилось
Как это было
Как это было
Что получалось
Что получалось

Квартира сдалась недели за две. Мы потом встретились, пообедали, немного порадовали эго и зачем-то открыли Авито. И там было почти всё то же самое, о чем я говорил в начале: темные кадры, кривые ракурсы, ощущение, что хорошие объекты зачем-то продают через плохую картинку.

Контрпример за 100К/мес. Красная комната Линча отдыхает))
Контрпример за 100К/мес. Красная комната Линча отдыхает))
И другие контрпримеры
60К/мес
60К/мес
80К/мес
80К/мес
175К/мес
175К/мес
180К/мес
180К/мес

Поэтому, где-то через неделю, мне захотелось это автоматизировать. Я накидал концепт, продумал интерфейс, купил домен (очень спонтанная трата), начал собирать первую версию Yokva, с ней лендинг — и довольно быстро понял, что строю пока что-то красивое, но очень-очень сырое. Непонятно для кого, непонятно в каком виде и непонятно, что в этом вообще настоящее, кроме моей собственной увлеченности.

Кусочек лендинга
Кусочек лендинга

Тогда я сделал то, что надо было сделать сразу: пошёл разговаривать с людьми.


❯ Почему разговор с риелтором оказался полезнее любых догадок

Есть такая полезная книжонка — «Спроси маму» Роба Фицпатрика. Если очень коротко, её идея в том, что не надо спрашивать людей, понравился бы им твой продукт. На такие вопросы почти все всегда врут, даже без умысла. Гораздо полезнее спрашивать, как они уже решают задачу сейчас.

Книжка
Книжка

Примерно так я и написал тете Ире — что она делает с фотографиями прямо перед публикацией и сколько времени у неё на это уходит.

Из переписки быстро выяснилось главное. Она слегка ретуширует фотографии на телефоне: где-то кадр подрезать, где-то поправить цвет, где-то замазать некрасивую деталь вроде розетки. И на одну квартиру уходит примерно час. Раньше — больше, сейчас — меньше только потому, что рука набилась.

Переписка

Я: ... На последнем объекте — когда уже всё отсняла, что ты делала с кадрами перед публикацией? Сколько времени ушло?

Ира: Слегка ретуширую. В приложении на телефоне. Где-то кадр подрезать, где-то с цветом поработать, где-то страшную розетку замазать. Но этим никто из обычных людей не занимается — загоняются только те, кто профессионально этим зарабатывает.

Я: А сколько времени занимает?

Ира: Где-то час. Раньше больше. Просто сейчас рука уже набита.

Час на одну квартиру. И это у человека, который давно в теме.

Потом я поговорил еще с тремя людьми: собственницей, которая сдаёт сама, и двумя риэлторами. Картина не совпадала в деталях, но сходилась в главном: хорошие фото нужны всем, ручная возня раздражает всех, а нормального простого решения никто не ждёт — ну просто потому что привыкли)

Теперь у Yokva появилась очень земная цель: сжать час ручной работы в автоматизированную пару минут.

На этом месте у любого нормального человека появляется один и тот же вопрос: если ChatGPT (и подобные) уже отлично пишут нейрослоп текст, редактируют фото и приемлемо выполняют инструкции, то зачем вообще отдельный продукт? Вопрос хороший. И мне не раз пришлось на него нормально ответить самому себе (а теперь и вам!)


❯ Почему ChatGPT здесь не равен продукту

Потому что человеку нужен нормальный результат.

Риелтору или собственнику не хочется по очереди думать, какое фото брать, что на нём править, как не сломать геометрию комнаты, где взять текст, как не платить за подписки и как потом всё это собрать в объявление. Ему хочется загрузить фото и получить вменяемый выход.

Благо от такого мы уже отошли :))
Благо от такого мы уже отошли :))

Подтверждаю цель: сделать одну нормальную кнопку.
На словах это звучало легко. Дальше начались проблемы.


❯ Как всё начиналось в реализации

Самый первый старт был максимально прагматичным и наивным. У меня не было ни сервера, ни бюджета под это (плюсом я следовал концепту пустого кармана), поэтому я пошёл туда, где можно было собрать демо бесплатно — на родимом Cloudflare Workers (родимый, потому что там куплен домен)

Схема казалась изящной. Пользователь грузит фото, оно падает в простое хранилище R2. Дальше бесплатные AI Workers дёргают LLaMA 4 для анализа кадра, а Flux пытается вытянуть свет и убрать мусор. Затем собирается текст, который вместе с уже обработанной картинкой идет обратно юзеру. Дёшево и сердито. На этом этапе Yokva была простым скриптом, который перекидывал картинку между парой API.

CF AI Neurons
CF AI Neurons

Казалось, что задача почти решена. Я уже готовился все быстренько упаковать и вперед продавать.

А потом я захотел странного. По правде говоря, засмотрелся на aidentika.com

Я подумал: а зачем отдавать риелтору просто ретушированную фотку? Если мы экономим время, давайте выдавать готовый креатив для соцсетей. Фотка квартиры, а поверх неё красивым шрифтом цена, метро, плашки. Риэлтор берёт картинку и сразу постит в условный Telegram.

Задизайнил даже пару макетов, в духе такого:
Пример-1
Пример-1
Пример-2
Пример-2

Для сборки этих макетов я нашёл библиотеку Satori — она умеет брать HTML/CSS и рендерить из этого PNG. Идея была супер. Но именно там моя уютная serverless-идиллия закончилась.


❯ Когда Yokva перестала быть простой

Satori просто не запускался на Cloudflare Worker. Знать бы мне это сразу...

Проблема была в жестких лимитах free tier’а. Генерация макета отнимала больше разрешенного CPU-time (там порог <10 мс), и библиотека тупо не успевала подняться. Картинки не рендерились, всё падало.

Тогда мне пришлось сделать первый манёвр. Раз Cloudflare не тянет, значит можно перенести часть логики на Vercel — там лимиты были мягче. Satori заработал. Я считал это вынужденным костылем, чтобы спасти фичу с макетами.

Вот так это стало выглядеть. ужасно)
Вот так это стало выглядеть. ужасно)

Но это не решило главной проблемы.

Пока я возился с рендером картинок, вылезло то, о чём я старался не думать: качество самой ретуши скакало как ненормальное. Исходная связка моделей выдавала то приемлемый результат, то абсолютно пластиковый ужас, с потерей всех деталей. Плюс, пользователи же грузят не по одной фотке, а сразу всю квартиру.

Уже наверно чувствуете? И до меня тоже дошло, что Yokva расползлась. У меня кусок логики тут, рендер там, фотки лежат в третьем месте, модели ведут себя непредсказуемо. Короче, зоопарк! Зоопарк костылей! Который еще и работает только при идеальной погоде.

Чем дольше я это городил, тем меньше Yokva походила на прикольную AI-игрушку.

❯ Как я пересобирал подход и к чему в итоге пришёл

Пришлось признать: если я хочу продукт, а не демо на костылях, придётся всё переписать. Я отказался от распределенной serverless-сборки, экономии-ради-экономии и собрал локальный монолит на Next.js. Нужно было вернуть контроль. Хотя следовало это закладывать изначально by-design))

Проект оброс нормальным бэкендом: появилась база на Postgres, очереди задач на Redis и BullMQ (чтобы ретушь крутилась в фоне) и S3-хранилище для исходников.

Схемка монолита
Схемка монолита

Сколько фото загрузил — столько анализов стартует одновременно. Как только они готовы, текст и ретушь запускаются параллельно:

const retouchPromise = retouchAll(...); 
const copyText = await generateListingText(claudeInput, userContext);

Но архитектура — это полбеды. Дальше начался долгий перебор самих моделей.

Акт 1. Текстовые модели: Gemini за 0.001$ и Claude за 3$

Экспериментальным путем выявил простую вещь: генератор текста не должен сам смотреть картинки, а дешевая vision-модель не напишет хороший текст. Делим их!

Gemini 3 Flash Preview — быстрый, дешёвый, умеет смотреть на фото и описывать конкретные проблемы. Анализ одной фотки стоит около 0.001$. Для задачи «скажи, что и где не так, и отдай fix_prompt — шик.

Claude Sonnet 4.6 — отвечает за текст объявления. Я пробовал разное. GPT и Gemini писал слишком пластиково (или мои промпты были таковыми). Упаси боже от Grok — от количества непрошеного мата в объявлении о продаже однушки хотелось плакать. Клод лучше держит тон, не скатывается в риэлторский шаблон и нормально слушается ограничений. Да, он дороже (3/15$ за миллион I/O токенов), но текст — не то место, где хотелось сэкономить. К слову, Haiku оказался слишком молчаливым, а Opus не дал видимой разницы в качестве.

Прайсинг на модели
Прайсинг на модели

Обе модели я гоняю через Perplexity Agent API — дергаю что угодно в одном месте и плачу грантовыми кредитами. Я оставил заявку в стандартной форме, и они отсыпали мне грант на 5000$ (об этом поговорим попозже). Кстати, за месяц-два экспериментов я потратил оттуда ровно 76 центов. Это даже не чашка кофе. По непонятной мне причине в их биллинге нет данных об использовании чужих моделей — отображается только их родная Sonar, но я просто смотрю на итоговую сумму.

Биллинг
Биллинг
Итого
Итого

Текстовый контур работал идеально. Оставалось решить главную боль — ретушь.

Акт 2. Modal и рассадник Image-моделей

Google Cloud с их Nano Banana Pro отпал (триал рано или поздно закончится, а грант мне не дали: «нет документов, нет юрлица и бла-бла-бла»). И тут появился Modal — облако с GPU-контейнерами и посекундной оплатой, где мне одобрили 500$ гранта.

modal.com
modal.com

Что мне сразу понравилось: вместо того чтобы страдать с Terraform, ручной настройкой Docker-файлов, поднятием серверов и написанием собственных очередей для контроля масштабирования, всё выделение топовой железяки сводится к одному аргументу в коде.

import modal
app = modal.App()

@app.function(gpu="A100-80GB")
def edit_image():
    # Модель погнала ретушировать

Всё. Modal сам поднимет контейнер при HTTP-запросе, сам «подогреет» видеокарту (если поставить buffer_containers=1), и сам её убьет через 5 минут простоя (scaledown_window=300), чтобы не сжигать баланс впустую.


Здесь же началась битва за качество картинки.

  • Сначала была Flux Kontext Dev. Казалась логичным стартом. К сожалению, для квартирных фото, где обязательно сохранение максимума деталей эта модель вела себя все-таки непредсказуемо: то перегенерирует интерьер целиком, то слишком агрессивно сломает геометрию. Не то.

  • Потом базовая Qwen-Image-Edit. 20 шагов диффузии по умолчанию, вроде стабильно, но качество пластмассовое и мыльное.

  • Попробовал Qwen-Image-Edit-2511 (улучшенный plus-pipelineна 40 шагов по умолчанию). Стало красивее, но из-за внутреннего устройства диффузионного шедулера контейнеры начали сыпать дикими ошибками IndexError (про эти баги я отдельно расскажу уже совсем скоро).

  • В итоге я нашёл FireRed-Image-Edit-1.1 — форк с другой реализацией того же пайплайна. 28 шагов, лучше держит геометрию комнаты и реалистично работает со светом. Поставил в продакшн.

В итоге текущий рабочий срез выглядит так:

  • Gemini 3 Flash Preview → анализирует фото, отдаёт fix_prompt

  • FireRed Image Edit 1.1 → ретушь по fix_prompt (на Modal)

  • Claude Sonnet 4.6 → текст объявления

  • Satori → генерация готовых макетов (отложено)

Схемка — внутри
Схемка внутри

Когда я только настроил первый воркер на Modal и прогнал FireRed, я выбрал среднюю карточку A100 на 80GB. Сделал тестовый прогон: картинка сгенерилась быстро, и по цифрам всё выглядело вполне бюджетно.

Предвещая возмущения, вот чего я добился к сегодняшнему дню. Тестово умеет в multi-photo, поэтому детали не придуманы :)

До/после
До/после

Я уже было подумал, что вопрос с железом закрыт. А потом решил посчитать экономику получше.


❯ Как я GPU считал и почему самый мощный GPU ≠ самый дешёвый

Modal даёт выбор: T4, A10, L4, L40S, A100 40GB и 80GB, RTX-PRO-6000, H100, H200, B200. Глаза разбегаются.

Прайсинг gpu
Прайсинг gpu

Потратил несколько часов на замеры. Один промпт, одна картинка (1920x1080) для каждой модели (FireRed-Image-Edit-1.1 и Qwen-Image-Edit-2511) и каждой видеокарты. Метрика одна: рентабельность, то есть стоимость одного полного цикла (roundtrip)

Табличка и циферки
Табличка и циферки
  • T4, L4, A10 и даже L40S (48GB) — выглядят соблазнительно по цене, но для выбранных моделей на 30+ ГБ весов они оказались бесполезны. Отвал по OOM происходит в 100% случаев еще на этапе переноса тензоров.

  • H100, H200 и флагманский B200 — рендерят феноменально быстро (Inference всего 19–24 сек), но цена прыгает до 10–14 центов за запрос. При моем объеме переплата за вычислительную мощь не конвертируется в реальный UX-выигрыш — пользователь всё равно ждет почти 50 (!) секунд, чтобы поднять 30 ГБ весов с диска в VRAM. Холодный старт съедает почти весь смысл дорогих чипов.

  • Долгое время «золотой серединой» считал и использовал A100 80GB, но в последнем тесте она показала худший roundtrip (~130 секунд) за счет самых медленных дисков на её нодах.

  • А открытием стала RTX-PRO-6000. Она оказалась абсолютным победителем бенчмарка. За счет, я полагаю, более быстрых SSD на её нодах. Она заливает всю модель в VRAM всего за 30 секунд. Поэтому этот въезд полностью компенсирует её более медленный инференс (32 сек).

Вывод: Зависимость совершенно нелинейная. Платишь в 2 с лишним раза больше за флагманский B200 — а получаешь фото в итоге даже медленнее из-за I/O оверхеда на кластере.

Раньше один запрос (ретушь одного фото) обходился в 0.20$ (~18-20 рублей). Я ставил цель опустить косты до 10 рублей.
Переезд на RTX-PRO-6000 сбил цену генерации до 0.063$ (~6 рублей за фото!) при 75 секундах на холодный старт. Цель перевыполнена!

Напомню: Modal держит контейнер теплым 5 минут после последнего запроса (scale_down_window). Поэтому юзер, который сразу регенерирует неудачный результат, вообще не сталкивается с холодным стартом — модель уже в памяти, и ретушь занимает чистые 32 секунды. 


❯ Какие баги и костыли сделали этот сервис реальным

В теории все выглядело идеально: математика сошлась, инференс стал дешёвым, я выбрал оптимальную карточку и выдохнул. Проблема с железом была решена.

Правда, я забыл одну важную вещь: дешёвый инференс (=плохой инференс) имеет смысл только тогда, когда он работает. А работать он внезапно перестал. Как только в эту «идеальную» архитектуру пошли пользовательские сценарии, начался этап еще более диких костылей, багов и открытий

Добро пожаловать в мою личную бесовщину:)

Акт 1. Нейросети не потокобезопасны (и другие приколы AI)

Сначала я решил сэкономить и включил декоратор @modal.concurrent(). Идея простая: пусть один теплый контейнер обрабатывает несколько картинок параллельно. Сразу после этого логи засыпало дикими ошибками:

IndexError: index 41 is out of bounds for dimension 0 with size 41

Красивая ошибка, правда? Я перебирал кучу моделей, думая, что проблема в них. Оказалось, не в этом дело! Проблема была в пайплайнах diffusers: стейт планировщика (scheduler state) оказался не потокобезопасным. При конкурентных запросах разные потоки обращались к одним и тем же расчётным шагам, затирая чужие тензоры.

Решение: Одно запущенное GPU = строго одна картинка. Убрал конкурентность, пожертвовал временем простоя, зато всё перестало падать.

# Было (дешево, но падало из-за гонки стейтов в diffusers):
# @modal.concurrent()
# @modal.fastapi_endpoint(method="POST")

# Стало (дорого, работает как часы):
@modal.fastapi_endpoint(method="POST")
def edit_image(self, payload: dict):
  # строгая обработка 1 к 1

И в этот же момент я понял главную вещь про генерацию: промпт важнее смены модели. Качество скакнуло в разы, когда я добавил в системный промпт жёсткие ограничения:

«Must explicitly preserve exact room geometry... Do not ask for synthetic editorial glow, plastic textures, fake luxury. Only describe visible, necessary edits.»

С момента запрета моделям «фантазировать» и делать «дорого-богато», ретушь стала адекватной.

Акт 2. Инфраструктурный скотч

Когда ты собираешь проект из десятка разных cloud-сервисов, они начинают конфликтовать друг с другом.

  • Геоблокировка и Vercel-прокси. Мой основной бэкенд крутился на отечественном VPS. Modal с российских IP ожидаемо выдавал 403. Решение? Проксировать вызовы к Modal через Serverless-функции Vercel. Маршрут стал выглядеть так:
    Yokva → Vercel → Modal.
    Красиво? Нет, отвратительно. Работает? Да.

  • Авторизация FastAPI в Serverless. Я сделал базовую защиту эндпоинта GPU через стандартный fastapi.Request injection. Modal отвечал глухим 422 Unprocessable Entity. Выяснилось, что в его Serverless-контексте Request иногда интерпретируется как query-параметр. Пришлось выкинуть красивые заголовки и передавать bearer token прямо в теле JSON.
    Не гламурно, но зато надёжно.

Акт 3. Взросление: никогда не падать молча

Самый важный сдвиг произошел, когда я перестал думать как экспериментатор и начал думать о пользователях (и своих деньгах, разумеется).

  • Отвалился Redis? Живём дальше. Раньше смерть Redis (где лежал rate limiter) означала HTTP 500 для всех. Я переписал логику: если кэш недоступен, лимитер на лету переключается на in-memory. Да, при рестарте ноды лимиты сбросятся, но это лучше, чем мёртвый сервис.

  • LLM вернула мусор? Claude полюбил вместо красивого описания квартиры возвращать заглушки типа «desc», «test» или «n/a». Я собрал чёрный список таких слов. Если парсер ловит мусор — происходит автоматический retry с усиленным промптом.

    // Чёрный список того, что Claude любил отдавать вместо нормального текста:
    const INVALID_FILLER_VALUES = new Set(["head", "desc", "description", "test", "placeholder", "n/a", "", " "]);
    
    if (INVALID_FILLER_VALUES.has(rawHeadline.toLowerCase()) || rawHeadline.length < 5) {
      // Ловим мусор и отправляем на принудительный retry
      throw new Error("Claude returned an invalid headline placeholder");
    }
  • Сам себе DDoS-ер. React против Cloudflare. Смешной инцидент произошел с безобидной формой вейтлиста. Cloudflare вдруг начал блокировать легитимных юзеров, ругаясь на спам со стороны капчи Turnstile. Оказалось, виноват React 19. В режиме разработки Strict Mode он рендерит DOM-дерево компонентов дважды. Из-за этого двойного рендера фрейм Cloudflare пытался инициализироваться два раза подряд за миллисекунды. Ну а антифрод видел это и тут же банил, принимая этот двойной запрос за replay attack.

  • Модель упала? Возвращаем оригинал. Если Modal вернул ошибку, Yokva не показывает юзеру красный экран. Она тихо отдаёт оригинальное фото. Для пользователя лучше получить просто загруженную картинку, чем сломанный интерфейс.

  • Деньги за чужие баги. Самое главное продуктовое правило, которое я внедрил: если модель всё-таки сгенерировала откровенный мусор (или упала на полпути), скрипт автоматически делает refundCredits. Пользователь не должен платить за то, что у PyTorch’а съехали индексы. Теперь за это плачу я :)


Платить за баги нейросетей из своих карманных денег — это, конечно, отличная мотивация, чтобы повзрослеть))


❯ Как в этой истории появились гранты, Timeweb Cloud и взрослый слой проекта

К этому моменту Yokva существовала в странном режиме: тяжелый инференс на Modal, прокси через Vercel, а остальное — на моей локалке. Я хоть и держался тактики «0 бюджета», но проект начал из нее вырастать. Чтобы запустить все это в стабильное едино, мне нужен был мощный VPS. А мне 15 лет, и лишних бюджетов на сервера у меня, увы, нет. Спойлер: мне помогли ребята из Timeweb Cloud. Но давайте немного предыстории!

Конец февраля, еду по Москве в визовый центр, очереди, скукота. Достаю телефон и начинаю писать колд-мейлы. Тема везде не особо отличалась — «Грант для 15-летнего фаундера». Не стеснялся.

Объем рассылки :)
Объем рассылки :)
И еще)
И еще)

Первыми пошли крупнейшие российские хостеры. У некоторых есть даже нормальная грантовая система на сайте — но они просто не ответили :D

Потом написал в проптехи — поимённо вы их прекрасно знаете :) Логика простая: им выгодно чтобы объявления на их платформах выглядели лучше. Переправляли куда надо — и замолкали.

Пошёл дальше: AWS, Digital Ocean, fal.ai, RunPod + еще десяток.

Итог по большинству — тишина. RunPod молчит, зато исправно шлет корпоративный спам — спасибо, ценю. AWS отказали сразу. Cloudflare и Google сделали это официально: нет юрлица, на сайте нет четкой бизнес-модели (факт!), да и в целом письмо было в духе «мы рассмотрели вашу заявку и...» — дальше можно не читать.

Любезное письмо от гугла
Любезное письмо от гугла

Но в тот же февральский день мне позвонил Александр — технический специалист из Timeweb Cloud. Сказал: без ИП тяжело одобрить грант официально, но проект интересный, постарается что-то сделать. Передал в маркетинг.

Написала Роза. Предложила созвон.

Страшно ли было? Да. Это были первые переговоры в моей жизни с незнакомыми взрослыми людьми по делу. Людьми, которым в общем-то всё равно. Но я справился. На созвоне кратко объяснил суть проекта, обсудили, что нужно. GPU не дают, зато VPS — без проблем. Поговорили про стек, характеристики, S3. В тот же день мне выдали грант на 12 500 рублей.

Переписка
Переписка с Розой
Переписка с Розой
Ещё с Розой
Ещё с Розой
И с Александром
И с Александром

Так у Yokva появился нормальный дом и возможность развернуться. Но наглость в визовом центре окупилась каскадом ответов и от других ребят. Оказалось, что иногда искренность работает лучше бизнес-планов:

PostHog — утром того же дня, еще до всех звонков, пришло письмо: одобрили 50 000$. Подавал через их грантовую платформу, стандартная форма. Через неё же дали доступ к Chroma — ещё 5 000$.

Скрины
Письмо
Письмо
Баланс
Баланс
Письмо от chroma
Письмо от chroma

Perplexity — насыпали 5 000$ на API и 6 месяцев Enterprise Pro. Письмо: «Congrats, You're In». Весьма лаконично!

Скрин
Письмо
Письмо

Kodik (российская AI IDE, есть на Хабре. привет!) — написал им, что пилю стартап в одиночку и иногда нуждаюсь в баг-фиксе. Ответили в тот же день: «Ты даже не представляешь, как наша команда обрадовалась твоему письму». Дали Super PRO, пригласили в QA, зарядили позитивом) В стопорных ситуациях не раз выручало!

Снова скрин
Письмецо
Письмецо

Modal — насыпали 500$ и открыли доступ к GPU с посекундной оплатой (про них я уже подробно расписывал в техническом блоке выше, но именно их грант позволил запустить первые тесты нейросетей).

И опять господин-скрин!
Письмо
Письмо

В итоге, пока я скучал в очереди за визой, проект на коленке приобрел инфраструктурных грантов на 60 000$+

Неплохая конверсия для одного весьма скучного утра)

Но знаете что? Гранты — это лишь возможность не платить за свои ошибки из кармана. Они не собирают за меня продукт! Но именно эта беготня по письмам и созвонам сделала проект реальным. Yokva повзрослела тогда, когда я впервые начал думать о железе, деньгах и людях. Без такого опыта, возможно, это был бы просто очередной пет, который никогда бы не вышел за пределы моих слов.


❯ Что у меня в итоге получилось, что не получилось и зачем я вообще всё это пишу

Я начинал с простой идеи: «загрузил фото — получил красивый креатив». А пришёл к очередям задач, GPU-инстансам, геоблокировкам, грантам, фоллбэкам, стоимости инференса и необходимости держать весь этот парк в рабочем состоянии. Yokva превратилась в большой, для меня, проект

И, наверно, в этом для меня главный смысл всей истории. Я не «собрал стартап» в красивом, может, твиттерском смысле. Я уткнулся в реальность, а теперь по кускам учусь делать сервис!

Акт 1. Столкновение с реальностью

Выход в реальный мир оказался отрезвляющим.

Ожидание: Акселераторы и менторы. Я нашел школьный акселератор Сбера. Зарегистрировался, смотрел уроки, где люди в основном читают (откровенно плохо!) банальности с суфлера. 

Но акселераторы нужны не ради лекций. Загрузил питч-дек до 23 марта (то есть заявки они принимали с февраля по март) и стал ждать обещанных крутых менторов.

Питч-дек
Питч-дек

Прошел месяц. Тишина. На сайте статус не меняется. Я уже мысленно похоронил эту идею, как вдруг 22 апреля мне в Telegram приходит сообщение: «Вы прошли!».

Сообщение
Сообщение

Оказалось, это какой-то мифический второй поток, программа теперь длится 10 недель вместо 8 (на сайте об этом ни слова), а в общем чате царит кромешный хаос.

НО! Спустя пару дней мне написал Константин, позвал на созвон о проекте. Я, конечно же, согласился. Меня, признаюсь, впечатлили циферки)). 

Сообщение от ментора
Сообщение от ментора

Теперь мы будем выстраивать продажи вместе, и это настоящее спасение.

И мой ответ
И мой ответ

Почему спасение? Потому что до этого я уже столкнулся с реальностью ручных продаж.

Реальность: Ручные продажи. Бизнес за меня никто не сделает, потому я пошел в поля. Открывал Авито, находил объявления с непривлекательными фотографиями, прогонял первый кадр через свое детище и отписывал авторам напрямую. Предлагал обработать остальные фото бесплатно в обмен на фидбек.

Пример сообщения
Пример сообщения

Некоторые отвечали, результат им нравился. Но буду честен: до нормальных метрик и замеров кликабельности дело так и не дошло. Параллельно на меня навалилась школа, дедлайны и банальная усталость. Делать холодный аутрич руками в соло оказалось слишком тяжело, измеряемая воронка не выстроилась, и эта инициатива тихо заглохла. 

И вот как раз в этот момент появился Константин, который явно зарядил меня на новые попытки. Пляска продолжается!

Акт 2. Итоговый срез

Чтобы быть до конца честным, я разделил итоги на то, что реально работает, и то, где мы ещё в начале пути:

Что получилось

Что пока нет

Собрать стабильную систему, которая выдерживает очереди и не разоряет меня счетами за GPU

Качество ретуши ещё не везде ровное и предсказуемое

Понять, что даже сырой продукт вызывает интерес у реальных людей

Продукт ещё не стал бесшовным (нажал и забыл)

Выстроить инфраструктурный контур и договориться о грантах на 60 000$+

А главное — я еще ничего не продал!

Вот так страница результатов выглядит сейчас. Это уже можно трогать руками и использовать, но, как видно из таблицы, работы впереди еще много

Акт 3. Что дальше?

Yokva уж точно не закрывается. У меня в голове (да, пока так) лежат идеи обновления и стратегия перехода на уровень нормального инструмента:

  • Продукт: Реализовать главную затею генератора готовых рекламных карточек, только для недвижимости

  • Маркетинг: Буду продолжать записывать рилсы, писать, да и как-то о себе заявлять :)

  • Партнерства: Я всё еще жду ответа от больших игроков. Если не через повторные письма, то, может, через эту статью

Планы конечно грандиозные, путь — еще больше. Уж не знаю сколько на это времени уйдет, но скучно точно не будет!))


Акт 4. Зачем я это написал?

Иногда проскакивает мысль: «А может, зря всё это?». Но я принципиально тащу проект в соло, потому что пока не готов отказаться от этих дофаминовых горок

Я написал эту статью, чтобы выйти из вакуума (я делал это ранее на реддите, но меня заблокировали). Я хочу познакомить проект с людьми:

  • Если вы риелтор, стейджер или лендлорд: заходите на yokva.com. Регистрируйтесь, пробуйте. Пишите — отсыплю побольше кредитов в обмен на честный фидбек.

  • Если вы инженер или фаундер: добро в комментарии. Буду рад, если вы разнесете мою реализацию по фактам, укажете, где я думаю не туда, или просто поделитесь своим опытом.

  • А если вы критик: то точно велком аборд! Покопаемся в идее вместе)

Давайте поговорим!


Новости, обзоры продуктов и конкурсы от команды Timeweb.Cloud — в нашем Telegram-канале 

Перейти ↩

Комментарии (49)


  1. julia_963
    21.05.2026 10:35

    Как? такие люди существуют?От куда такие познания в 15 лет? Ты бенджамин баттон? я в 15 лет с мамой за ручку в школу ходила. Молодец!


    1. gornman Автор
      21.05.2026 10:35

      спасибо!! существуют))
      нет, просто 3-4 года саморазвития и практики. начиналось с дизайна, потом питончик, потом веб, потом даже в пентест лез. на время перегорел. а с недавних пор комбинирую все вместе, и вот - Yokva. для меня это огромный путь, просто он начался рано)


      1. vital_pavlenko
        21.05.2026 10:35

        Спидран жизни айтишника. В 12 начал прогать, в 15 выгорел


      1. Crusader_12
        21.05.2026 10:35

        "начиналось с дизайна" вот видимо все кроме дизайна зашло судя по сайту)) . Не умаляю нисколько все остальные успехи, но дизайн на сайте вырвиглаз. Продукт надо упаковывать красиво тем более если он хороший, а тут зашел и сразу глаз дергаться начал)). Успехов молодому дарованию и не выгореть.


        1. gornman Автор
          21.05.2026 10:35

          справедливо! это пока не финальная версия - в процессе, запускаю чтобы, в большей степени, проверить гипотезу, а не показать дизайн (но это тоже важно)
          но раз уж зашёл и нассмотренный глаз дернулся - подскажи конкретнее, а от чего?

          спасибо!


      1. opensophy
        21.05.2026 10:35

        Автор, горжусь вами! У меня почти похожая история(буквально тоже начинал с дизайна, потом веб и теперь devsecops изучаю.) Буду рад если совместно в будущем что-нибудь сделаем :)


  1. schekinfs
    21.05.2026 10:35

    Папа или брат тоже молодцы (не сарказм). И ты молодец!


    1. gornman Автор
      21.05.2026 10:35

      спасибо! так оно и есть, без наставления на путь от родных, без их поддержки явно ничего подобного не вышло!)


  1. Terverus
    21.05.2026 10:35

    Реально откуда такие познания?

    Кто твои родители? Ты с ними на этом же языке общаешься с английскими словами вперемешку?

    Откуда столько непонятных англицизмов вроде «аутрич»? Опять же, с кем ты привык так постоянно общаться к 15 годам?

    Зачем тебе московские гранты, если ты уже лыжи намылил, визы получаешь, чтобы свалить?


    1. unkas42
      21.05.2026 10:35

      +100500, "какие слоты по времени свободны?" ))


      1. gornman Автор
        21.05.2026 10:35

        да это ж некая формальность - научился от созвонов с Timeweb)


    1. gornman Автор
      21.05.2026 10:35

      познания - 3-4 года самообразования и практики, уже отвечал чуть выше)) начал рано :)

      мои родители - прекрасные люди, которые всегда поддерживали - без них точно никуда. хоть они и не из it-сферы)

      про англицизмы: “аутрич” - это ж профессионализм, как ещё это назвать? “холодное общение с потенциальными клиентами”?)) не фасон! на то он и лексикон - приходит сам, когда долго общаешься, читаешь статьи, книги, доки и ветки)

      про визу и гранты: виза для отдыха, не для эмиграции (пока!). а чтобы когти рвать нужен капитал (и материальный, и ментальный), который я набираю. гранты, в свою очередь, - это такой инструмент, который помогает двигаться вперёд здесь и сейчас.
      плюс у меня ещё минимум 2 школьных года впереди, бежать рановато (а планировать нет)


      1. kukovik
        21.05.2026 10:35

        Холодные звонки?


        1. gornman Автор
          21.05.2026 10:35

          как вариант, в случае со звонками)


  1. supercargo
    21.05.2026 10:35

    кто красавчик? ты красавчик!)


    1. gornman Автор
      21.05.2026 10:35

      спасибо, приятно!)


  1. Dyldin
    21.05.2026 10:35

    На хабр поколение альфа подвезли? настолько все хорошо у вас схвачено уже в 15... страшно и радостно


    1. gornman Автор
      21.05.2026 10:35

      получается так)) спасибо! хотя местами бывает не всё так красиво - но с чего-то начинать надо!


  1. velften
    21.05.2026 10:35

    ты оч толковый тип, респект! невероятно зрелый подход.


    1. gornman Автор
      21.05.2026 10:35

      благодарю!)


  1. VadimProfii
    21.05.2026 10:35

    Не нашел примеров до и после. Непонятно, как домысливаются участки фото, обрезанные при выпрямлении вертикалей/горизонталей. Падение освещенности объекта с расстоянием компенсируется как? Учет сдвига цветовой температуры тоже есть? Падение разрешения по углам учитывается? Прошу пояснений.


    1. gornman Автор
      21.05.2026 10:35

      пример до/после есть в статье - висит сразу после схемы пайплайна, до раздела про GPU, могли пропустить :)

      по вопросам:

      домысливание обрезанных участков - inpainting на стороне FireRed. Модель восстанавливает края на основе контекста сцены.

      освещённость и цветовая температура - тоже на стороне модели, но не вслепую, fix_prompt собирается, с учётом выбранного стиля (чистый / яркий / премиум), а модель адаптирует баланс под него

      физически точной коррекции по расстоянию нет - это осознаннный компромисс сейчас

      падение разрешения по углам - если имеете в виду аберрации и потерю резкости по краям, то частично, в промпт передаются параметры подходящего фокусного расстояния объектива, модель это учитывает при обработке, но с этим управляться труднее. но если речь про оптическую модель - её нет, все работает сугубо через описание

      и в целом, Yokva не симулирует физику, как вы это описали. она работает с восприятием. это разные задачи


  1. alexhu
    21.05.2026 10:35

    Мне не верится, что это написано 15 летним подростком - не та лексика, не тот словарный запас - вообще слова не из этого возраста, слишком устойчивые обороты, не та тональность, не понятно откуда взялся опыт из риелтерского быта.

    Пожалуйста потом не пишите, что опять над нами провели очередной эксперимент и эксперимент имеет важную исследовательскую роль.

    В код я поверю - нейронки уже неплохо пишут код, а в статью - нет.


    1. nsvk13
      21.05.2026 10:35

      дефотный сноб который к своим 30 так и не смог чего-то добиться. парень объективно огромный молодец, респект ему, что направил свою энергию в нужню русло - в учёбу, и каков результат!


    1. gornman Автор
      21.05.2026 10:35

      понимаю скептицизм)

      могу предложить одно: задайте любой вопрос по стеку или архитектуре и я отвечу. статью писал сам, редакторы Timeweb помогли причесать текст. обычная практика в подобном)

      лексикон приходит с опытом и путём, а путь его в себя включает.

      а про быт, про какой опыт вы говорите?)) я, как упомянул в статье, начал с того, что попал на съёмку квартиры тёти, там увидел изнутри почти весь процесс. нетрудно было догадаться, почему неопрятные фото снижают кликабельность. потом начал исследовать самостоятельно - вот так и погрузился

      с кодом согласен частично. вёрстку, небольшие функции, багфикс делегирую нейронкам. но бизнес-логику, работу с GPU, очередями, внутренними моделями - нет, не получилось( специфичный контекст, и объяснять его клауду вышло дольше, чем написать самому. поэтому выходит только ассистирование


    1. Verona90210
      21.05.2026 10:35

      Если три года вместо доты читать доки к апишкам, стэковерфлоу и твиттер фаундеров, этот корпоративный новояз сам впитывается))


  1. takezi
    21.05.2026 10:35

    Стоковый рендер который искусственно испортили, а потом героически победили, как-то слабо знакомит с возможностями сервиса. Реальных кейсов добавьте.


    1. gornman Автор
      21.05.2026 10:35

      справедливо, выбрал не самый показательный пример. в процессе наполню реальными кейсами. спасибо!


  1. IsUnavailable
    21.05.2026 10:35

    Как человек который плотно зависает на площадках продаж квартир последние полгода скажу, что проблема чаще всего таки не в том как снято, а в том что снято)

    ИИ фотки кстати попадались пару раз. В одном случае это была конкретная ложь, во втором случае - вот та идея, что и у тебя, улучшить фотки, убрать визуальный мусор. Но ИИ палилась очень жёстко и выглядело это для меня отталкивающе.

    Сайт попробовал, залил две фотки и в результате мне показываются те же две фотки без изменений. Выглядит как баг на самом деле т.к. при зажатии лкм моргает белый переход (не выглядит, что так задумано).

    Правда и кредиты не потратились, что подозрительно)


    1. zagooor
      21.05.2026 10:35

      В статье же описано, если модель падает — возвращает те же фотки, и не тратит баланс


      1. IsUnavailable
        21.05.2026 10:35

        Пропустил этот момент

        Ну, неплохо было бы об этом сообщить пользователю)

        И видимо я нашёл такие фотографии на которых модель стабильно падает)


    1. gornman Автор
      21.05.2026 10:35

      спасибо за развёрнутый ответ

      особенно про "что снято", это честно и важно. контент решает больше, тут согласен. поэтому я создаю Yokva с упором на то, чтобы вытащить максимум из того что есть, но не заменить нормальную съёмку. и не придумывать несуществующие детали)

      с багом разберусь, неотъемлемая часть ранней стадии сервиса) если не сложно - напиши в личку. помогло бы откопать причину)
      про кредиты zagooor верно написал: если модель падает, баланс не списывается.


  1. JediPhilosopher
    21.05.2026 10:35

    На фото "до" и "после" разный ракурс, и в том числе разные детали. Например, на фото "после" появился кондиционер на стене. Это фантазия нейросети? Если да, то сервис будет прямо вводить пользователей в заблуждение и устраивать конфликты.

    Я например реально высматриваю на фото (в жарких регионах) кондиционер, мне важно чтобы он был и важно где именно он висит и куда дует. Из текста объявления это часто вообще не понятно, приходится искать на фото. И вот тут мне, как потенциальному арендатору, только ИИ-галлюцинаций в фотографиях не хватало.


    1. Vsevo10d
      21.05.2026 10:35

      Кондей там в зеркале отражается, так что он есть. Другое дело что оба фото решают задачу одинаково: видна комната с огромным количеством цыганской мебели, только одно фото с электрическим освещением, другое с дневным.

      Мне лично неясно, как сервис конвертирует себя в деньги. Потому что если санузел на фотках сверкает, а в реальности он обдрищенный, я на живом показе это увижу и просто потеряю время с тем же риэлтором на пару.


    1. Verona90210
      21.05.2026 10:35

      Ждем историю, как арендатор подаст в суд на владельца, потому что нейронка нарисовала стиралку бош вместо убитого индезита :)))


  1. sergey1998
    21.05.2026 10:35

    Идея крутая и полезная, бабушатники будут разлетаться как горячие пирожки, а ты забираешь свой процент


    1. Vsevo10d
      21.05.2026 10:35

      бабушатники

      Все жду, когда пройдёт достаточно лет, и над вами уже какое-то поколение гамма будет так же глумиться, "денег мало, снял зумерятник, опять там стеллажи с аниме-фигурками в которые ни разу не играли, постеры на стенах и Алиса в каждой комнате".


  1. Crusader_12
    21.05.2026 10:35

    Еще одна мысль, если это реально не очередная стебная статья про успешный успех Шелодна Купера нашего разлива, то я бы посоветовал больше консультироваться с родителями по вопросам коммерции чем со всякими назначенными консультантами , жизненный опыт подсказывает что к таким гениям быстро прилипают ушлые личности которые потом присваивают себе все заслуги и доходы.


    1. Verona90210
      21.05.2026 10:35

      Родители могут дать безопасный совет, но они вряд ли шарят в юнит-экономике SaaS и B2B-продажах, тут нужен толковый юрист для проверки договоров, а не родительский контроль


  1. Nexoic
    21.05.2026 10:35

    Маркетинг таймвеб выходит на новый уровень )))


  1. 0ch00mexe
    21.05.2026 10:35

    Молодец!
    Зря первую эту фотку откинул - я бы точно такую квартиру снял ))


  1. KapasMordorov
    21.05.2026 10:35

    Письмо от google 6 марта, но во входящих нет писем между 5 и 9 марта.


    1. gornman Автор
      21.05.2026 10:35

      входящие были отфильтрованы, гугл туда не попал :D


  1. chafirchik
    21.05.2026 10:35

    Великолепная задумка, реализация и не менее великолепная статья! Очень греет душу, что есть такие молодые перспективные ребята, как Вы. Успехов в развитии проекта!


  1. greenglaz
    21.05.2026 10:35

    Уровень доверия статье целиком - 1%


  1. Gonchar_POTT
    21.05.2026 10:35

    У этих же ребят была статья про бота, который голосом общался от имени дедушки с телефонными мошенниками?


    1. Shyhartskoi
      21.05.2026 10:35

  1. Verona90210
    21.05.2026 10:35

    Суть стартапа: помочь риелторам еще эффективнее врать потенциальным арендаторам о состоянии убитых хрущевок

    Технический стек собран прикольно, но сама бизнес-модель - генерация завышенных ожиданий


  1. Dima_gangsta
    21.05.2026 10:35

    Блин, крутяк вообще! Идея класс и должна хорошо масштабироваться. Желаю успеха!