Skip to content
Sava Stosic, home
Selected work

Independent product · Launched

iOS / Android / Web

Durak

Durak for iOS, Android, and web. Play online or offline, free and without ads.

Free to play · No ads · Optional cosmetic themes

Durak's green and gold home screen with Quick Play and Custom Game actions
Durak gameplay with two bot opponents, an active card exchange, and the player's hand
Home screen / Gameplay
Community

400+users

As of

3,000+games played

As of

Launched
Available on the App Store
My role
Founder & Product EngineerProduct · Design · Development · Release

Why I built
Durak.

I wanted to play Durak, but I couldn't find a good option on the Canadian App Store that combined everything I wanted. The apps I tried each left something out.

I built Durak to bring that combination into one product: support for Apple, Google Play, and web; online and offline play; and a completely free game with no ads. The gap was having all of those together.

I designed and built the interface, rules engine, bot opponents, online multiplayer, local saves, and release workflow. A shared TypeScript core keeps the rules consistent between offline games and online rooms.

Apple, Google Play & web

One product across iOS, Android, and the browser, built with a shared interface and rules engine.

Online & offline play

Online multiplayer and local games against bots. Offline matches need no account or internet connection, and can be saved and resumed.

Free to play, with no ads

All gameplay is free, without ad interruptions. Optional purchases change the card and table artwork, never the rules or difficulty.

Product screenshots

Gameplay, navigation, settings, and optional themes. Interface captures from the September 2026 build.

Durak gameplay with two bot opponents, an active card exchange, and the player's hand
Open Gameplay image at full size (opens in a new tab)
01

Gameplay

The player's hand, opponent roles, and active card exchange.

Durak's green and gold home screen with Quick Play and Custom Game actions
Open Home screen image at full size (opens in a new tab)
02

Home screen

Quick Play and Custom Game as the main actions.

Custom game screen showing Throw-in and Transfer rules, opponents, bot difficulty, and deck size
Open Game setup image at full size (opens in a new tab)
03

Game setup

Rule variants, deck size, opponents, and bot difficulty.

Durak's theme store displaying Fantasy and Gothic cosmetic card and table packs
Open Theme store image at full size (opens in a new tab)
04

Theme store

Optional card and table artwork, with no gameplay changes.

Interface
design.

The layout prioritises readable cards, visible turn state, and clear actions on a small screen.

Deep green / Felt / Gold / Ivory

01

Card-table layout and visual hierarchy

Deep greens, warm gold, and ivory cards give the game a recognisable card-table atmosphere. Generous spacing keeps the hand, trump card, and active exchange easy to follow on a small screen.

02

Turn feedback and legal actions

Opponent roles, turn messages, and legal-action cues explain what is happening without making the player learn the implementation. Card motion and sound give each action a clear response.

03

Quick Play and custom settings

Quick Play gets a game started immediately. Custom Game exposes rule variants, deck sizes, and bot difficulty, with less common settings tucked into an advanced section.

System architecture

The same deterministic engine powers local games and the online system. Presentation, rules, room behaviour, and hosting each have a clear job.

The system at a glance
React Native + Expo

Interface · Animation · Player input

On the device

Rules engine + bots

Legal actions · State transitions · Replay

Local storage

Saved games · Settings · Records

Online system

Worker + Durable Objects

Authoritative rooms · WebSockets · Shared rules

Firebase Auth + Firestore

Identity · Social records · Elo settlement

Offline games run entirely on-device. Online rooms validate each move on the server and send each player only their own view.

01 / Presentation

One client, several platforms

React Native and Expo handle the interface, card animations, navigation, and input across iOS, Android, and web builds.

02 / Game logic

A shared rules engine

A pure TypeScript core defines state, legal actions, and validated transitions. Human controls, bots, and online rooms use the same rules.

03 / Local play

Offline, on the device

Local bots select legal moves. AsyncStorage keeps saves, settings, and records on-device; deterministic replays reconstruct interrupted games.

04 / Multiplayer

One authority per online room

A Cloudflare Durable Object coordinates each room over WebSockets. The room engine validates moves, tracks timers, and produces messages and snapshots.

05 / Protocol

Only the information a seat can see

Shared protocol types and per-seat redaction keep opponents' cards out of a player's view. Sequence numbers and resync support reconnects.

06 / Accounts

Identity and durable records

Firebase Auth supplies identity. The Worker handles account APIs and Firestore records for social features, moderation, and server-settled Elo.

Built with

React Native · Expo · TypeScript · Cloudflare Workers · Durable Objects · Firebase Auth · Firestore · AsyncStorage · React Native Reanimated · Expo IAP · EAS Build · Vitest · Playwright

Development
and results.

I owned product scope, design, implementation, testing, and release. These are the main engineering decisions and the results so far.

Results so far

  • Launched on September 15, 2026, with 400+ users reported as of October 5, 2026
  • 3,000+ games played, reported as of October 8, 2026
  • Delivered Throw-in and Transfer modes, three bot difficulties, save-and-resume, and optional cosmetic packs
  • Delivered online multiplayer and offline play across iOS, Android, and web
  • Kept all gameplay free to play and without ads, with optional cosmetic purchases
  • Owned the product from interaction design through implementation, review, and release
01

Keep the rules independent of the interface

The core has no React Native or hosting dependency. That makes complicated card sequences testable as data and lets the same engine serve local play and an authoritative online server.

02

Make offline play a complete experience

Bundled assets, local bots, and persistent saves keep a full match available without a network. Adding accounts and online rooms does not make them prerequisites for the offline game.

03

Separate room behaviour from hosting

The online room engine returns effects: messages to send, timers to schedule, and snapshots to store. A thin Cloudflare adapter performs them, keeping game behaviour testable independently of the platform.

04

Keep purchases cosmetic

Cosmetic themes change card and table artwork. Purchase entitlements stay separate from the rules and bot strategies, so the visual choice does not change legal moves or opponent strength.

My responsibilities

  • Product direction and release scope
  • Interface and interaction design
  • Shared rules engine and bot strategies
  • Offline persistence and replay
  • Multiplayer architecture and room lifecycle
  • Accounts, moderation, and rating workflows
  • Cosmetic purchase integration
  • Testing, review, and App Store delivery

What I learned

  • A clean boundary around the rules makes both interface changes and multiplayer development easier to reason about
  • The small details of feedback, spacing, and card movement matter as much as adding another feature
  • Deterministic game states turn difficult bugs into sequences that can be reproduced and tested

Available on the App Store

Download Durak

Free to play, with online and offline games and no ads.