В 2017 году мне в комментариях написали «иди в нишу». Я пошёл в 2024
В декабре 2016 я запустил доску объявлений. В марте 2017 написал на Спарке статью о том, как пытаюсь притащить на неё трафик. Статья была честная до неприличия: три месяца работы, около 14 тысяч рублей на рекламу, 450 рублей выручки.
Отдельным памятником стоит таргет во ВКонтакте. 515 тысяч показов, 41 переход, два поданных объявления. CTR ноль целых ноль ноль восемь. Восемь тысячных процента. Я тогда пересчитал трижды, потому что решил, что где‑то потерял запятую.
Под статьёй набежали люди и сказали примерно одно и то же: не тягайся с Авито, иди в нишу.
Я поблагодарил за фидбек и пошёл тягаться с Авито дальше.
Прошло девять лет. Сайт теперь называется косплей‑барахолкой, есть фотолента, есть приложение на проверке в Google Play, и есть довольно неловкая история с App Store, из‑за которой у меня спрашивали квитанции за квартиру. Рассказываю всё по порядку, включая места, где я выглядел глупо.
Почему общая доска объявлений это ловушка для оптимиста
Логика была красивая. Есть Авито. У Авито дорого, интерфейс раздражает, поддержка отвечает шаблоном. Значит, есть недовольные. Значит, если сделать бесплатно и по‑человечески, недовольные придут.
Логика идеальная, только она вообще не про то.
Никто в мире не открывает Авито ради интерфейса. Человек идёт туда, где лежит нужная ему вещь. А вещь появляется там, где есть люди. Круг замкнулся, добро пожаловать в холодный старт двустороннего рынка.
На общей тематике этот круг не разрывается никак. Чтобы конкурировать в категории «диваны», мне нужны все диваны страны. Чтобы получить все диваны страны, мне нужны все покупатели диванов. Я в 2017 этого не понимал и решал задачу деньгами: блогер, нанофантики, Инстаграм, таргет. Регистрации капали, объявления не появлялись. Люди заходили, смотрели на пустую витрину и уходили.
Самым позорным решением был парсинг чужих досок, чтобы витрина не выглядела мёртвой. Витрина перестала выглядеть мёртвой и стала выглядеть помойкой. Описание сплошным текстом, категории не бьются, фотографии чужие. Пользователь такое считывает за две секунды, даже если не может объяснить, что именно не так.
Сработало ровно одно: я написал письма живым людям, которые уже продавали похожие вещи в других местах. Не таргет, не блогер. Письмо человеку.
Запомните, это ещё вернётся. Дважды.
Пауза на семь лет
Дальше был период, о котором в презентациях пишут «проект развивался».
Проект не развивался. Проект стоял. Посещаемость сползла к нулю, я занимался работой и жизнью, сайт продолжал где‑то крутиться, но по факту это был памятник самому себе с доменом и хостингом.
Тут надо сказать вещь, которая мне самому не нравится. Между «я забросил проект» и «проект стоял на паузе» разницы нет никакой, это одно и то же, просто второе звучит приличнее. Так что: я его забросил на семь лет.
Начало 2024, разворот
Вернулся я в начале 2024 года, и не по озарению, а потому что рядом оказались два подходящих человека.
Первый: Сергей из Барнаула. Я познакомился с ним, когда ему было четырнадцать, и он писал код на уровне крепкого мидла. Не «способный мальчик, далеко пойдёт», а именно вот так: пишет и работает. Недавно он получил премию за статью в международном журнале по аэродинамике, так что моя доска объявлений в его биографии, видимо, останется как забавный эпизод юности. Сергей взял на себя доработку функционала.
Второй: девушка, которая увлекалась косплеем и вела группу и каналы. Она принесла в проект то, чего у меня не было ни разу за девять лет: понимание, о чём вообще говорят люди внутри этой темы.
Вот тогда, наконец, случилась ниша.
Почему косплей, а не рыбалка
Честный ответ: потому что красиво.
Я не подбирал вертикаль по объёму рынка и марже. Я посмотрел, что люди делают, и залип. Косплей это разнообразие и эффектность в чистом виде. За готовым образом стоит работа, сопоставимая с театральной постановкой: выкройки, крафт, покраска, пайка, парик, грим, свет, локация, фотограф. Человек полгода собирает костюм, надевает его на два дня и снимает.
Это шоу с огромным закулисьем. И всё это закулисье состоит из вещей и услуг, которые кто‑то делает, продаёт, ищет и не может найти.
Здесь я обязан ответить на вопрос, который в комментариях зададут первым: чем не устраивает Авито.
Устраивает, и во многом. На Авито косплей продают, и продают много, так что рассказывать про неохваченную аудиторию я не буду, это была бы неправда. Разница в другом.
Универсальный каталог обязан обслуживать все товары сразу и поэтому ни один не обслуживает хорошо: по запросу «косплей костюм» приезжает красный костюм на дачу вперемешку с тем, что человек искал. Дальше лимиты на бесплатные публикации, в которые мастер с двумя десятками позиций упирается сразу. И главное, там нет сообщества: костюм нельзя лайкнуть, на автора нельзя подписаться, а в косплее автор это половина ценности вещи.
При этом у Авито есть то, чего у меня нет и в ближайшее время не будет: оплаты, доставка, холдирование денег, защита сделки. Я закрываю поиск и сообщество, они закрывают логистику и деньги. Это честная расстановка сил, и притворяться, что она другая, смысла нет.
Что важно понять про нишу: она не делает задачу легче, она делает её конечной.
В общей доске мне были нужны все продавцы страны. В косплее нужны мастера, вигмейкеры, фотографы и косплееры. Это не миллионы, это тысячи. До них можно дойти ногами. Их можно найти на фестивале. Разница примерно как между «надо похудеть» и «надо не жрать после шести»: второе тоже тяжело, но хотя бы понятно, что делать в понедельник.
Шесть разделов вместо сорока: костюмы и реквизит, услуги для косплея, атрибутика и мерч, книги и манга, настолки и игры, обучение.
Про услуги отдельно. В общей доске раздел услуг это всегда свалка из «сантехник недорого» и «магия приворот». Здесь услуги это половина смысла: пошив, крафт, 3D‑печать, грим, боди‑арт, укладка париков, плетение лейсфронтов, аренда костюмов, фотосъёмка с ретушью. Слова «лейсфронт» я до этого проекта не знал. Довольно унизительный опыт для человека, который девять лет назад собирался объяснять рынку, как надо.
Стек, или как разработчики движка кинули своих пользователей
Сайт стоит на Tamatanga, это PHP‑движок для досок объявлений. Стоял, вернее. От исходного движка там осталось примерно то же, что от бабушкиного топора после замены топорища и лезвия.
История такая. Разработчики выпустили новую версию и перевели туда всё: документацию, личный кабинет, купленные дополнения. Пользователи старой версии остались с работающим кодом и без доступа к чему‑либо ещё. Купленные модули превратились в файлы на диске без обновлений и поддержки, документация закрылась.
С точки зрения бизнеса это, наверное, называется миграцией пользовательской базы. С точки зрения пользователя старой версии это называется по‑другому.
Поэтому всё, что сейчас есть на сайте, самопис. Не по идеологическим причинам и не потому, что я люблю писать с нуля. Просто выбора не оставили.
И вот тут начинается самое весёлое. В поставке 201 файл закодирован ionCube. Точка входа public_html/index.php, админские настройки по всем модулям, themes/*/index.php, несколько классов ядра, включая кэш и локаль. Эти файлы нельзя ни прочитать, ни поправить, можно только обходить снаружи. Заодно они намертво прибивают версию языка: PHP строго 7.2, потому что под неё их закодировали.
То есть я работаю с движком, у которого вырезана поддержка, закрыта документация и запечатана пятая часть кода. Каждая правка это упражнение «дотянуться до поведения, не трогая файл, где оно описано».
Ещё одна деталь, важная для калибровки ожиданий. Плотно я вернулся к проекту в начале июля этого года, то есть три недели назад. Репозиторий завёл 15 июля, сняв baseline прямо с боевого VPS, до этого правки жили на сервере и версионировались никак. С тех пор в нём 187 коммитов.
Всё, что дальше в статье описано как сделанное, сделано в этом окне. Такой темп бывает ровно в одном случае: когда до этого долго не делал ничего.
Мораль для тех, кто выбирает готовое решение: вы покупаете не код, вы покупаете отношения с вендором. Код никуда не денется, а вендор денется в любой момент и не спросит.
Gram: фотолента, приклеенная к барахолке
Наблюдение простое. Косплеер сначала делает костюм, потом фотографируется, потом выкладывает фото. Продажа тут не отдельное событие, а побочный эффект: костюм пошит на один фест, надет один раз, дальше он висит в шкафу и занимает место. Продать хочется, но идти ради этого на Авито и заполнять поля про состояние товара никто не пойдёт.
А фотку человек выложит в любом случае. Он это и так делает каждую неделю, бесплатно и с удовольствием.
Отсюда gram.geniro.ru: фотолента для косплей‑сообщества, сшитая с барахолкой. Развёрнута на Pixelfed, это опенсорсный аналог того самого фотосервиса, который в России запрещён.
Теперь честная часть, которую в рекламных статьях не пишут. Посмотрите на скриншот. Все посты от одного человека.
Gram запустился два дня назад. Людей там нет. Ни одного, кроме нас. Я публикую эту статью в том числе поэтому: не потому что «пора рассказать о нашем успехе», а потому что нужны люди, иначе фотолента останется пустым залом с хорошим светом.
Механика, ради которой всё затевалось, называется «товар из кадра». Человек выкладывает фотосет, отмечает предмет на фотографии, и под фото появляется карточка объявления. Не «ссылка в профиле», а прямо здесь, под лайками.
Импорт из Instagram, и почему я считаю его главной фичей
Pixelfed умеет забирать выгрузку аккаунта Instagram: фотографии, подписи, хештеги и оригинальные даты постов. Для российской аудитории это работает сильнее, чем задумывали авторы, потому что сервис заблокирован, а архивы у людей остались и висят мёртвым грузом.
Ключевая деталь: пароль не нужен. Импорт идёт из файла выгрузки, который пользователь запрашивает у самого Instagram, доступа к чужому аккаунту у нас нет по конструкции. Это снимает главное возражение, которое я ожидал первым.
Родной флоу лежал по адресу /settings/import/instagram, был англоязычным и требовал возни. Мы сделали свой на /settings/import: русский интерфейс плюс собственное окно правки поста перед публикацией, чтобы человек мог причесать подписи, а не заливать архив как есть.
Отдельная возня была на стороне сервера: штатный импорт упирался в sudo, и пришлось писать скрипт, который снимает это ограничение при выкатке.
Зачем это вообще нужно, если смотреть на задачу холодно. Пустая соцсеть не запускается, потому что первому пользователю нечего смотреть, а второму нечего показывать. Импорт разрывает этот круг: человек приходит не с пустым профилем, а сразу с сотней своих фотографий и правильной хронологией.
Контакты, звонки и почему телефон лучше не показывать
В настройках есть тумблер «Разрешить звонки и телефон». Выключен, значит только переписка внутри Geniro, без звонков и показа номера. Значение хранится на сервере в bff_users.contacts_visible и становится дефолтом для новых объявлений, а не живёт в локальных настройках приложения, как было в первой версии.
В приложении есть видеозвонок на опенсорсном Jitsi. Логика простая: покажите костюм на камеру, не раздавая номер телефона. Честно про текущее состояние: звонки пока идут через публичный meet.jit.si, то есть с чужими лимитами и зависимостью от чужого сервиса. Свой инстанс поднимать придётся, и это записано в долги.
Плюс мессенджеры в профиле: Telegram, WhatsApp, Viber. Чат привязан к лоту, а не к собеседнику, так что переписка не растворяется в общем списке. Пуши настраиваются отдельно по лайкам, подпискам, комментариям и сообщениям.
Про федерацию скажу как есть: она отключена. Pixelfed умеет жить в федиверсе и общаться с Mastodon и прочими, и я до сих пор смутно понимаю, зачем это нужно моей барахолке. Возможно, я просто не дорос. Но включать функциональность, назначения которой не понимаешь, чтобы потом объяснять модерацию контента, приезжающего с чужих серверов, я не готов.
Приложение
Логика простая: аудитория живёт в телефоне, фотолента без телефона мертва.
Приложение это не обёртка над сайтом. Expo SDK 57, React Native 0.86, React 19, чистый JS без TypeScript. Оно склеивает в один продукт две разные системы: барахолку с PHP‑бэкендом и фотоленту на Pixelfed, каждая со своим API. Внутри восемнадцать экранов, пять табов, тёмная и светлая темы.

Публикация в один тап, где на входе спрашивают ровно одно: это фото в ленту или объявление.

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

Google Play: скучно, долго, технически
Ожидал драмы, получил рутину.
Запросили тестовые логины и пароли, чтобы проверяющий мог зайти внутрь. Дальше пошли вопросы технического характера: версии target API и SDK, области отображения (это про edge‑to‑edge, когда контент должен корректно жить под системными панелями), поддержка страниц памяти по 16 КБ.
Про 16 КБ поясню, потому что это относительно свежая история и на ней спотыкаются многие. Раньше Android жил со страницами по 4 КБ, теперь устройства переходят на 16, и нативные библиотеки, собранные под старое выравнивание, на таких устройствах просто не грузятся. Если в приложении есть нативный код, а он есть почти всегда, потому что он приезжает вместе с половиной зависимостей, надо пересобирать.
Никакой поучительной морали здесь нет. Просто проверки идут долго, а требования подъезжают быстрее, чем успеваешь дочитать changelog.
App Store: как у меня попросили квитанции за квартиру
Здесь драма нашлась, и виноват в ней я сам.
При регистрации я указал страной Казахстан. Осознанно. Логика была такая: Россия под санкциями, с ней возможны сложности, а соседняя страна пройдёт спокойно. Про Apple я думал примерно как про форму обратной связи: ну кто там будет вчитываться.
Вчитались.
Дальше добавьте к этому остальную мою конфигурацию. Карта, которой оплачен взнос, таджикская. VPN латвийский. Страна в анкете казахстанская. Сам я в России.
Посмотрите на это глазами антифрода. Четыре страны в одной заявке, ни одна не совпадает с другой. Это не «пользователь из Казахстана», это учебный пример профиля, который надо отправить на ручную проверку. Я построил себе идеального подозреваемого и потом удивился, что меня заподозрили.
Apple отреагировал ровно так, как должен был: подтвердите, что вы действительно оттуда. Пришлите квитанции об оплате квартиры и отметку о въезде в страну.
Тут у меня было два пути. Первый: пойти искать, чем эти документы можно изобразить. Второй: написать правду и потерять взнос.
Я написал правду. Что страну указал неверно, что живу в России, что выводить средства не собираюсь вообще, потому что приложения бесплатные и денег в них нет.
Apple вернул сто долларов и предложил подать заявку заново. Что я и сделал. Жду вторую неделю.
Вывод, который я вынес и который дороже ста долларов: попытка обойти проверку стоила мне больше времени, чем стоила бы честная заявка с самого начала. Плюс теперь у меня в системе есть отклонённая заявка, а это тоже след, который никуда не денется.
Народная медицина советует такое: купить iPhone, оплатить взнос из приложения Apple Developer со мобильного счёта Билайна или МТС, и тогда рассматривают быстрее и не отказывают даже из России. Звучит как обряд, но людям, говорят, помогает. Пока не пробовал, потому что покупать телефон ради оплаты взноса это уже какой‑то отдельный жанр.
Грабли этого захода
Ради этого раздела и стоит читать чужие статьи.
Пуши. Забыл. Просто забыл, что их надо не только отправлять, но и настроить на стороне приложения. Классика.
Ключи подписи. Отдельная категория боли, про которую все всё знают и всё равно наступают. Тут добавить нечего, кроме того, что бэкап ключа надо делать до, а не после.
SSO. Внедрение единого входа между доской и лентой было самой муторной частью. Два разных мира, каждый со своим представлением о том, что такое пользователь.
Вёрстка на мобильных жила своей жизнью. Нижний таббар налезал на контент, дропдаун категории вылезал из собственной рамки, а иконками разделов какое‑то время служили эмодзи с домиками. Эмодзи‑домик в разделе «Парики» это сильное дизайнерское решение.

Мораль: делайте скриншоты своего продукта регулярно и смотрите на них. Разработчик ходит по сайту как хозяин по своей квартире в темноте, не глядя. Пользователь заходит с включённым светом.
Пустой title. Страница выдачи отдаёт заголовок вида - объявления Geniro Россия. Первое слово потерялось, тире осталось. На карточке объявления title, кстати, нормальный. То есть беда точечная, что даже обиднее.
Всё уже исправлено)
Как я сам себе выбил объявления из поиска
Отдельная история, которая стоила больше всего трафика.
Была настройка: объявления старше 90 дней удаляются с сайта. Мысль благая, витрина не зарастает мёртвыми лотами. Последствие: страницы, которые Яндекс и Гугл уже проиндексировали, исчезают, и поиск постепенно перестаёт нам верить. Плюс сайт стоял заброшенным, объявления снимались, новые не появлялись.
Итог: после возобновления работы у меня 500 новых уников в неделю. Для сравнения, в 2017 году на пике платного трафика было 200 уников в день. То есть я умудрился откатиться ниже того состояния, которое девять лет назад описывал как провал.
Сейчас логику переделали. Старые объявления остаются, но помечены как снятые. Контакты у них скрыты, зато есть кнопка «хочу такой же костюм». Смысл в том, что снятое объявление превращается из мусора в сигнал: мастер заходит и видит, какие костюмы и фандомы люди ищут чаще всего. Автор может опубликовать лот заново одной кнопкой или удалить насовсем, если не хочет, чтобы это лежало.
Не уверен, что это лучшее решение. Уверен, что оно лучше удаления.
Про ссылки, раз уж мы про SEO. Адреса формирует движок, и они местами выглядят как результат спора двух транслитераторов: /samara/kostumy-i-rekvizit/full-kostumy/..., при этом в другом месте то же слово превращается в kosplej. Руками я это пока не трогал.
Мастерские, или снова письма живым людям
Помните, что в 2017 сработали только личные письма? Я решил повторить.
Написал студиям и мастерским. Большинство отказалось, и формулировка была почти всегда одна: у нас есть страница во ВКонтакте, отдельная площадка нам не нужна.
Возразить нечего. Им действительно не нужна ещё одна площадка. Им нужны покупатели, а покупателей у меня на тот момент не было. Продавать мастеру «размещение» на сайте, где нет трафика, это ровно то же самое, что продавать место на пустой полке.
Часть мастерских всё‑таки появилась: девять штук. Какие‑то добавились сами, какие‑то пришли из поиска.

Дальше случилось грустное. Проект встал, объявления посрывались с витрины по той самой автоочистке в 90 дней, и никто не вернулся публиковать заново на заброшенный сайт. Их сложно винить. Я бы тоже не вернулся.
Вывод, который стоил мне двух заходов: холодные письма работают только когда за письмом что‑то стоит. Не «у нас классная идея», а «у нас есть люди». Иначе это не письмо, а просьба поверить в мои планы, а взрослые люди в чужие планы верить не обязаны.
Монетизация, которой пока нет
Чтобы не было недомолвок: выручки у проекта нет, ноль. Ниже то, что построено на будущее, с цифрами.
Пять форматов сотрудничества: баннеры, статья в блоге с активной ссылкой, реферальная программа, региональное представительство (разделы сайта по региону передаются в управление местному человеку) и бартер взаимными ссылками. Три из пяти неденежные.

Цены на баннеры. Верхняя позиция 990 на 90 на всех страницах, 3000 рублей в месяц. Два таких же только на главной по 1000. Тематические разделы, объявления, студии, профиль, блог и мобильная версия: от 200 до 500 рублей в месяц.
Ротация описана на самой странице: баннер показывается минимум при каждом третьем посещении, при менее чем трёх рекламодателях свободные показы делятся между теми, кто есть. Безлимитный показ стоит двойную цену. Человек должен понимать, что покупает долю показов, а не «баннер на сайте».
Реферальная программа. 100 рублей за каждое объявление реферала, прошедшее модерацию, 10 процентов с его оплат с первого по пятый платёж, дальше 20 и 30 процентов с 11-го платежа и бессрочно.

Считаем. Пользователь, который зарегистрировался и подал объявление, стоит мне 100 рублей. Выручка с него ноль, подача бесплатная. То есть строка «реферальная программа» в разделе про монетизацию это статья расходов.
Осознанно. В 2017 году я заплатил 14 тысяч рублей за 41 переход и два объявления. Здесь плачу 100 рублей за пользователя, который дошёл до публикации и прошёл модерацию.
Ограничения против накрутки: реферал без объявления за 180 дней перестаёт быть рефералом, оплата бонусным балансом в расчёт не идёт, программа действует три года, запрещены скрытые партнёрские ссылки, попандеры и рассылки от лица сервиса.
Настоящая монетизация здесь пока ровно одна, и она с минусом. Остальное это кнопки, которые ждут трафика.
Что я понял за девять лет
Ниша это не про объём рынка, а про то, дойдёте ли вы до людей ногами. Считать TAM бессмысленно, если вы не можете назвать имена первых пятидесяти пользователей.
Пустая витрина убивает быстрее плохого дизайна. Кривой сайт с товаром работает. Красивый сайт без товара не работает никогда.
Парсинг не решает проблему пустой витрины, он заменяет пустоту мусором. Мусор пользователь распознаёт мгновенно.
Реклама не создаёт спрос, а усиливает существующий. Если продукт никому не нужен, купленный трафик просто быстрее сообщит вам об этом. За ваши деньги.
Готовое решение это отношения с вендором, а не код. Вендор уйдёт, а вы останетесь с папкой файлов и без документации.
Автоудаление контента это выстрел себе в поисковую выдачу. Кажется гигиеной, оказывается потерей всего, что успело проиндексироваться.
Холодные письма работают, когда за ними что‑то стоит. Иначе это просьба поверить в ваши планы.
Самое опасное слово в отчёте о своём проекте это «развивался». Если проект стоял, надо писать «стоял». Иначе первым обманутым окажетесь вы.
Итого на сегодня: 89 объявлений на витрине, 11 мастерских, 500 новых уников в неделю, фотолента в возрасте двух дней и ноль пользователей в ней, приложение на проверке в Google Play, заявка в App Store на втором рассмотрении, выручки нет.
Это не история успеха. Это отчёт с середины пути, где середина, возможно, ещё не наступила.
Ругайте в комментариях. В 2017 это оказалось полезнее всей купленной рекламы вместе взятой, и, если честно, дешевле.
Прошлая серия, для любителей археологии: Как я пытаюсь привлечь трафик на доску объявлений GENIRO, Спарк, 2017.
Ссылки: geniro.ru, gram.geniro.ru, приложение будет здесь, когда пройдёт проверку.
Автор: Aleramus

