
Mikhail Yakubenko
SnapMap
The city as a game: get a “snap a…” quest, take the photo, a neural net checks it, and you earn coins and a spot on the leaderboard.
2025 · Telegram Mini App · team project
My role: the backend, the photo verification pipeline and deploys. Teammates built the frontend.
The idea
New quests arrive every day: snap a yellow door, a street musician, a sunset over the river. A finished quest earns coins, a streak and XP, and the photo goes to the shared feed. Coins buy partner discounts in the shop.
Checked by a neural net
There aren't enough people to eyeball every photo. The photo goes to storage, a job goes to the queue, and a Python worker runs it through CLIP: how well does the picture match the quest description. Tricky cases can switch to a vision model via OpenRouter.
Fair credit
The verdict reaches the backend through Redis. It completes the quest, pays the coins and extends the streak in one transaction, and sets a flag so the same photo can't be counted twice.
Under the hood
Kotlin and Spring Boot backend, PostgreSQL, Redis, RabbitMQ queues, photos in MinIO. A Python worker with CLIP ViT-L/14, a React and TypeScript frontend inside Telegram. All in Docker Compose.