← All Projects

Solitaire Dark

The ad-supported twin of Classic Solitaire: the same forty-module core, a dark theme and a full mediation stack, compiled from one codebase behind a single build flag.

IndustryMobile Gaming
Product TypeMobile Game
PlatformiOS & Android
ModelAd-supported
ResultA second revenue stream at no extra maintenance cost
Solitaire Dark project hero image

The impact:

1
Shared codebase
2
Store listings
20
Languages
0
Ads code outside the flag

What this product is.

Solitaire Dark reaches the audience Classic deliberately does not: players who would rather watch advertising than pay. It ships as its own app, with its own package name, store listing and dark visual theme, and it is built from exactly the same repository as Classic.

PROJECT FACTS
IndustryMobile Gaming
Product TypeMobile Game
PlatformiOS & Android
ModelAd-supported
ResultA second revenue stream at no extra maintenance cost

What needed solving.

Serving both an ad-free and an ad-supported audience usually means forking the project, and a fork means every future feature is built twice and drifts apart within months. The commercial upside of a second listing is only worth having if it costs almost nothing to maintain.

How we approached it.

Instead of a fork, the two editions are build variants of one codebase. Every line of advertising code lives behind a single “DARK_APP” compilation flag, so the Classic binary physically cannot contain a mediation SDK, and YAML build configs select the package name, theme and Firebase project per variant. A feature written once ships to both apps; the ad stack exists in only one of them.

What's inside?

One codebase, two apps

Classic and Dark are build variants selected by YAML config — package name, theme, Firebase project and store listing all switch together.

Ad code fully isolated

Every advertising call site sits inside a “DARK_APP” conditional, enforced by review, so the ad-free build cannot ship a mediation SDK.

LevelPlay mediation

Multiple ad networks competing per impression, tuned through remote configuration rather than app updates.

Dark visual theme

A separate art and UI treatment that makes the two listings read as distinct products in the store.

Shared analytics model

Both editions report into the same GA4 event schema, so monetization models can be compared directly against each other.

Parallel release pipeline

The same CI workflow builds and ships both variants to their own Google Play and App Store listings.

Tools change. Standards don’t.

We choose the stack around the product — not the other way around.

  • Unity 6
  • C#
  • LevelPlay Mediation
  • Firebase
  • RevenueCat
  • Unity IAP
  • Google Analytics 4
  • Remote Config
  • GitHub Actions
  • Fastlane

Unity 6, C#, LevelPlay Mediation, Firebase, RevenueCat, Unity IAP, Google Analytics 4, Remote Config, GitHub Actions, Fastlane

What we handled.

We worked on the product development and implementation, focusing on building a polished, functional and user-friendly experience aligned with the goals of the product.

Build-variant architecture
Ad mediation integration
Monetization experiments
Dual-listing release management