Journal · Development · 8 min · 25 October 2026

How two people built a dark fantasy idle RPG in one week

The making of Reincarnation 100: an idle RPG written in seven days with React Native and Skia, rejected by Google Play on day four, fixed the same afternoon, and shipped in six languages.

The first commit of Reincarnation 100 is dated 18 October 2026. Seven days and sixty commits later, version 1.4.0 was in review on Google Play with ten circles of hell, ten bosses, a final boss with a hundred lives and a store page in six languages. Two people wrote it. This is how it went, including the parts that broke.

The idea: an idle game where dying is the point

Most idle RPGs treat the reset as a chore you put up with: the prestige button. We wanted the reset to be the story. Your paladin is summoned to hell by the goddess Lysandra and fights on their own, even offline. Every death makes them stronger. The rebirth counter goes from 1 to 100, and the whole game is built around that number.

That gave us the structure in one sentence: beat the stage 50 boss to earn your first rebirth, then go all the way down to stage 100 and face the King of Hell.

Day one: the engine before the art

The game is written in JavaScript with Expo and React Native, and the combat is drawn with Skia. The very first day went into the engine, not the graphics: damage, critical hits, weak points, gold, upgrades, offline progress and a save format that would survive future versions. The engine is a set of pure functions with tests around it, which is what let us change the rules every day afterwards without breaking players’ saves. By the end of the week it had grown to 88 tests, including one that loads saves from older versions of the game.

Ten circles, ten bosses

Hell is split into ten circles of ten stages. Each circle has its own arena, weather, enemies and, since 1.4.0, its own event. Every boss has a mechanic you have to answer: a mist that turns blades aside, a shell that only bare hands can crack, a reflect that punishes careless tapping. When a boss falls it leaves a random favor, such as double gold for two minutes or a burst of attack.

The arenas are painted backgrounds, and we wanted them to feel deep without building 3D scenes. We ran each one through Depth-Anything, a depth estimation model, to get a depth map, then a small shader shifts every pixel by its depth. The same trick runs the descent on our home page. The idle animations were smoothed with RIFE frame interpolation, and the bosses and monsters were upscaled with Real-ESRGAN so they hold up on large phones.

Day four: rejected by Google Play

We submitted on 21 October. Less than two hours later, Google Play rejected the app: “the app doesn’t open or doesn’t load”. The proof was a screenshot of the Android splash screen, nothing else.

On our phones the game started in two seconds. So we rented the phone Google uses. Firebase Test Lab runs an automated explorer, Robo, on real devices, and on a Galaxy A04s, an entry-level Android 14 phone, it reproduced the rejection exactly: one screenshot of the splash screen, then nothing. The cause was ours. The whole game, with its animated weather and effects, was mounted underneath the title screen, and on a budget phone those animations saturated the display thread. The robot could not even read the screen.

The fix was to mount the game only after the player presses Start. Same afternoon, new build, new Robo run: 16 actions across 9 screens instead of being stuck. Since then every Android build goes through that same Galaxy A04s before it goes anywhere near the store.

Day eight: the crash we never shipped

Version 1.4.0 moved to a new Expo SDK. The build passed, the tests passed, the game ran in development. The Robo test on the Galaxy A04s crashed on launch, on every device. The new Android template turns on R8, a code shrinker, by default, and R8 had removed a class that Android’s background work library needs at startup. Nobody would have seen it on a development build. We turned R8 off again, rebuilt, and the robot was back to exploring the game. That build is the one that went to review.

The King with a hundred lives

The first version ended with a seal: after a hundred rebirths, the seal protecting the King breaks. It worked, but it made the final boss a wall you waited behind. In 1.4.0 the King of Hell has a hundred reincarnations of his own. Every one you take from him drags you down into a new life, and the hundredth ends him. He also remembers what beat him: the kind of damage, the path and the blessing you used. We wrote more about that change in why the final boss has 100 lives.

What we would tell another small team

Reincarnation 100 is free on Android. If you want to see what a week of work looks like, the descent through the ten circles is the first thing on this site, and the game is on Reincarnation 100 on Google Play.