Реклама. Рекламодатель: ООО «ЭКСПОНЕНТУМ», ИНН 9717190256. erid: CQH36pWzJqVHynd1MFNuJxcUnMMRBh9N2wSYuF7ME5EBxh
В первых двух частях мы дошли до приятной точки: у «Экспонентума» появились ИНН, расчётный счёт и нормальная юридическая оболочка. Казалось бы, дальше самое логичное – выдохнуть и спокойно заниматься продуктами.
Но именно после регистрации внезапно выяснилось: открыть ООО – это не финал, а момент, когда компания начинает задавать вам вопросы.
Где трудовые договоры? Кто у вас сотрудники? Как начисляется зарплата? Что с НДФЛ? Какие персональные данные вы собираете? Подали ли уведомление в Роскомнадзор? А если в посте есть ссылки на коммерческие продукты – что с рекламной маркировкой и erid?
Чтобы было понятно, ради чего мы вообще полезли во всю эту административную историю, вот три ссылки, которые лучше открыть до чтения:
На первый взгляд это просто сайт компании и два продукта. Но для юридического лица это уже не «просто сайты». Это пользователи, персональные данные, платежи, договоры, реклама, налоги и ответственность.
Самый неприятный вывод третьей части такой: регистрация ООО была не самым сложным этапом. Сложнее оказалось не открыть компанию, а начать жить с ней нормально: оформить людей, не забыть про налоги, описать персональные данные, разобраться с Роскомнадзором и не превратить обычную публикацию со ссылкой в нелегальную рекламу (да-да, поэтому даже в этом посте вы видите маркировку).
Эта часть – про то, что начинается после письма «компания зарегистрирована». Без страшилок, но честно: кадровые документы, зарплата, АУСН, персональные данные, Роскомнадзор, рекламная маркировка и erid. То самое, что редко попадает в красивые истории про запуск IT-продуктов, но почти сразу появляется в реальной жизни маленькой компании.
Лист записи ЕГРЮЛ – не конец бумажной работы
Когда получаешь подтверждение регистрации, есть соблазн воспринимать это как завершение задачи. Мы открыли ООО. Всё, можно заниматься продуктами.
Но ООО – это не только лист записи в ЕГРЮЛ. Это работодатель, налогоплательщик, оператор персональных данных, сторона договоров, получатель платежей, рекламодатель, владелец продуктов, участник документооборота.
И если делать всё по закону и нормально, а мы именно так и хотим, у компании почти сразу появляется внушительный список организационных задач.
Самое неприятное в этом списке не то, что каждая задача слишком сложная. Нет. Неприятно то, что их много, и значительная часть из них не имеет прямого отношения к продукту. Пользователь не видит, как вы оформили штатное расписание, как подали уведомление по персональным данным или как получили erid. Но если этого не сделать, продуктовая история быстро упирается в юридическую и операционную.
Кадровые документы: даже если пока все сотрудники = соучредители
Первый слой – кадровый учёт.
На бытовом уровне кажется странным: мы партнёры, совладельцы, сами всё делаем, какие ещё трудовые договоры? Но если человек работает в компании как сотрудник, получает зарплату и занимает должность, отношения нужно оформлять нормально. Доля в обществе не заменяет трудовой договор.
Поэтому после регистрации пришлось переходить от логики «мы вдвоём делаем продукты» к логике «у компании есть работники, должности, обязанности и документы».
Минимальный набор быстро становится не таким уж минимальным:
трудовой договор с генеральным директором;
трудовой договор со вторым участником, если он работает в компании как сотрудник;
решение или протокол о назначении руководителя (в нашем случае — протокол общего собрания);
приказы о приёме на работу;
штатное расписание;
должностные инструкции;
правила внутреннего трудового распорядка, если компания не использует упрощённый комплект локальных актов для микропредприятия;
положение об оплате труда или другой документ, который описывает, как начисляется зарплата;
документы по обработке персональных данных работников;
заявления, согласия и уведомления, связанные с кадровым учётом.
Часть документов можно сделать компактными; с разработкой их текста во многом помогают нейросети (да, это сэкономило нам десятки трудочасов). Часть зависит от конкретной модели работы. Но общее ощущение одно: если делать правильно, «маленькая компания из двух человек» всё равно не существует в режиме полного отсутствия кадровых документов.
И это нормальная плата за работу в юридическом поле. Не самая приятная, но понятная.
Зарплата и налоги: простая система не отменяет дисциплину
Второй слой – зарплата и налоги.
Мы выбрали АУСН «Доходы», потому что для нашего старта это самый простой и расчётно выгодный вариант. Но слово «простой» здесь нельзя понимать как «можно ничего не контролировать».
Если компания платит зарплату, нужно вовремя считать выплаты, подавать уведомления и перечислять НДФЛ, корректно отражать операции в банке и учёте. Даже на автоматизированном режиме часть дисциплины никуда не исчезает.
Отдельный нюанс – страховые взносы. В обычной логике работодатель сразу думает о взносах с зарплаты. На АУСН стандартная нагрузка по страховым взносам устроена иначе: режим освобождает от обычных страховых взносов, но остаётся фиксированный платёж на страхование от несчастных случаев и профессиональных заболеваний. По состоянию на 2026 год это 2 959 рублей в год (за всех сотрудников). Поэтому фраза «платить страховые взносы» для АУСН требует уточнения: речь не о привычной полной конструкции, а о специальном режиме со своими правилами.
И ещё один важный момент: простая система отчётности не отменяет бухгалтерского порядка внутри компании. Деньги должны быть разложены по назначению. Зарплата – отдельно. Налоги – отдельно. Комиссии – отдельно. Доходы от подписок – отдельно. Проценты по депозитам – отдельно.
АУСН «Доходы»: где спрятаны нюансы
АУСН «Доходы» выглядит очень привлекательно: ставка 8%, автоматизация, минимум отчётности, налог считает налоговая на основании данных банков, касс и личного кабинета.
Но чем проще режим, тем важнее понимать его границы.
Например, выручка от подписок – это доход. Если пользователь заплатил за доступ, а банк удержал комиссию за платёж, это не значит, что налоговая логика автоматически смотрит только на чистый остаток после комиссии. Для объекта «Доходы» принципиально важно, что именно признаётся доходом.
Другой пример – проценты по депозитам. Для маленькой компании они могут выглядеть как техническая мелочь: ну лежат деньги на счёте или депозите, банк начислил проценты. Но для налоговой модели это тоже поступление, то есть доход, который нужно учитывать.
Именно поэтому наша финансовая модель оказалась полезной не только до регистрации, но и после. Она заставляет смотреть не на «кажется, будет выгодно», а на конкретные финансовые потоки: сколько пришло, откуда пришло, какая комиссия, какой налог, какой остаток, на что хватит денег и где начинаются риски.
Персональные данные и Роскомнадзор
Третий слой – персональные данные.
Когда компания начинает работать, она почти неизбежно обрабатывает персональные данные. Даже если не брать пользователей продуктов, уже есть кадровый учёт: паспортные данные работников, СНИЛС, ИНН, адреса, банковские реквизиты, сведения о зарплате.
А если есть цифровые продукты, появляются пользователи: имена, электронная почта, данные аккаунтов, технические идентификаторы, обращения в поддержку. Это уже не абстрактная «конфиденциальность», а конкретная обязанность оператора персональных данных.
Поэтому нужно не просто разместить на сайте красивую политику обработки персональных данных. Нужно разобраться, какие данные обрабатываются, для каких целей, на каком основании, где хранятся базы, кто имеет доступ, какие меры защиты применяются и кто отвечает за организацию обработки.
Отдельная задача – уведомление Роскомнадзора о начале обработки персональных данных. Процесс выглядит примерно так: заходишь на портал персональных данных, выбираешь электронную форму уведомления, указываешь сведения об операторе, цели обработки, категории персональных данных, категории субъектов, правовые основания, меры защиты, место нахождения баз данных, дату начала обработки и ответственного за организацию обработки. Дальше уведомление можно направить в электронном виде или подготовить для подачи в бумажном виде (но, конечно же, проще первое).
Здесь снова нет героизма. Есть аккуратность. Нужно не скопировать чужой шаблон, а честно описать свою ситуацию. Потому что у IT-продукта, кадрового учёта и рассылки пользователям разные цели обработки и разные наборы данных.
Реклама и erid
Четвёртый слой, который легко забыть – реклама.
Когда пишешь на Пикабу историю об открытии компании, граница между личным опытом, информационным постом и продвижением собственных продуктов может быть неочевидной. Но если публикация привлекает внимание к коммерческому продукту, тарифам, подпискам или услугам, безопаснее заранее относиться к ней как к рекламной или как минимум проверять этот вопрос до публикации.
Для рекламных размещений в интернете сейчас нужна маркировка. На практике это означает, что до публикации нужно получить идентификатор рекламы – erid. Обычно это делается через оператора рекламных данных: создаётся рекламный материал, указываются данные рекламодателя, площадки, договора или иного основания размещения, после чего материал получает токен. Этот токен нужно разместить в публикации: чаще всего в ссылке, иногда отдельной строкой или в другом допустимом формате.
Помимо erid, у рекламной публикации должна быть понятная пометка «Реклама» и сведения о рекламодателе. Если мы пишем про собственные продукты «Экспонентума», рекламодателем выступает наша компания, а значит, нужно указывать юридическое лицо и идентификационные данные в том объёме, который требуется для корректной маркировки.
После размещения история тоже не заканчивается. Данные о рекламе передаются в единый реестр интернет-рекламы через оператора рекламных данных, а по итогам размещения может потребоваться передача отчётных сведений. То есть erid – это не просто набор символов, который вставили в конец поста. Это часть процесса учёта рекламы.
И да, для маленькой компании это выглядит непропорционально сложно. Хочется просто написать текст, показать продукт и пойти дальше. Но если продукт коммерческий, а площадка публичная, приходится учитывать и этот слой.
Почему всё это не главное, но без этого нельзя
Самое забавное во всей этой административной работе то, что она почти не приближает продукт к пользователю напрямую.
Штатное расписание не делает интерфейс удобнее. Уведомление в Роскомнадзор не ускоряет сервис. erid не улучшает тарифную модель. Бухгалтерские настройки не добавляют полезную функцию. Кадровые документы не повышают конверсию.
Но без всего этого продукту сложно стать бизнесом.
Можно долго жить в режиме разработки: сделали функцию, поправили баг, обсудили гипотезу, показали знакомым. Это важная часть пути. Но когда появляются деньги, пользователи, договоры, персональные данные, реклама и сотрудники, начинается другая реальность. В ней недостаточно, чтобы продукт работал технически. Нужно, чтобы компания вокруг него работала юридически и операционно.
И вот это, пожалуй, главный вывод после открытия ООО «Экспонентум»: регистрация компании – не самый сложный этап. Сложнее выстроить спокойную, аккуратную систему работы после регистрации.
Впереди длинный путь
Сейчас у нас есть юридическая форма, первые продукты, рабочая финансовая модель, расчётный счёт, понимание списка административных задач, которые нужно держать в порядке.
Но всё это только организационная сторона вопроса.
Главное впереди: сделать продукты коммерчески успешными. Найти пользователей. Понять, что им действительно нужно. Улучшать «ДомоГраф», развивать «Товарищ темп», проверять новые идеи, строить финансовую модель уже не только для себя, но и как потенциальный продукт для других команд.
ООО не гарантирует успех. Оно просто создаёт рамку, в которой успех можно попытаться построить нормально: с документами, договорённостями, деньгами, налогами и ответственностью.
Открытие компании оказалось не приключением, а цепочкой конкретных решений. Где-то скучных, где-то неожиданных, где-то утомительных. Но в целом вполне решаемых, если не пытаться сделать вид, что бюрократическая часть не существует.
Начало положено. Дальше – длинный путь, продукты, пользователи и коммерческая проверка всей этой конструкции. Но это уже отдельная большая история.
Реклама. Рекламодатель: ООО «Экспонентум», ИНН 97117190256. erid: CQH36pWzJqVHynd1MFNuJxcUnMMRBh9N2wSYuF7ME5EBxh
🗣 Нейросеть Алиса AI проанализировала всю историю Startup Village и сказала:
💬 Если раньше технофестиваль был площадкой для историй о гениальных стартаперах и поиска «единорогов», то теперь он стал прикладным полигоном для корпораций и государства.
❗️На сцену выходят не одиночки с идеей, а крупный бизнес с конкретным технологическим запросом, государство — ключевой заказчик.
💬 ИИ стал единственной темой, которая прошла путь от узкого интереса хобби-программистов в 2013 году до универсального сквозного тренда.
❗️Теперь это уже не тема отдельной сессии, а базовая опора для всех отраслей — от диагностики в биомедицине до управления БПЛА и генерации контента.
🤖 P.S. Алиса AI, конечно, старалась, но мы все равно советуем: доверяй, но проверяй. Приходите на технофестиваль 28–29 мая и сделайте собственные выводы — вдруг ИИ что-то упустил.
Организатор — Сколково, соорганизаторы — Правительство Москвы и ВЭБ.РФ.
В прошлой части я остановился на том, что мы попробовали мерить совместимость по реакциям на мемы тремя ручными способами и каждый раз упирались в одно: юмор это не про категорию мема, а про то, как именно в нём смешно.
В академической психологии есть тесты на юмор - тот же Humor Styles Questionnaire Мартина, и ещё штук пять-семь подобных. Все они меряют само-описание (отвечаешь, какие виды юмора тебе ближе). Это нормально работает в исследовании, но не работает в продукте: если ты на дейтинг-сайте спросишь "какой у тебя юмор", человек выберет вариант, который звучит выгоднее. Поэтому нам нужно было мерить реакцию, а не самоописание.
Версия 4. Эмбеддинги.
Эмбеддинги это когда нейронка превращает любой объект (картинку, текст, мем целиком) в набор чисел. Вектор. У схожих объектов вектора близкие. Сравниваем два вектора через косинусное расстояние, получаем число от -1 до 1.
Логика была такая. Каждому мему - свой вектор. Юзер лайкает мемы - собираем для него профиль из векторов лайкнутого. Два юзера сравниваем по их профилям. Чем ближе - тем выше совместимость по юмору. Бонусом выкидываем ручную разметку категорий, нейронка сама разделяет мемы по сути.
Заодно мы поменяли формат продукта. Статичный тест из 50 мемов это слабая механика - человек устаёт и быстро уходит. С эмбеддингами можно собрать адаптивную ленту: показывать мемы, близкие к тому, что юзеру нравится, профиль уточняется на ходу. Стало гораздо приятнее в использовании.
Версия 5. Эмбеддинги + текстовое описание сути мема.
В какой-то момент пришла странная на вид идея. Нейронка не "понимает" смысл юмора напрямую через картинку. Но если попросить её этот смысл проговаривать словами, она это делает довольно прилично.
Для каждого мема в базе мы стали генерировать описание. Не "кот в офисе". А несколько строк примерно такого вида:
Мем построен на контрасте между серьёзным офисным антуражем и нелепым выражением морды кота. Считывается как сатира на корпоративную депрессию миллениалов. Юмор работает через узнавание собственного состояния. Подтекст - усталость от рутины и невозможность изменить ситуацию. Тип юмора - самоироничный с лёгкой меланхолией.
И так по каждому мему. Сначала это звучало странно (заставлять модель писать литературный анализ мемов про котов), но именно это и сработало.
После этого у каждого мема в базе появилось два слоя:
Визуальный эмбеддинг (как в версии 4) - для базовой геометрии
Текстовое описание - его мы тоже превращаем в эмбеддинг, но это уже не вектор картинки, а вектор сути юмора
Совместимость двух юзеров теперь считается не по одному измерению, а по нескольким сразу. И вот тут наконец стало похоже на правду.
Конкретный пример. Допустим, у двух человек в лайках одинаковая доля мемов "про работу". В версии 4 они были бы засчитаны как близкие по этому слою. В версии 5 алгоритм видит, что у одного "мемы про работу" - это весёлый абсурд про неадекватного босса, а у другого - тоскливая ирония про burnout. Это разный тип юмора, и совместимость по нему уже не 95%, а гораздо аккуратнее.
Из этой архитектуры выросло то, что в приложении сейчас:
Адаптивная лента мемов
В профиле юзера хранится его вектор юмора (грубо говоря, юморный отпечаток)
Совместимость считается через близость и сонаправленность векторов
Чем дольше человек скроллит, тем точнее профиль
Тут начинается третья часть - про то, как из этого алгоритма выросло дейтинг-приложение и где продукт сейчас.
Чистые эмбеддинги мультимодальных моделей плохо работают на задачах, где важна семантика поверх формы. LLM-сгенерированное описание объекта поверх эмбеддинга часто даёт ощутимый прирост качества при минимальных затратах на инфраструктуру. У нас прирост по нашей внутренней метрике совместимости был заметный, но цифрами поделюсь, когда у меня самого до них дойдут руки и я буду уверен, что они стабильные, а не на маленькой выборке.
Сидим с другом в кафе, болтаем за всякое. У нас такой спорт - идеи, проекты, философия, чай стынет, мир сложный, мы умные. И в какой-то момент разговор сворачивает на людей, взаимоотношения. Я говорю: слушай, для меня в человеке важно чувство юмора. Не "адекватность", не общие интересы, не бэкграунд - именно юмор. И вот почему.
Человек, у которого с юмором ок, обычно умеет найти язык с кем угодно. Юмор это переходник, реально универсальная розетка. С шуткой любая жизненная ситуация, по моему мнению, переживается легче. Это даже физиология, не литература. Любая нормальная шутка работает минимум на двух уровнях. Кто видит второй слой, тот в среднем умнее тех, кто не видит. Не панацея, конечно, но корреляция есть.
А самое крутое - самоирония. Если человек умеет посмеяться над собой, у него в порядке голова. Эго не разваливается от подкола. Мозгов хватает увидеть себя со стороны. Опыта хватает признать, что он сам по себе бывает смешон. Это всё вообще-то про мозги, не про юмор. По-человечески, если перевести: значит с таким человеком можно найти общий яык.
Друг слушает, кивает. Потом говорит: "Ну ок, юмор важен, никто не спорит. А ты можешь его измерить?" И мы оба молча так зависли, если честно. Потому что психологические тесты на совместимость есть. На IQ есть. На любовь, на привычки бытовые, на привязанность - тонна. А на юмор? Вариант "спроси, что тебя смешит" отметается сразу - на свиданиях все врут, в анкетах тем более. Сравнить любимых комиков? У людей с разным юмором часто одни и те же любимые комики, просто потому что они популярные. Нужно что-то, что меряет реакцию. Не то, что человек о себе говорит.
А мы - программисты. Значит, будем пилить) Дальше у нас было пять версий теста. Расскажу по порядку.
Версия 1. Лайк-дизлайк.
Логика тупая: психологический тест работает по принципу "совпали ответы - совместимы". Значит, даём двум людям одну пачку мемов, сравниваем реакции, готово. А что такое концентрированный юмор сегодня? Конечно, мемы. Не анекдоты же из календарика.
Берём пачку картинок, юзер пробегает, тыкает 👍 или 👎. Совпало - совместимы. Казалось гениальным первые часов двенадцать.
Сломалось на первом же прогоне на себе. Открываю мем - он мне актуальный, но я над ним не ржу. Просто понимаю шутку. Что тыкать? Лайк? Я не смеюсь. Дизлайк? Мем нормальный. И таких мемов в любой ленте половина. Двоичная шкала просто не тянет. Закопали.
Версия 2. Пятибалльная.
Окей, не хватает градаций. Делаем нормальную шкалу: совсем не нравится / не нравится / нейтрально / нравится / супер нравится. Думали, поймаем нюансы. И вроде поймали - совместимость стала аккуратнее.
И всё равно как-то мутно. Потому что у одного "нейтрально" это "ну прикольно, не моё". А у другого "нейтрально" это "бесит, нажму середину чтоб быстрее пройти". Шкалы у людей внутри головы разные. Это как с ценой: для одного "дорого" - пять штук, для другого - пять лямов. Усреднять бесполезно.
Стало чуть лучше. Но до "работает" не дотянуло.
Версия 3. Категории, теги, ручная разметка.
Заходим с другой стороны. Каждому мему присваиваем категории вручную: коты, офис, работа, отношения, политика, абсурд, чёрный юмор, и так далее. Дальше смотрим, в каких категориях у двух людей реакции пересекаются.
На простых мемах работает. Котятники сходятся на котятах, офисные сходится на офисе.
А потом приходит мем: кот сидит в офисе с табличкой про дедлайн. Это что? "Кот"? "Офис"? "Работа"? "Абсурд"? Всё четыре? Что главнее? Я не шучу - я реально сидел над одной картинкой минут двадцать и не мог решить. И таких пограничных мемов - больше, чем простых.
Тегать руками первые полчаса прикольно. К сотому мему ты хочешь умереть. К двухсотому начинаешь сомневаться, что вообще понимаешь, что такое юмор, и не пора ли тебе уволиться из жизни.
И вот тут до нас допёрло. Юмор это не про тему. Юмор это про то, как именно оно смешно. Один "кот в офисе" - про абсурд бытия. Другой - про то, что миллениал не вывозит корпорацию. Третий - про эту вот тиктоковскую усталую иронию. Тема одна, по сути - три разных мема.
Категориями такое не возьмёшь в принципе. Мы упёрлись.
Сидим, тупим, чай уже даже не стынет, его налили заново и он снова стынет. И вылезает вообще-то очевидная вещь: нам нужно что-то, что само понимает, чем один мем отличается от другого. Не по тэгу. По вайбу. По смыслу шутки, которая внутри.
И тут мы такие - стоп. У нас же 2025 во дворе. Нейронки же есть. Чё мы как два мужика из 2014 года руками теги ставим.
С этого момента началась версия 4. И версия 5. Они уже более-менее заработали. Расскажу в следующем посте, иначе тут уже и так лонгрид на двух экранах.
Если совсем спойлерить - мы заставили нейронку не просто смотреть на мем, а писатьпро него развёрнутое сочинение: в чём ирония, на чём построен юмор, что считывается, какой подтекст. Звучит как бред, выглядело тоже как бред, но именно это всё перевернуло. То, что сейчас в приложении - выросло из этого момента. Но это уже следующая серия.
Реклама. Рекламодатель: ООО «ЭКСПОНЕНТУМ», ИНН 9717190256. erid: CQH36pWzJqVHynd1BkJ4XFFqKXYeX5J8XvAhVbzWdkCWwz
В первой части я писал о том, как мы с Александром дошли до ООО «Экспонентум»: отказались от формата ИП, выбрали ООО, собрали финансовую модель и остановились на АУСН «Доходы».
А теперь начинается часть, ради которой обычно и читают такие истории: где красивый план сталкивается с реальностью. Мы хотели зарегистрировать компанию быстро и аккуратно – через банк, с расчётным счётом и готовым сервисным пакетом. Но почти сразу выяснилось: самый удобный путь нам не подходит. Причина банальная, но важная – у компании два учредителя.
Спойлер: в итоге всё получилось, но не тем способом, который казался самым очевидным. Пришлось разбираться с типовым уставом №19, электронной регистрацией через ФНС, банком и расчётным счётом. То есть пройти тот самый путь, который снаружи выглядит как «просто открыть ООО», а внутри состоит из десятка решений, где лучше не ошибаться.
Зачем всё это было нужно? Не ради записи в ЕГРЮЛ и не ради красивого названия. За «Экспонентумом» уже стояли реальные продукты, которые можно открыть и посмотреть прямо сейчас: «ДомоГраф», «Товарищ темп».
Лучше посмотреть на них до чтения этой части: тогда ОКВЭДы, устав и банк будут восприниматься не как сухая бюрократия, а как история о том, как конкретные продукты начали превращаться в нормальный бизнес-контур.
Когда план превращается в документы
Снаружи регистрация ООО выглядит как одна процедура. На практике она раскладывается на несколько маленьких решений, каждое из которых нужно принять внимательно, понимая, что не всё можно будет потом легко и быстро изменить.
Нужно определить название, юридический адрес, размер уставного капитала, доли участников, выбрать генерального директора, определить систему налогообложения, виды деятельности (по ОКВЭД), выбрать типовой устав (или разработать индивидуальный) и способ подачи документов. Само по себе ничего из этого не является запредельно сложным. Но когда делаешь это впервые для новой компании, постоянно возникает ощущение, что за каждой галочкой может стоять последствие (и это чистая правда).
Это, пожалуй, главный вывод по регистрации: там не столько сложно, сколько непривычно. Формы требуют конкретики. Пока вы обсуждаете продукт в общих словах, многое можно оставить в воздухе. Заявление в налоговую так не работает. Оно спрашивает прямо: кто учредители, какие доли, кто директор, на каком уставе действует общество, чем оно будет заниматься.
В этот момент бизнес перестаёт быть разговором и становится набором формальных ответов.
ОКВЭДы: основной код и запас на соседние направления
Один из первых содержательных вопросов – ОКВЭДы.
Основным кодом мы выбрали 62.01 – разработка компьютерного программного обеспечения. Для нас это естественная база: «ДомоГраф», «Товарищ темп» и будущие продукты в первую очередь являются IT-разработкой.
Но ограничиваться одним кодом не хотелось. Не потому, что мы собирались заниматься всем подряд, а потому, что вокруг основного продукта есть смежные направления. Консалтинг, сопровождение, обработка данных, размещение информации, возможные прочие исследования. Закон позволяет добавлять к основному ОКВЭДу дополнительные и при этом не обязательно в будущем иметь выручку по каждому из них. Почему бы не заложить резерв на будущее?
В итоге к основному коду мы добавили дополнительные:
47.91 – розничная торговля по почте или через информационно-коммуникационную сеть Интернет;
62.02 – консультативная деятельность и работы в области компьютерных технологий;
62.03 – деятельность по управлению компьютерным оборудованием;
62.09 – прочая деятельность, связанная с использованием вычислительной техники и информационных технологий;
63.11 – обработка данных, предоставление услуг по размещению информации и связанная с этим деятельность;
70.22 – консультирование по вопросам коммерческой деятельности и управления;
72.19 – исследования и разработки в области естественных и технических наук;
72.20 – исследования и разработки в области общественных и гуманитарных наук.
Здесь важно не превращать список ОКВЭДов компании в «на всякий случай добавим половину классификатора». Мы шли от реальных сценариев: что компания уже делает, что может делать в рамках развития продуктов и что может понадобиться для договоров с клиентами или партнёрами.
В нашем случае набор получился вокруг IT, данных, консалтинга и исследований. Это выглядит логично для компании, которая делает цифровые продукты и при этом может выполнять экспертную работу.
Типовой устав: меньше творчества, больше практики
Следующая развилка – устав.
Можно подготовить индивидуальный устав. Это даёт больше гибкости, но требует больше времени и внимания. Нужно писать текст, проверять формулировки, думать о корпоративных сценариях, которые на старте могут быть неактуальны или просто не до конца понятны. С высокой вероятностью потребуются и расходы на нотариуса.
Второй вариант – типовой устав. У ФНС есть сервис подбора типового устава для ООО: отвечаешь на вопросы, и система предлагает подходящий вариант.
Мы не стали выбирать устав случайно. Посмотрели варианты, прошли через логику сервиса и остановились на типовом уставе №19.
Почему он нам подошёл: долю можно продать или иначе отчуждать другим участникам; отчуждение третьим лицам возможно с согласия остальных участников; залог доли третьему лицу не допускается; решения общего собрания подтверждаются подписанием протокола участниками собрания; генеральный директор избирается на пять лет.
Для нашей конструкции из двух партнёров это было достаточно понятно и без лишней экзотики. Мы не пытались через устав решить все мыслимые будущие ситуации. На старте нам была нужна рабочая юридическая рамка, а не корпоративный роман на сорок страниц.
Попытка открыть ООО через банк
Изначально мы хотели сделать всё максимально просто: выбрать банк, через него зарегистрировать ООО, сразу открыть расчётный счёт и подключить нужные сервисы.
На рекламных страницах банков это выглядит идеально: несколько шагов, онлайн-подача, счёт, бухгалтерия, всё в одном месте. Но в нашей ситуации быстро выяснился практический нюанс: удобные банковские сценарии регистрации ООО в основном рассчитаны на компанию с одним учредителем.
А у нас два учредителя.
Мы проверили несколько вариантов и пришли к выводу, что через банк открыть ООО с двумя учредителями так, как нам нужно, не получится. Это не было драмой. Просто очередная развилка: сверхбыстрый путь «всё через банк» не подходит, значит идём другим способом.
Регистрация через сервис ФНС
В итоге мы пошли через сервис ФНС «Государственная онлайн-регистрация бизнеса».
И здесь, честно говоря, ожидания были хуже реальности. Мы готовились к более тяжёлому бюрократическому опыту, но сама процедура оказалась вполне удобной. Сервис помогает подготовить заявление, собрать комплект документов и направить его в регистрирующий орган в электронном виде. Для электронной подачи это ещё и способ пройти регистрацию без визита в налоговую и без госпошлины.
Главное – не торопиться. Проверить данные участников. Проверить доли. Проверить адрес. Проверить ОКВЭДы. Проверить устав. Проверить налоговый режим. Проверить заявление ещё раз, потому что ошибка в простой формулировке может потом стоить времени.
В нашем случае подача прошла штатно. Без похода в налоговую, без бумажного марафона и без ощущения, что мы воюем с системой. Это была скорее аккуратная последовательность действий: подготовили, проверили, подписали, отправили, дождались результата.
После регистрации появились уже конкретные реквизиты и документы: запись в ЕГРЮЛ, ИНН, КПП. Формальная жизнь компании началась. До этого «Экспонентум» был названием будущей конструкции. После регистрации он стал юридическим лицом. Теперь 10 марта – наш день рождения!
Банк: считали не симпатии, а условия
После регистрации нужно было открыть расчётный счёт.
Здесь мы тоже старались не выбирать по принципу «мне нравится интерфейс» или «мне кто-то советовал». Мы сделали сравнительную таблицу и собрали комплексный показатель: тарифы, стоимость обслуживания, комиссии, условия по интернет-эквайрингу, удобство работы с АУСН, онлайн-бухгалтерия, интеграции, надёжность, скорость поддержки, качество личного кабинета, возможность эффективно работать с платежами и документами.
По результатам сравнения выбрали один из крупных онлайн-банков. Название специально не пишу, потому что этот текст не про рекламу банка. Важнее сам подход: даже маленькая компания должна выбирать банк не по ощущению, а по набору критериев.
Для нас банк был не просто местом, где лежат деньги (для начала – уставный капитал). Он сразу становился частью операционного контура: платежи от пользователей, выплаты зарплаты, налоги, документы, связь с АУСН, бухгалтерские операции, возможные депозиты, уведомления и контроль сроков.
И вот здесь открытие компании стало ощущаться реальнее. Пока есть только идея и продукт, многое можно обсуждать в режиме планов. Когда есть расчётный счёт, платёжная инфраструктура и налоговый режим, разговор становится более предметным: деньги должны правильно приходить, правильно учитываться и вовремя уходить по назначению, иначе можно получить штраф от налоговой.
Что изменилось после регистрации
После регистрации мир не перевернулся. Не было ощущения, что утром мы стали какими-то особыми предпринимателями. Скорее появилось другое чувство: теперь у работы есть более строгий контур.
Появилась компания. Появились реквизиты. Появился счёт. Появились обязанности. Появилась необходимость вести документы аккуратнее, чем в личном проекте. Появились вопросы, которые нельзя отложить на «потом»: кадровый учёт, бухгалтерия, персональные данные, налоги, договоры, реклама, маркировка.
Регистрация ООО оказалась не подвигом и не бюрократическим ужасом. Это просто много небольших действий, которые нужно делать внимательно. Прочитал. Проверил. Сравнил. Заполнил. Ещё раз проверил. Подал. Получил результат. Пошёл дальше.
Самое сложное в этом процессе – не отдельная задача, а их количество. Пока выбираешь ОКВЭДы, нужно думать об уставе. Пока думаешь об уставе, вспоминаешь про налоговый режим. Пока выбираешь банк, выясняется, что он влияет на бухгалтерию, АУСН и платежи пользователей. Каждый элемент цепляется за соседний.
В следующей части расскажу о том, что началось после регистрации: трудовые договоры, штатное расписание, зарплата, НДФЛ, нюансы АУСН, персональные данные, уведомление в Роскомнадзор и рекламная маркировка с erid. Потому что открыть ООО – это только технический старт. Дальше начинается нормальная административная жизнь компании.
Реклама. Рекламодатель: ООО «Экспонентум», ИНН 97117190256. erid: CQH36pWzJqVHynd1BkJ4XFFqKXYeX5J8XvAhVbzWdkCWwz
Ну что, предприниматели, вы там как? Нормально? Да ладно, мы знаем, что не очень…можете не рассказывать
Если бы последние шесть лет можно было бы охарактеризовать одним словом, то выбор пал бы на «Жопа» «Кризис». Да, он прошёлся по всем — компании сокращают расходы, людей, а сайты по поиску работы ломятся от обновившихся резюме.
Денег нет, а нам остаётся только держаться. Что может быть ещё хуже? Усугублять и без того шаткое положение внутренними причинами. Да, это неприятно осознавать, но безопаснее быть начеку и посмотреть на свои процессы со стороны.
Привет! Это Weeek и мы тоже переживаем кризисы вместе с тобой. Знаем, что на самом деле возможно вот так вот раз — очнуться и начать что-то делать, чтобы спасти команду и компанию от полного разорения. Когда кажется, что дело дрянь, в ход идут ЛЮБЫЕ способы, но в этой статье мы расскажем о легальных и легко применяемых.
Что добивает бизнес в 2026 году
Выгоревшие сотрудники, которое уже давно тихо уволились и только ждут удачного момента, чтобы написать заявление. Менять работу в 2026-м — огромный риск, но, прошерстив хотя бы немного соцсети, можно увидеть, что даже полный мрак на рынке труда не останавливает кадры покидать место работы при любой удобной возможности.
Тихое увольнение — это когда сотрудник каждый день ходит на работу или подключается на удалёнке, выполняет базовый функционал и на этом, пожалуй, всё. Ему уже давно наплевать на цели компании, показатели и эффективность. Он максимально не включается в процесс и избегает новые проекты.
Всё бы ничего, только такой сотрудник продолжает получать зарплату из кармана бизнеса, при этом, не вовлекаясь в рабочий процесс и уж тем более не задумывается над тем, как его улучшить.
В 2024 году международная консалтинговая компания McKinsey выяснила, что количество тихих уволившихся — от 20 до 40%. Крупные организации из-за этого теряют около 4% от фонда оплаты труда.
Дисклеймер: мы ни на что не намекаем и не осуждаем тихое увольнение, потому что понимаем, что ситуации и правда бывают разные. Мы просто называем вещи своими именами
Хаос в задачах и работе — ещё одна причина, почему бизнес теряет кадры и деньги.
Во-первых, нет доказательств того, что неорганизованность в управлении людьми и задачами приносила сногсшибательные результаты. Но есть исследования, которые говорят, что размытые цели, отсутствие чётких регламентов приводят к первому пункту из списка.
Во-вторых, если список задач по проектам больше напоминает помойку, чем структурированную и понятную схему, то риски сорвать сроки и потерять клиента растут с такой же прогрессией, как ставки ЦБ.
Токсичная корпоративная среда — что-то из серии: «Мы одна большая семья», но с уточнением, что деструктивная. Думаем, нам не нужно объяснять, что никакие тимбилдинги и прочие мероприятия не восстановят командный дух, если причина раздрая — в правилах, которые годами формировались в офисе.
Если для тебя норма требовать с сотрудников то, чего они не могут сделать, навязывать им непонятные идеи и накидывать по пять срочных задач в день, то, конечно, ты рискуешь остаться у разбитого корыта. Кто-то может долго терпеть, но обязательно найдётся человечек, который после увольнения накатает огромную простыню в отзывах о компании, где вскроет всю подноготную.
Управленческая перегрузка. Топы выгорают меньше, чем менеджеры среднего звена, потому что именно последние огребают за всё плохое и иногда даже хорошее. С одной стороны — KPI и ключевые показатели, с другой — команда в подчинении, которая может накосячить.
Менеджер может включить стоика и какое-то время держаться на планёрках и отчётах, но в конце концов в таких условиях может просто уехать в дурку уйти на больничный и больше не выйти.
И вот, ты сталкиваешься с тем, что нужна замена. Спойлер: вероятно, это будет не так уж и просто и очень дорого. Опрос 3600 сотрудников поколения Z показал, что больше половины из них не хотят быть менеджерами. Лень и безответственность не при чём. Просто команда всё видит и понимает, что проще работать с 9 до 18 и уходить домой, чем постоянно находиться между молотом и наковальней.
Бесконечная коммуникация вместо выстроенных внутренних процессов. Созвон с обсуждением созвона, совещания, которые длятся часами и отнимают драгоценное время, которое можно было бы потратить на что-то более полезное.
В коммуникациях нет ничего плохого, когда они по делу и не длятся больше 30 минут. Бесконечное коллективное пережёвывание ментальной жвачки сильно выматывает, и сил на продуктивную работу уже не остаётся.
Мы уже молчим о голосовых сообщениях на 10 минут от руководства и постоянный спам в личку с вопросами: «Ну что там?»
А можно было бы просто воспользоваться Аналитикой Weeek и за пару кликов понять, кто чем занят и выявить тех, кто недорабатывает.
Чек-лист, чтобы определить масштабы проблемы
Загибай пальцы, если:
Непонятно, кто за что отвечает и когда это надо сдать
Полдня уходит на созвоны, а решений всё нет
Постоянно хочется залезть в каждую мелочь и всё перепроверить, потому что без гиперконтроля никто вообще не будет работать
Сотрудники боятся сказать правду — проще промолчать и сделать вид, что всё хорошо
Менеджер перестал высказывать своё мнение, предлагать новые решения и просто соглашается на всё
Если хотя бы два пункта совпали, то мы тебя поздравляем — не всё потеряно. Да, кризис, да, нет денег, но не существует той ошибки, которую невозможно исправить.
База — вести все дела в таск-менеджере. Мы повторяем в 1000124 раз: ну невозможно ставить задачи устно на планёрках или писать в одном из десяти рабочих чатов и при этом надеяться, что всё будет сделано.
Человеческий фактор очень многие недооценивают, а зря. Забытая задача влияет на сроки проектов, от которых зависит, захочет ли заказчик продолжить работать. Да, внедрить таск-менеджер нелегко. Но вот, какие простые шаги ты можешь сделать.
Создать рабочее пространство — место, где будут храниться все проекты компании и задачи, которые нужно сделать.
«Мои задачи» — твоя зона ответственности
«Все задачи» — зона ответственности всех участников рабочего пространства
«Все проекты» — все проекты, над которыми работает компания
Рабочему пространству можно дать название, указать в описании правила работы в таск-менеджере, добавлять людей и ограничить доступы. Всё это в два клика делается в настройках.
Начать систематизировать проекты — проекты выглядят как папки с задачами. Для того, чтобы создать неважно какой проект, нужно просто нажать на плюсик на боковой панели — и всё.
Каждому проекту ты можешь дать название, прикрепить нужные документы и ставить дедлайн, чтобы не дай Бог никто не забыл о сроках.
А ещё в проектах можно интегрировать приложения — например, figma, карты MIro, гугл доки или таблицы с важной информацией, чтобы не переключаться между вкладками.
Далее внутри проектов можно прописывать сколько угодно задач, декомпозировать их, назначать ответственного, дедлайны и следить за ходом работ.
Задачи можно отслеживать в том виде, котором тебе удобно: списки, канбан-доски, Гант, календари на неделю или месяц.
Импортировать задачи из других систем — например, если до этого уже был опыт работы в других приложениях, но они перестали работать в РФ — например, Trello или Asana, то можно спокойно перенести все задачи в Weeek и не тратить время на то, чтобы вводить всё вручную.
Использовать Базу знаний на все случаи жизни — в ней ты можешь хранить буквально ВСЁ. Документы, списки, отчёты, планы, концепции проектов и так далее. Этими документами можно делиться с сотрудниками или со всем интернетом, сделав их публичными.
Брать от сервисов максимум:
Аналитика — чтобы следить за показателями проектов и отслеживать, как идут дела
Загруженность — управлять нагрузкой команды и избегать перекосов по типу: один делает всё, а второй только притворяется, что занят
CRM — автоматизировать воронку продаж и закрывать сделки на раз-два
Пользователи — чтобы управлять доступами и не пускать в определённые проекты лишние глаза
Ты можешь подумать, что мы предлагаем решить любую проблему установкой таск-менеджера, но это не так. Помним, что ни одна система не поможет, если бардак не только в задачах, но и в голове.
Мы это всё проходили и пишем вот эти все статьи, гайды для менеджеров проектов, материалы в блоге ценой потраченных нервов и денег.
На Авито полно квартир за 80, 100 и 180 тысяч в месяц, которые выглядят так, будто их специально фотографировали как можно хуже. Тёмные комнаты, кривые ракурсы, пересветы, ванная как из хоррора — и всё это в объявлениях, где вообще-то пытаются сдать или продать дорогой объект.
Я бесился как человек, который увлекается фотографией. А потом решил починить это image-edit нейронками. Мне 15, и в тот момент я ещё не понимал, что между «прикольной идеей» и «рабочим продуктом» лежат модели, промпты, GPU, серверы, гранты, баги и куча моментов, когда хочется всё бросить.
Видеовизитка: Посмотрите, я существую
Так появилась Yokva — сервис, который должен был превратить час ручной возни с фотками квартиры в одну нормальную кнопку.
Скрин Yokva
Под катом — не история про «смотрите, какой я молодец в 15 лет». Это скорее честный разбор того, как красивая AI-идея постепенно превращалась в (почти) нормальный продукт
❯ Как я вообще пришёл к этой идее через фотографию и одну квартиру
Я увлекаюсь фотографией. Не интерьерной, не коммерческой, а стритом и документалистикой, особенно люблю всячески издеваться над рекламными баннерами.
К недвижимости это сначала вообще не имело отношения. Но в какой-то момент моя тётя Ира попросила меня отснять квартиру под сдачу. Я согласился: и опыт, и немного денег, и просто интересно, как работать в коммерческой съемке.
Как и что получилось:
Как это было
Что получалось
Квартира сдалась недели за две. Мы потом встретились, пообедали, немного порадовали эго и зачем-то открыли Авито. И там было почти всё то же самое, о чем я говорил в начале: темные кадры, кривые ракурсы, ощущение, что хорошие объекты зачем-то продают через плохую картинку.
Контрпример за 100К/мес. Красная комната Линча отдыхает))
И другие контрпримеры:
60К/мес
80К/мес
175К/мес
Поэтому, где-то через неделю, мне захотелось это автоматизировать. Я накидал концепт, продумал интерфейс, купил домен (очень спонтанная трата), начал собирать первую версию Yokva, с ней лендинг — и довольно быстро понял, что строю пока что-то красивое, но очень-очень сырое. Непонятно для кого, непонятно в каком виде и непонятно, что в этом вообще настоящее, кроме моей собственной увлеченности.
Кусочек лендинга
Тогда я сделал то, что надо было сделать сразу: пошёл разговаривать с людьми.
❯ Почему разговор с риелтором оказался полезнее любых догадок
Есть такая полезная книжонка — «Спроси маму» Роба Фицпатрика. Если очень коротко, её идея в том, что не надо спрашивать людей, понравился бы им твой продукт. На такие вопросы почти все всегда врут, даже без умысла. Гораздо полезнее спрашивать, как они уже решают задачу сейчас.
Книжка
Примерно так я и написал тете Ире — что она делает с фотографиями прямо перед публикацией и сколько времени у неё на это уходит.
Из переписки быстро выяснилось главное. Она слегка ретуширует фотографии на телефоне: где-то кадр подрезать, где-то поправить цвет, где-то замазать некрасивую деталь вроде розетки. И на одну квартиру уходит примерно час. Раньше — больше, сейчас — меньше только потому, что рука набилась.
Переписка:
Я: ... На последнем объекте — когда уже всё отсняла, что ты делала с кадрами перед публикацией? Сколько времени ушло?
Ира: Слегка ретуширую. В приложении на телефоне. Где-то кадр подрезать, где-то с цветом поработать, где-то страшную розетку замазать. Но этим никто из обычных людей не занимается — загоняются только те, кто профессионально этим зарабатывает.
Я: А сколько времени занимает?
Ира: Где-то час. Раньше больше. Просто сейчас рука уже набита.
Час на одну квартиру. И это у человека, который давно в теме.
Потом я поговорил еще с тремя людьми: собственницей, которая сдаёт сама, и двумя риэлторами. Картина не совпадала в деталях, но сходилась в главном: хорошие фото нужны всем, ручная возня раздражает всех, а нормального простого решения никто не ждёт — ну просто потому что привыкли)
Теперь у Yokva появилась очень земная цель: сжать час ручной работы в автоматизированную пару минут.
На этом месте у любого нормального человека появляется один и тот же вопрос: если ChatGPT (и подобные) уже отлично пишут нейрослоп текст, редактируют фото и приемлемо выполняют инструкции, то зачем вообще отдельный продукт? Вопрос хороший. И мне не раз пришлось на него нормально ответить самому себе (а теперь и вам!)
❯ Почему ChatGPT здесь не равен продукту
Потому что человеку нужен нормальный результат.
Риелтору или собственнику не хочется по очереди думать, какое фото брать, что на нём править, как не сломать геометрию комнаты, где взять текст, как не платить за подписки и как потом всё это собрать в объявление. Ему хочется загрузить фото и получить вменяемый выход.
Благо от такого мы уже отошли :))
Подтверждаю цель: сделать одну нормальную кнопку. На словах это звучало легко. Дальше начались проблемы.
❯ Как всё начиналось в реализации
Самый первый старт был максимально прагматичным и наивным. У меня не было ни сервера, ни бюджета под это (плюсом я следовал концепту пустого кармана), поэтому я пошёл туда, где можно было собрать демо бесплатно — на родимом Cloudflare Workers (родимый, потому что там куплен домен)
Схема казалась изящной. Пользователь грузит фото, оно падает в простое хранилище R2. Дальше бесплатные AI Workers дёргают LLaMA 4 для анализа кадра, а Flux пытается вытянуть свет и убрать мусор. Затем собирается текст, который вместе с уже обработанной картинкой идет обратно юзеру. Дёшево и сердито. На этом этапе Yokva была простым скриптом, который перекидывал картинку между парой API.
CF AI Neurons
Казалось, что задача почти решена. Я уже готовился все быстренько упаковать и вперед продавать.
А потом я захотел странного. По правде говоря, засмотрелся на aidentika.com
Я подумал: а зачем отдавать риелтору просто ретушированную фотку? Если мы экономим время, давайте выдавать готовый креатив для соцсетей. Фотка квартиры, а поверх неё красивым шрифтом цена, метро, плашки. Риэлтор берёт картинку и сразу постит в условный Telegram.
Задизайнил даже пару макетов, в духе такого:
Пример-1
Пример-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-хранилище для исходников.
Схемка монолита
Сколько фото загрузил — столько анализов стартует одновременно. Как только они готовы, текст и ретушь запускаются параллельно:
Но архитектура — это полбеды. Дальше начался долгий перебор самих моделей.
Акт 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$ гранта.
Что мне сразу понравилось: вместо того чтобы страдать с 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 шагов, лучше держит геометрию комнаты и реалистично работает со светом. Поставил в продакшн.
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
Потратил несколько часов на замеры. Один промпт, одна картинка (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 любил отдавать вместо нормального текста:
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
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. Итоговый срез
Чтобы быть до конца честным, я разделил итоги на то, что реально работает, и то, где мы ещё в начале пути:
Вот так страница результатов выглядит сейчас. Это уже можно трогать руками и использовать, но, как видно из таблицы, работы впереди еще много
Акт 3. Что дальше?
Yokva уж точно не закрывается. У меня в голове (да, пока так) лежат идеи обновления и стратегия перехода на уровень нормального инструмента:
Продукт: Реализовать главную затею генератора готовых рекламных карточек, только для недвижимости
Маркетинг: Буду продолжать записывать рилсы, писать, да и как-то о себе заявлять :)
Партнерства: Я всё еще жду ответа от больших игроков. Если не через повторные письма, то, может, через эту статью
Планы конечно грандиозные, путь — еще больше. Уж не знаю сколько на это времени уйдет, но скучно точно не будет!))
Акт 4. Зачем я это написал?
Иногда проскакивает мысль: «А может, зря всё это?». Но я принципиально тащу проект в соло, потому что пока не готов отказаться от этих дофаминовых горок
Я написал эту статью, чтобы выйти из вакуума (я делал это ранее на реддите, но меня заблокировали). Я хочу познакомить проект с людьми:
Если вы риелтор, стейджер или лендлорд: заходите на yokva.com. Регистрируйтесь, пробуйте. Пишите — отсыплю побольше кредитов в обмен на честный фидбек.
Если вы инженер или фаундер: добро в комментарии. Буду рад, если вы разнесете мою реализацию по фактам, укажете, где я думаю не туда, или просто поделитесь своим опытом.
А если вы критик: то точно велком аборд! Покопаемся в идее вместе)