All work

Mobile AppsCase study

Tagda Fun: A Casual Mini-Game App for Android, Built Solo

A free, offline-first Android app of casual games, from Sher aur Bakri to kite fighting, with XP, daily challenges and a coin shop. Built and released solo.

Role
Solo: design, development and release
Client
Own product
Year
2026
Status
Live on Google Play
  • React Native
  • Expo
  • TypeScript
  • React Navigation
  • React Context
  • AsyncStorage
  • React Native Skia
  • Reanimated
  • Unity LevelPlay
  • EAS Build

What it is

Tagda Fun is a free Android app with casual mini games in one place, leaning on desi favourites. Around the games sits a progression system: XP and levels, achievements, a daily challenge, a daily gift, and a shop where players spend in-game coins on skins, themes and power-ups.

It started in 2025 as a few simple party games and grew release by release into a full game app. I built it alone, from the first screen to the Play Store release. The app also has its own website, tagdafun.devmanushraky.com, with the games, screenshots, privacy policy and contact page.

  • Tagda Fun home screen with the daily challenge and game cards
  • Sher aur Bakri, a village strategy game on a lattice board
  • Patang Baazi, a kite fighting game
  • Bubble Shooter with a board of coloured bubbles
  • Memory Cards level with hidden pairs and bombs
  • The shop with the daily gift and power-ups
Home, Sher aur Bakri, Patang Baazi, Bubble Shooter, Memory Cards and the shop.

The games

Seven games are on the Play Store, and an eighth is built and coming next.

Offline and private by design

There is no account and no backend. Games, progress and an optional nickname stay on the phone, and the games work without a connection. Only the ads need the network. The app asks for no Android permissions.

It collects no personal data of its own. The ads SDK may collect device information such as the advertising ID, and the privacy policy says so. Coins have no real-world value, nothing costs real money, and two-player games give no coins.

How it is built

Problems I hit and fixed

Coins and XP were sometimes lost

Symptom
After a quick second action, such as two fast coin flips or an ad bonus arriving during a save, a player could end up with fewer coins or XP than they had earned.
Root cause
Each change started from the stats it had read earlier, so a slower save could overwrite a newer one.
Every change now starts from the latest stats and saves run one at a time in a queue. Double taps on the daily gift, the daily challenge and the shop can no longer pay or charge twice.

Players got stuck at the maximum level

Symptom
Players saw 'Max level' at 6,600 XP and could not progress.
Root cause
The level table had 11 entries, and the code stopped at the last one.
Levels now continue without a limit, and each level after 11 needs 300 XP more than the one before.

Saved coins could be edited by hand

Symptom
Anyone who edited the phone's stored data could change their coins, XP and shop items.
Root cause
They were saved as plain numbers.
Coins, XP and shop ownership are now saved with a signature. Bad numbers reset to 0, and a failed save or a broken history never stops a game from finishing.

Two games crashed in Expo Go

Symptom
Tic-Tac-Toe and Rassa Kashi crashed as soon as a game started, but only in Expo Go.
Root cause
Expo Go cannot run the native ads SDK, so the app uses a stand-in, and the stand-in was missing the interstitial ad class.
Added the missing class to the stand-in. Store builds were never affected.

Android production builds ran out of memory

Symptom
EAS production builds for Android failed.
Root cause
The build ran out of memory.
Raised the memory settings for the Gradle and EAS build.

Game design details

What I did

More mobile work: CourtKonnect, an AI sports matchmaking app and Gaadi Vritant, a fleet management app. Both are React Native. See what I build for mobile.

Need a mobile app built?

If you have an app idea, I can take it from design to the Play Store, the way I did with Tagda Fun. Tell me about it on the contact page.