Платформа встреч на своём коде: вторая версия, афиша и места
Первую версию платформы встреч я запустил на открытом движке, а через неделю собрал вторую на своём коде: главный экран вокруг времени и намерения, вход через Telegram и MAX, афиша из двух источников и около 42,8 тысячи мест из открытой карты. Работает на сервере заказчика, оплата тарифов и анонсы в каналы пока не готовы.
Коротко (TL;DR)
- Первую версию платформы встреч по интересам я запустил на готовом открытом движке. Вскоре стало ясно, что заказчику нужен продукт под его идею, и я собрал вторую версию на своём коде (Next.js, Prisma, PostgreSQL).
- Главный экран построен вокруг времени и намерения: строка «Я хочу…», шкала «Сегодня, Завтра, Выходные», тумблер «я свободен сегодня», пометка «нужен ещё один человек».
- Афишу наполняют автоматически из двух источников, а места для встреч берутся из открытой карты: около 42,8 тысячи мест в 65 городах.
- Статус: в проде на сервере заказчика. Часть блоков ждёт ответов с его стороны, анонсы в каналы пока не сделаны.
Сделаю под ключ: разберу задачу, назову срок и цену. Чтобы начать, напишите в Telegram одной фразой.
Обсудить ботаПро первую версию я уже писал: открытый движок событий, ребрендинг до нуля упоминаний, десять доменов, русская локализация. Этот кейс про то, что было дальше. Если интересен сам движок, есть отдельная статья про Mobilizon.
Задача
Основатель стартапа офлайн-встреч хотел площадку, где человек за минуту находит, с кем и куда пойти сегодня вечером. Готовый движок хорошо делает афишу сообществ, но под такую идею ему тесно. Нет понятий «свободен сегодня» и «ищу ещё одного человека», карточки профиля бедные, а любая правка вглубь означала патч исходников на движке, который обновляется отдельно.
К задаче добавились мессенджеры. Аудитория сидит в Telegram и MAX, поэтому вход, напоминания и мини-приложение должны были работать там. Для сравнения форматов у меня есть статья про мини-приложения Telegram и отдельная про мини-приложение в MAX.
Что я сделал
Своя база кода. Приложение на Next.js с PostgreSQL и Prisma, запущенное рядом с первой версией на том же сервере. Данные я перенёс скриптом, который можно гонять повторно без дублей: люди, встречи, участия, переписки, учётные записи Telegram и MAX сохранились. Потом переключил основной адрес на новую версию, а старую оставил в контейнере в резерве.
Главный экран вокруг намерения. Вместо рубрик сверху строка «Я хочу…», в которой можно искать и создавать встречу одной фразой, есть голосовой ввод. Под ней шкала времени: сегодня, завтра, выходные, все. Тумблер «я свободен сегодня» гаснет в полночь. На карточке встречи видно, сколько человек ещё нужно. Отдельная полоса показывает, что идёт прямо сейчас, а карта и погода на завтра помогают решить, куда ехать.
Вход и уведомления. Вход через мини-приложения Telegram и MAX с проверкой подписи запуска, а также по номеру телефона: сайт присылает в мессенджер вопрос «Это вы?» с кнопкой. Номер хранится только в виде отпечатка, так что один человек из двух мессенджеров попадает в одну учётную запись. Напоминания за день и за час, уведомления о заявках и рассылки разносит отдельная служба.
Профиль и сценарии. Знакомство из шести шагов: имя, дата рождения, пол, город, интересы и настроение, на выходе четыре идеи и ближайшие события города. Раздел «Кто рядом» для тех, кто ищет человека, а не встречу. Ссылки на соцсети с переключателем «показывать». Метки «Про» с поднятием встречи, значком и списком «кто смотрел профиль» пока включаются вручную, приём оплаты не подключён.
Афиша. Скрипт по расписанию собирает события из афиши городов и сервиса билетов, отсеивает курсы, вебинары и консультации, переписывает описание, сохраняет обложку у себя и оставляет ссылку на источник. Первый прогон по второму сервису дал около тысячи ста событий в 64 городах. Дубли ловятся по названию и дате.
Места. Для идей вроде «погулять» или «выпить кофе» нужна площадка. Её данные я беру из открытой карты: парки, набережные, спортплощадки, кино, музеи, кафе. Набралось около 42,8 тысячи мест в 65 городах, обновление раз в неделю, подпись об источнике на странице обязательна по лицензии данных. Про карты в проектах писал в статье про интерактивные карты на Leaflet.
Админка. Сводка с кликабельными карточками, встречи, люди, жалобы, отзывы, рассылка и аналитика заходов по источникам рекламы.
Что было сложно
Время. Контейнер жил в UTC, и все встречи показывались на три часа раньше. Починил часовым поясом в образе и форматированием дат в поясе города встречи.
Рассылка. При проверке я дважды отправил тестовое сообщение людям с привязанными мессенджерами: фильтр не подхватился, а форма сбрасывала значения. После этого рассылка стала двухшаговой: первое нажатие считает получателей, второе отправляет, и число должно совпасть. Тестирую такое теперь на фильтре, который заведомо даёт ноль или одного себя.
MAX. Приложение получает данные запуска одним закодированным параметром в адресе, и мой код искал открытую подпись. Мини-приложение открывает только корень сайта, поэтому одноразовые ссылки вроде /m/код до него не доходят. Ссылку в боте съедал предпросмотр мессенджера: он ходил по ней раньше человека и сжигал код. Роботов теперь узнаю по заголовку и отдаю заглушку. Ещё один нюанс: бот в MAX не получает параметр из ссылки вообще.
Данные источников. Открытый реестр культурных мероприятий оказался заброшенным: последние обновления 2022 и 2023 годов, «будущие» события в нём тестовые. Доступ к государственному API я запрашивал письмом, ответ был отрицательным. Вместо этого сделал места из открытой карты.
Сервер. После перезагрузки у хостинга контейнеры сменили адреса, и сайт стал отвечать ошибкой 500: база искалась по старому IP. Теперь все подключения идут по имени контейнера. Из контейнера при сборке обрывался TLS 1.3, я принудительно использую 1.2 на этом шаге. Зеркало открытой карты часто отвечает ошибкой, поэтому сборщик повторяет упавшие города в конце очереди.
Что получилось
| Что | Статус |
|---|---|
| Вторая версия платформы | в проде на сервере заказчика |
| Вход через Telegram, MAX и телефон, напоминания, админка | работает |
| Афиша из двух источников | собирается по расписанию |
| Места из открытой карты | около 42,8 тысячи в 65 городах |
| Оплата тарифа «Про» | не подключена |
| Анонсы в каналы | не сделаны, ждём каналы от заказчика |
Скорость главной страницы выросла: в первой версии она весила около 1,5 мегабайта и грузилась за три с лишним секунды, во второй отдаёт около 16 килобайт со сжатием за доли секунды. Число живых пользователей небольшое, продвижение ещё впереди, поэтому цифр по росту у меня нет.
Что дальше
На стороне заказчика остаётся указать адрес мини-приложения в кабинете MAX, завести каналы для анонсов и сообщить итоги переговоров с билетными агрегаторами: кино, концерты и стендап подключаются отдельно. Рядом лежит отдельный продукт, мобильное приложение по техническому заданию прошлого подрядчика. Я разобрал все 56 страниц ТЗ и нашёл пробелы: нет удаления аккаунта, которое требуют магазины приложений, нет админки и модели данных, а нумерация начинается с десятой страницы. Оценка полного объёма составила четыре-пять месяцев командой из трёх человек. В работу этот трек не взят.
Частые вопросы
Почему ушли с готового движка?
Движок хорошо подходит для афиши сообществ. Для механики «свободен сегодня, ищу ещё одного» пришлось бы переписывать его внутренности и держать свои патчи при каждом обновлении. Свой код проще.
Платформа уже продаёт тарифы?
Нет. Метки «Про» включаются вручную, приём оплаты не подключён.
Можно ли сделать похожее для моего города или клуба?
Да. Афиша из открытых источников, места из карты и вход через мессенджеры переносятся на другой проект. Для небольших мероприятий хватает и сайта с афишей.
Коротко о главном
Готовый движок быстро запускает продукт, а свой код нужен, когда идея заказчика уходит в сторону от типового сценария. Вторая версия появилась через неделю после первой, и перенос данных обошёлся без потерь. Самые трудные места оказались на стыке с мессенджерами и часовыми поясами.
Если вам нужна своя платформа, бот или мини-приложение, посмотрите разработку ботов и мини-приложений. Напишите в Telegram, MAX или VK.
Всё о мессенджере MAX в одном месте
Эта статья — часть кластера материалов о MAX: разработка ботов и мини-аппов, продвижение канала, воронки, отраслевые сценарии и кейсы с реальными результатами.
Что я делаю для бизнеса
Напишите одной фразой, что нужно. Отвечу, что подойдёт, сколько займёт и сколько стоит. Сообщение уже подготовлено.
- Боты в Telegram, MAX, VK
- Автоматизация процессов и CRM
- Аналитика и дашборды
- Сайты и лендинги под ключ
Разборы, кейсы и практика — без воды. Выходит регулярно, читать 3–5 минут.


