Another dev blog: mistakes and growth in indie games
Notes from a one-person studio making free Android games: word and card games, idle games and RPGs, publishing on Google Play, AdMob, and the ideas that failed.
- Indie business
Six months of making Android games: 17 games, the real numbers, and what's next
An honest six-month retrospective on 17 Android games: daily players, revenue, what earns, real search rankings, and the lessons I'd give myself.
- Indie business
Cross-promotion between my own games: building a 'More games' sheet
How a shared More games sheet links each Android game to its siblings, grouped by audience, with a live list from uyllii.com, referrer tags, and the bugs.
- Ads and monetization
My first in-app purchases: what two Remove Ads sales taught me
The first two in-app purchases across my Android games: a Genesis Remove Ads in Denmark and a Word Slide sale in Italy within a day of translation. What they changed.
- Game design
Idle Fishing Empire: a generational fishing tycoon with a moral fork and no time gates
Designing Idle Fishing Empire: heirs across generations, sustainable vs destructive fishing, logistic fish stocks, five endings, human-cadence sims, and no time gates.
- Indie business
Idle game players are all-or-nothing: why average playtime lies
Analysing real Genesis players by hooked vs bounced instead of averages. What the first sessions show, where hooked players stop, and the signpost that fixed it.
- Engineering
Stop the Google Play Games sign-in popup at launch: remove PlayGamesInitProvider
Why the Play Games sheet still appears when your game opens even if your code waits, and the AndroidManifest fix that removes PlayGamesInitProvider (with a check).
- Ads and monetization
Rewarded ads in an idle game: why my first boost paid nothing, and where interstitials belong
Designing ads for an idle game: a rewarded boost that actually rewards, interstitials that respect the prestige loop, and a Remove Ads offer that sells speed.
- Game design
Revisiting Genesis: giving an idle game an ending and finally shipping it
How I un-parked my idle game: fixed scope with an ending, a simulator that plays like a human, value pricing, and a privacy-policy rejection on release day.
- Engineering
My puzzle game used more battery than YouTube: an idle screen should draw zero frames
Moonlit Garden drained 7% battery in 38 minutes. Endless CSS animations on blurred layers and an AudioContext that never slept. How I measured and fixed every game.
- Game design
Wordhoard: designing a word roguelike that isn't 'Balatro with letters'
Wordhoard, a word roguelike in an illuminated manuscript: rarity from word frequency, a broken charm combo the sim missed, and sounds that weren't gunshots.
- Game design
Minesweeper Rogue: a no-guess minesweeper roguelike where the rules change what numbers mean
Designing Minesweeper Rogue: tunnels, stacking rules like liar and knight numbers, a solver that keeps every level no-guess, fuses that count digs, and phone-only bugs.
- Engineering
Closing an ad tapped the game underneath: a tap guard for AdMob in Capacitor games
When the touch that closes a rewarded or interstitial ad lands on your game's buttons. How a capture-phase tap guard fixed it in every game the same day.
- Publishing on Google Play
Rogue Video Poker: a roguelite video poker game, and how it got rated PEGI 3 by mistake
Designing a video poker roguelite with machine chips and bosses, then fixing a wrong IARC content rating, simulated gambling rules, and seven countries that ban it.
- Postmortems
Postmortem: Eldritch Survivors, the 3D survivors-like that crashed older phones
Why my cosmic-horror Vampire Survivors-like is shelved: the design, a 3D asset pipeline, a WebGL context loss on an older phone, and what I'd change.
- Engineering
Fully animated 3D battles in a mobile web game with three.js and CC0 KayKit models
Animated 3D fights with three.js in a Capacitor game: CC0 KayKit characters on a shared skeleton, meshopt from 23 MB to 2.4 MB, and the bugs on the way.
- Game design
Backpack Battle: balancing an autobattler so no class beats every other class
Balancing Backpack Battle, an inventory autobattler: a class-vs-class sim matrix, survivorship bias in balance tests, a counter triangle, first-fight fairness.
- Engineering
Emberfall on real phones: fixing an 88 ms frame, pixel-art coastlines, and readable fonts
Technical lessons from Emberfall: a canvas water layer that killed frame rate on phones, blending tile edges, readable pixel fonts, a battle sim, and Bluetooth audio.
- Game design
Emberfall: making a retro offline JRPG with a story, five chapters and a 99-cent unlock
Emberfall is a retro turn-based JRPG with a real ending. Why a Kemco-style RPG, the story, Auto battle for older players, and pricing chapters at $0.99 or two videos.
- Engineering
Walk cycles that wouldn't walk: animating 2D heroes with a code rig
Why generated sprite-sheet walk cycles failed for Tavern Heroes, and how a cut-out rig posed in code replaced them. Plus the clothing, joint and cache bugs on the way.
- Game design
Tavern Heroes: building an offline idle RPG, and abandoning a painted town after three attempts
The design of Tavern Heroes, a Soda Dungeon-style idle RPG with no gacha: missions, retirement for Renown, a sim before art, and why the game became menu-only.
- Postmortems
Sovereign postmortem: a paid ads test, a polished game, and 44 cents
I launched my most polished game with A$200 of Google Ads as a test. It earned A$0.44. The numbers, the four mistakes, and why I'm done paying for installs.
- Game design
Sovereign: building a polished no-guess Queens puzzle, and launching it with a paid ads test
How Sovereign generates Queens logic puzzles that never need a guess, its six modes and async replay races, and why its launch is a deliberate paid-ads experiment.
- Postmortems
Parking my idle game: when the maths of idle growth beat me (for now)
Why I parked Genesis after weeks of tuning: a prestige loop that collapsed to 3-second resets, a tuner chasing moving targets, and no ending to aim for.
- Game design
Balancing an idle game with a simulator (and the month my bot cheated)
How Genesis is balanced by a headless simulator and an auto-tuner, the bugs that made the bot a player who couldn't exist, and why the sim must play like a human.
- Engineering
Exact offline progress in an idle game: a closed-form solution instead of a replay loop
How Genesis computes offline earnings exactly with a closed-form solution to its producer chain, the soft cap that keeps it fair, and Android WebView canvas traps.
- Game design
Genesis: designing an idle game about the evolution of life
The design of Genesis, an incremental idle game: an 8-tier producer cascade, a DNA strand prestige layer, crucibles built to be failed first, and three chapters.
- Publishing on Google Play
Localizing a mobile game into 12 languages (and why translated screenshots matter)
How every game here ships in 12 languages, with keyword titles per locale, translated screenshots and feature graphics, and the translation mistakes that slipped through.
- Engineering
No-guess Minesweeper: generating boards you can always solve by logic
How the Minesweeper app builds no-guess boards with a logic solver, why the first dig is always safe, and why a second-chance rewarded ad suits the genre.
- Game design
Word Slide and Word Push: inventing a word puzzle, and the playtest that said it was far too hard
Two word puzzles built on the Loopover row-and-column slide. Generating 2,000 levels with exact par, why a solver's par says nothing about humans, and naming.
- Publishing on Google Play
Automating a Google Play launch: from a 60-minute checklist to zero manual steps
How I turned publishing an Android game into a resumable pipeline of checked steps across Play Console, AdMob, RevenueCat and Firebase, including browser automation.
- Game design
Bible Word Search: a themed fork in two hours, Bible translation licensing, and curating 30,000 verses
Building Bible Word Search from the Word Search engine. Why not the NIV, verse-based levels, a Whole Bible mode, content ratings, and which ad categories to block.
- Ads and monetization
The AdMob consent bug that meant no ad ever loaded
My first word games shipped with a UMP consent setup error that stopped every ad loading worldwide. How I found it, fixed it, and the check that stops it now.
- Publishing on Google Play
Your first Google Play submission: every App content declaration, explained
What Google Play asks before your first game goes live: data safety, ads, IARC rating, target audience and advertising ID, and the answers I gave.
- Engineering
FreeCell: recreating Microsoft's deal numbers, a hint solver, and a store rejection for writing #1
How FreeCell deals are numbered (the LCG behind game #617 and #11982), a best-first hint solver, saving undo with the game, and a Google Play metadata rejection.
- Game design
Spider Solitaire for Android: free undo, a bot that plays 800 games, and why landscape didn't help
Designing a Spider Solitaire app on a shared engine. Why undo is free, how 800 bot games test the rules, and what landscape mode really changes on phones.
- Engineering
Building a word search generator in TypeScript (where every word appears exactly once)
How the Word Search grid generator works: seeded puzzles, overlap scoring, frequency-weighted filler letters, and repairing accidental duplicate words.
- Indie business
Choosing a mobile game people actually search for: why I started with Word Search
How I pick Android game genres by search demand, why Word Search came first, and how one app becomes 15 store listings with local keywords like Sopa de letras.
- Indie business
Learning to make Android games by starting with the easy ones
Why my first games are word search, solitaire and minesweeper: learning the whole pipeline from code to Google Play, ads and players on games with known rules.
















