Taht ve Kan — Asynchronous Strategy Game Case Study
Taht ve Kan is a turn-based asynchronous medieval strategy game that never requires both players to be online at the same time. It runs instantly in a browser and as a native Android application.
Explore the game Android v1.8.1

The gap: strategy depth without a second job
Heavy mobile MMOs provide depth but often demand hours every day and months of commitment. Lightweight browser games start instantly but frequently fail to sustain meaningful decisions. Taht ve Kan targets the space between them: genuine strategic consequence in sessions measured in minutes.
The solution: asynchronous 1v1 turns
A player receives a notification when their turn begins, spends three action points and ends the turn. A match can unfold across several days; the opponent does not need to be present. Turn windows can be set to 30 minutes, two hours or four hours, and an expired turn advances automatically so a match cannot remain locked forever.
| Player friction | Product response |
|---|---|
| I cannot find an opponent | MMR matchmaking plus an AI opponent when the queue is empty. |
| I do not know what to do | An interactive first-match tutorial with coach marks and a scripted victory. |
| My opponent stopped playing | Turn deadlines, automatic advancement and AI takeover for abandoned matches. |
| I lost interest after a week | Monthly seasons, league divisions, daily and weekly objectives, a battle pass and rotating events. |
| I am playing alone | Guilds, friends, duel invitations, match chat and guild chat. |
| Paying players win | Nothing purchased with premium currency changes combat power; monetization is cosmetic only. |

Product systems
- World: 22 asymmetric regions that follow the terrain rather than a visible square or hex grid.
- Economy: gold, food, prestige and population, with regional income, taxes, starvation, campaign and logistics costs.
- Army: six unit types—spearmen, swordsmen, archers, heavy cavalry, guards and catapults—with counters and synergies.
- Combat: unit power, fortification, technology, general bonuses, chance and a siege mini-game multiplier from 0.85× to 1.35×.
- Depth: a three-branch, nine-tier technology tree, espionage, random events and comeback cards.
- Competition: Elo-based MMR after five placement matches, Bronze-to-Legend divisions and monthly season finalization.
- Social: guilds, friends, chat, dynasty crest creation, profiles and a hall of fame.
- Operations: admin/mod/helper roles, reasoned timed bans, a report queue, match spectating and bulk announcements.



What makes it different?
- Asynchronous play: removes the requirement to coordinate online time.
- Fair monetization: every paid item is visual rather than a power upgrade.
- No empty queue: AI keeps the product loop alive while the community is still small.
- Two real clients: the web client uses Next.js; Android uses Kotlin and Jetpack Compose with a native game engine rather than a WebView wrapper.
Technology
| Web client | Next.js 15 App Router, TypeScript, Tailwind and a hand-built UI library |
|---|---|
| Server logic | Next.js Server Actions with all validation performed server-side |
| Database | Supabase / PostgreSQL with RLS enabled and server-only access |
| Deployment | Vercel in the fra1 region |
| Notifications | Web Push, VAPID and a service worker |
| Android | Kotlin, Jetpack Compose, a native game engine and signed APK/AAB builds |
| Resend |
Production scale
Engineering decisions that mattered
Geography is part of performance
The database was in Frankfurt while server functions initially ran across the Atlantic. Roughly 90 ms of network latency multiplied across sequential requests. Pinning functions to fra1 and reducing account loading from seven round trips to two removed the actual cause of the perceived slowness.
Deployment and migration are not one atomic event
Queries that read new columns are isolated and guarded. When a migration has not yet been applied, the feature remains quietly disabled instead of taking down the game.
Server cost follows active turns
Completed matches skip heavy records, polling stops in background tabs and the expensive map is separated from the one-second countdown component. Cost scales closer to active turns than registered accounts.
