An AI-powered Telegram Mini App for Bali rentals that turns messy chat listings into a searchable map. Built end to end by us.
01 / 02
Willi is our own product, not a commission, and we built all of it: strategy, design, frontend, backend, the database and the infrastructure it runs on.
In Bali, villas and rooms are rented through Telegram groups and private messages: photos in a thread, prices in any currency, nothing you can search. Willi reads those chats and turns them into one catalogue inside Telegram. At its peak it had 5,000 daily users and several thousand listings.
New messages from rental chats go through an AI pipeline. It first tells a listing from a request by someone looking for a place, or from noise, then pulls out the type, price, currency, rental period, bedrooms, amenities, dates and location — from Russian, English or a mix of both, including phrasing like “15 million for 5 months”.
The address is geocoded, prices are brought to one comparable format, the description is translated between Russian and English, and the photos are compressed and uploaded. A message in a chat becomes a card you can search and filter.
The same villa gets posted in a dozen chats by the owner and three agents. Willi recognises it by perceptual hashes of the photos, which still match after an image is re-saved or slightly changed, so duplicates are filtered out at almost no extra cost.
Search runs on PostgreSQL with PostGIS: real distances from you to each place, a radius on the map, and ranking by how well a listing fits — budget across currencies and rental periods, type, bedrooms and bathrooms, amenities, verified owners, freshness and promotion. Exact matches come first, close alternatives after.
It works both ways. Someone looking for a place can post a request with a budget, dates and area, and a background queue sends matching listings through the bot, with a deep link straight to the card.
There is no sign-up: the backend verifies Telegram's signed initData and only then opens a session. Owners pay through Telegram invoices for extra listings and promotion, and every payment moves through explicit states, so a purchase is never applied twice or left out of sync.
Next.js · TypeScript · PostgreSQL · PostGIS · Prisma · Cloudflare Images · Sentry · Docker · Fly.io

A rough idea, a half-finished brief or a problem you can't name yet is enough to start. Tell us what you're working on — we'll come back with questions, not a sales pitch.