Hey dev.to - long-time lurker, first post. I want to show you the game we have been building at Codiologism: Seraph Legion, a gothic angel-collector RPG that runs entirely inside Telegram as a Mini App - and also in the plain browser, no install needed.

What it is

You summon angels across warring choirs, build a five-angel legion, and fight through a campaign plus a daily roguelite gauntlet called the Pilgrim's Path (12 rites, escalating boons). Progression is idle-friendly - your legion keeps working between sessions - and everything feeds points that will convert into an airdrop of our upcoming SRPH token on TON.

The stack

  • Client: React 18 + Vite + zustand, one codebase serving both the Telegram Mini App and the browser build
  • Game core: pure TypeScript - data tables, seeded RNG, and a deterministic battle simulator
  • Server: Fastify + PostgreSQL. Telegram initData is the only auth; sessions are bearer tokens
  • Chain: a TEP-74 jetton written in Tact, tested in @ton/sandbox

The interesting part: trustless-feeling battles

Battles are simulated deterministically from a seed. When a fight ends, the client sends the outcome and the server replays the same sim to verify it before writing rewards. The request body can say anything - the server decides what actually happened. Rewards, summons, and progress are computed server-side from the data tables; the client only selects what to do.

We learned this the hards way: a farming ring hit an early migration endpoint and minted themselves balances, so now the API contract treats every client as hostile. Happy to write that story up if people are curious.

Try it

Feedback, bug reports, gacha horror stories - all welcome. We are a tiny team and we read everything.