Telegram Mini App с AI для аренды на Бали: превращает хаотичные объявления из чатов в карту, по которой можно искать. Сделали целиком — от дизайна до кода.
01 / 02
Willi — наш собственный продукт, а не заказ, и мы сделали его целиком: стратегию, дизайн, фронтенд, бэкенд, базу данных и инфраструктуру, на которой он работает.
На Бали виллы и комнаты сдают через Telegram-группы и личные сообщения: фото в треде, цены в любой валюте, ничего нельзя найти поиском. Willi читает эти чаты и собирает из них один каталог внутри Telegram. На пике у него было 5 000 пользователей в день и несколько тысяч объявлений.
Новые сообщения из чатов аренды проходят через AI-пайплайн. Сначала он отличает объявление от запроса того, кто ищет жильё, или от шума, потом вытаскивает тип, цену, валюту, срок аренды, число спален, удобства, даты и место — из русского, английского или их смеси, включая формулировки вроде «15 млн за 5 месяцев».
Адрес геокодируется, цены приводятся к одному сравнимому формату, описание переводится между русским и английским, фото сжимаются и загружаются. Сообщение в чате становится карточкой, которую можно найти и отфильтровать.
Одну и ту же виллу публикуют в десятке чатов собственник и три агента. Willi узнаёт её по перцептивным хешам фотографий, которые совпадают, даже если картинку пересохранили или слегка изменили, поэтому дубли отсеиваются почти без дополнительных затрат.
Поиск работает на PostgreSQL с PostGIS: реальные расстояния от пользователя до каждого места, радиус на карте и ранжирование по тому, насколько объявление подходит, — бюджет с учётом валют и сроков аренды, тип, спальни и ванные, удобства, проверенные собственники, свежесть и продвижение. Сначала идут точные совпадения, потом близкие альтернативы.
Это работает в обе стороны. Тот, кто ищет жильё, может оставить запрос с бюджетом, датами и районом, а фоновая очередь присылает подходящие объявления через бота — с deep link прямо на карточку.
Регистрации нет: бэкенд проверяет подписанные Telegram данные initData и только после этого открывает сессию. Собственники платят за дополнительные объявления и продвижение через счета Telegram, и каждый платёж проходит через явные состояния, поэтому покупка никогда не применяется дважды и не теряется.
Next.js · TypeScript · PostgreSQL · PostGIS · Prisma · Cloudflare Images · Sentry · Docker · Fly.io

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