A daily loop inside Telegram

Clicker lives at points.laska-digital.ru. People sign in with Telegram and open it as a Mini App. The day boundary is Europe/Moscow, so the claim, the streak, and the evening reminder share one calendar.

Points are the currency. They pay for messages in a shared chat, and longer streaks, likes, and referrals unlock achievements. A garden, loot boxes, and an idle spice counter give the balance somewhere else to go.

What players do

  • Claim points once a day and keep a streak
  • Spend points on chat messages, then reply and like
  • Unlock achievements, including ones that stay hidden until earned
  • Invite friends and climb leaderboards
  • Tend a garden, open boxes, and run an idle spice counter
  • Trade points for a VPN promo code

How it is built

Three clients talk to one API. The Mini App is Vue 3 with Vite, Pinia, and Tailwind. The admin panel is a separate Vue app on the same domain, under /admin/, for stats, runtime settings, and Telegram broadcasts.

Mini App
Vue 3, Vite, Pinia, Tailwind
API
Go, Gin, Postgres
Bot
Python, aiogram, WebApp button
Admin
Vue SPA, separate admin token

The Go service splits users, points, messages, achievements, garden, and admin into their own packages behind /api. A Python bot on a second host opens the Mini App. Reminders run inside the API process; a small activity runner sits beside it. There is no Redis queue — Postgres is the only store, and knobs such as message cost and referral bonus live in a settings table rather than in env files.