Classic Solitaire
Our Klondike solitaire, past 100K downloads on Google Play. One Unity codebase ships two apps to phones, desktop and the web, with a cosmetics shop, daily challenges, leaderboards, online duels and live ops.


100K+
downloads on Google Play
20
languages, every string length-checked by tests
39
feature modules in the Unity client
2
apps, Classic and Dark, from one codebase
- Product
- Our own game
- Stores
- Google Play, App Store, Microsoft Store
- Platforms
- Android, iOS, Windows and the web
- Our part
- Game, server, admin and releases
The brief.
Context
Classic Solitaire is our own game: Klondike for Android, iOS, Windows and the web, with more than 100,000 downloads on Google Play. Players dress the table with themes, card backs, court cards and suits bought with coins, play a daily challenge, climb leaderboards and take on other players in online duels. Solitaire Dark, the ad-supported edition, is built from the same code.
Challenge
Solitaire is a crowded category, and most titles earn by showing ads from the first deal. We wanted a game people keep for years and pay for by choice: cosmetics, Premium, and ads only for players who switch them on. That takes a steady flow of items, offers and news, from a team too small to ship an app update for each one.
Approach
The client is 39 independent Unity modules. A NestJS server over Firestore and Realtime Database owns prices, duels and player data. Shop catalogues, news, polls, promotions and support live in a FireCMS admin and Remote Config, so content goes out without a release. One CI pipeline builds both editions for every storefront.
A table you dress yourself.
Themes recolour the interface. Backgrounds, card backs, court-card characters, suits and win celebrations change separately, so two players rarely see the same table. Any item can be tried on a real deal before buying. Shelves open one by one, and the server prices each from a base, a step per shelf and a discount on Premium items.
- Nine shop categories, from card backs to leaderboard panels.
- Prices round to the nearest 100 coins.




A new deal every day.
Each day has one deal, the same for every player on the same rules. Winning it puts a medal in a monthly calendar, and 10 medals, 20 medals and a full month pay 100, 200 and 300 coins. Every deal is one the game's own hint engine has already won under the player's Draw 1, Draw 3 or Vegas rules.
- The day turns over at the player's local midnight, not at UTC.
- Past days of the month are open to Premium players.



Leaderboards with a panel of your own.
Leaderboards cover coins, wins, score, best time, fewest moves, daily medals, streaks and duel wins. Each tab shows the player's own place, and their panel stays pinned at the bottom of the list. Panels are cosmetics too, bought on shelves in the shop, some for Premium only. Premium players also carry a Premium badge.
- Players pick their own nickname and country flag.



A duel against a real player.
Online Duel pairs two players on the same deal for five minutes. Each move goes to the server, which shows the opponent's foundations, moves and score beside yours, settles the result and pays coins for winning, taking part and every card placed. There are no hints, undo or shuffle, and a short pause between taps keeps it fair.
- Both clients shuffle from one key the server stamps on the match.
- A server scan scores every player's statistics, wallet and purchases for impossible numbers.




Reasons to come back tomorrow.
A daily bonus grows from 10 to 150 coins over six days in a row, and free coins refill every four hours. The daily challenge, the leaderboards and the win and login streaks all reward showing up again. The profile keeps the record: games, wins, best time and score, streaks and everything collected.
- Premium doubles the daily bonus.
- Statistics and purchases come back on a new device through cloud restore.



Content ships without a release.
Most of what changes week to week lives in a FireCMS admin on top of the same Firestore the server uses. Remote Config switches features on per platform. Support is a chat inside the game whose threads land in the same admin.
Catalogue
Items, shelves and pricing knobs, edited in the admin and live without an update.
Seasonal decor
Store badges and the shop button's art, switched on for a season from the admin.
News and polls
Posts and one-question polls shown inside the game.
Promotions
Promo popups, last-call offers and promo codes, aimed at player segments.
Support chat
Players write from the game; replies arrive in the same thread.
Remote Config
Feature switches and tuning values per platform and edition.
One codebase, every storefront.
Classic and Dark, phone, desktop and web builds all come from one repository. Nothing is uploaded by hand: CI runs the tests, builds each target and sends it to its store.
Tests
EditMode and PlayMode suites, including string-length checks for all 20 languages.
Android
Signed bundles for Google Play and RuStore.
iOS
Xcode builds through Fastlane for the App Store.
Windows
Packages for the Microsoft Store through Partner Center.
Web
WebGL builds for Firebase Hosting, Yandex Games and Telegram.
What we built.
Our part
- Game, shop and economy design
- Unity client built from 39 feature modules
- NestJS server: prices, duels, cheat scoring
- FireCMS admin and live ops
- CI/CD to every storefront
- Player support inside the game
Stack
- Game
- Unity 6
- C#
- Addressables
- Server
- NestJS
- TypeScript
- Firestore
- Firebase Realtime Database
- Live ops
- FireCMS
- Firebase Remote Config
- Google Analytics 4
- Payments and ads
- RevenueCat
- Unity IAP
- LevelPlay
- Release
- GitHub Actions
- Fastlane
- Google Play
- App Store
- Microsoft Store
Building a game that should last for years?
Let's build it together.
We design the economy, the server and the live-ops tools along with the game, so content keeps shipping after launch.







