Projects

Prism Defense (프리즘 디펜스)

A random merge tower-defense game in which you draw, merge, and turn the board around. I ship and operate it from a single Flutter codebase on the App Store, Google Play, and as a Toss Apps-in-Toss mini app.

At a glance

Item Details
Period 2026.07 – present · solo development
Channels App Store (iOS, released August 2026) · Google Play (Android, released to production after closed testing) · Toss Apps-in-Toss game mini app (released 2026-09-22)
Google Play Last 28 days (8/30 ~ 9/26, phones): 3.1K device impressions · 22 device acquisitions · 25 monthly active devices · 23.15% store listing conversion rate
App Store Analytics overview (through September 26): 822 impressions · 77 product page views · 13 first-time downloads · 5 redownloads
Links App Store · Google Play
Stack Flutter / Dart, rendered with a single CustomPaint and no game engine or bitmap assets · Flutter web build with a TypeScript bridge for Apps-in-Toss · Firebase Analytics and Crashlytics · RevenueCat · Korean and English
Architecture All game rules are separated into a deterministic simulation that does not depend on Flutter. The same seed always gives the same result, which makes a daily challenge where every player gets the same board possible and lets most of the logic be tested without widgets.
Quality 95% test coverage (CI floor 90%) · a balance harness in which seven scripted bots each auto-play 100 seeds · 750 commits and 113 merged PRs (as of 2026-09-28)
Monetization Rewarded ads (revive, double reward) and frequency-capped interstitials · a lifetime Premium pass (RevenueCat) · no pay-to-win sales of stats

The first six days on Apps-in-Toss

From 2026-09-22 to 27, according to the Apps-in-Toss console dashboard.

Metric Value
New users 78
Daily active users 6 ~ 20
Share of new users arriving from Toss's "All" tab About 88% (71/81)
Next-day return (D1) 4 / 61

Project story

How did the project start?

Random merge defense games in the vein of Random Dice already have proven demand and long-term retention in the Korean market, and they sustain repeat play without a server or a steady stream of content updates. That is what made me start.

I made the first commit on July 18, 2026. Claude Fable had just been introduced, so I gave it five hours of autonomous work to build the first playable version, and then took on design review, balance verification, and on-device testing myself. I chose to draw every screen with a single Flutter CustomPaint and no separate assets, which lets me run iOS, Android, and the web from one codebase.

After the first version I moved step by step through the work that reaches real users: the store launch, closed-testing feedback, ads and in-app purchases, and the port to Toss Apps-in-Toss.

What was the biggest problem, and how did you solve it?

The biggest problem came when I ported the Flutter web build to a Toss Apps-in-Toss mini app: inside the Toss app on a real device, there was no sound at all. Instead of changing WebView settings on guesswork, I built two diagnostic pages that ran inside the Toss WebView and measured what actually happened.

The measurements showed that the playback API reported success, yet nothing was audible until the first playback started inside a user touch. So I changed the game to play one short sound effect on the first touch to wake the audio output. That brought the background music back, but the sound effects were still silent.

The cause was the structure: 28 sound-effect players each used their own audio element and AudioContext. I reimplemented the effects as pre-decoded buffers played through one shared AudioContext, which cut 29 contexts down to 1. After that, both the music and the effects played on the real device, and the stutter I had been noticing went down as well. Work that started as a way to reach one more platform ended up reducing the stutter in the web build too.

How did you find your first users?

My friends helped a lot. Unlike with the apps I had released before, my friends found the game fun from the early prototype, played it against each other, and the ones who are something of influencers promoted it on their social media.

Launching on Toss Apps-in-Toss also brought in a good amount of traffic. In the six days after launch, 78 new users arrived without any promotion.

It is still far from enough, though: once more users gather, I will add a leaderboard to raise the return rate, and I am considering running app ads as well.