BUILDING IN KOREA
Manballers Devlog — Episode 10
The Moment I Thought It Was Finished Was Actually the Start
The map loaded, login worked, check-ins went up, ratings came in. I thought that meant I was done. It wasn’t even close.
Looking back, I was working off a false assumption: that finishing the features meant finishing the app. The map loaded. Login worked. Check-in photos went up. Ratings came in. Every time I switched on a new screen, I got a little thrill from “wait, this actually works?” But none of that was the finish line. It wasn’t even the start of one.
01
The Illusion of “Ready to Show Someone”
After Episode 9, having stripped features back down to the original purpose, I felt genuinely proud of where things stood. This felt like enough. An app I’d started building with my in-laws in mind was actually running, in my hand, for real.
So I moved to the next step: putting it into someone else’s hands.
That’s where the world changed completely.
02
The First Real Build
The first thing I learned: everything I’d tested up to this point was just my phone connecting live to my own development server. Turning that into an actual installable file — the kind real people download the way they’d download anything from a store — was an entirely separate process.
The first time I typed the build command, an unfamiliar progress bar appeared, and something that looked like a QR code got drawn into the console. It was fascinating and a little frightening at once — is this actually going to become a real app? I sat there for ten, twenty minutes, doing nothing but waiting. Long enough to finish a full cup of coffee.
When the build finished and a link appeared, I genuinely felt something catch in my throat. This was real. I tapped download, and a real icon appeared on my phone. Not a website. Not a dev server. An actual, installed app.
03
The First Crack — One Tablet Broke Everything
Confident, I sent the link to a few acquaintances. One of them tested it on a Galaxy tablet and sent back a screenshot. The bottom menu bar was smashed together with the system navigation buttons, half-overlapping and unreadable.
“Wait — it looks fine on my phone?”
This is where I learned that Android isn’t one thing. iPhones come in a handful of variants; Android’s screen-margin math turns out completely differently depending on manufacturer, model, and — for foldables — even whether the screen is open or closed. I adjusted a number and rebuilt. Got a new screenshot. Still overlapping. Adjusted again. Still overlapping.
Eventually I got to the point of printing a debug value directly onto the screen in green text — the number the device itself was reporting as its required margin — just to see the raw truth. Like taking an X-ray, I baked debug numbers straight into the app screen, rebuilt, got a photo, rebuilt again. What I eventually found out was almost anticlimactic: this wasn’t my code’s fault at all. It was a known bug in the current Android version itself — one that only got properly fixed in a version of my development framework that had shipped just months earlier. Once I confirmed that, I let it go for now. That story gets its own episode later — it turned into a much longer fight than I expected.
04
The Fear of Login Failing “Sometimes”
The second crack was more unsettling. One tester, using a spare test phone with no KakaoTalk app installed, tried to log in and sent me a screenshot: the screen flashed white with an unfamiliar error page reading “Unmatched Route,” then bounced back into the app.
The automatic login I’d fought so hard to build in Episode 7 was breaking down again — specifically when KakaoTalk wasn’t installed. Falling back to email-and-password login triggered an extra Kakao security screen — “login attempted from a new device” — and somewhere inside that extra confirmation step, my app was misreading it as a canceled login.
What made this genuinely absurd was that nothing was actually broken. The problem was that the system was being too secure. I couldn’t eliminate it entirely, so I settled for a compromise: at minimum, show a clear reason when login fails. I also had to ask testers directly to log in through the KakaoTalk app whenever possible. Not a clean fix — a practical trade-off. Moments like this were adding up into a realization: building an app alone with AI, without a developer, isn’t a romantic story. It’s an ongoing string of small negotiations like this one.
Building an app alone with AI isn’t a romantic story. It’s an ongoing string of small negotiations.
05
The Day Photos Suddenly Stopped Uploading
The third crack came out of nowhere. One day, uploading a check-in photo threw a “permission denied” error. It had worked fine the day before. Why now?
It turned out I’d never actually defined proper rules for how Firebase — my app’s data storage — should handle photo files. A default “temporary access allowed for 30 days” rule, quietly attached when the project was first created, had been covering for me the whole time without my noticing. Once that grace period expired, uploads simply stopped.
This one actually worked out well. It became the reason I finally wrote real rules: anyone can view, but only image files, capped at 10MB, and no editing or deleting once uploaded. A gap that had been sitting open the whole time got caught and closed before it became a real problem.
06
Why Does the Map Sometimes Load Blank?
And then the problem that took the longest. On some phones, the neighborhood map screen just loaded blank. No error message. Just an empty white screen.
Digging into it, the actual cause was how I was drawing the map in the first place. Up to this point, the HTML that renders the map was being built and injected directly inside the app’s own code. But the map service — Kakao Map — has a security policy: it checks which website the code is actually running from, and if that site isn’t registered, it silently refuses to draw anything. My setup wasn’t running from any website at all — it was just inside an app. It was always going to get flagged.
Fixing this properly meant tearing out and rebuilding how the map lived inside the app entirely. That story continues next episode — it turned into a much longer journey than I expected.
07
What Other People’s Hands Taught Me
One thing stuck with me through all of this. No matter how carefully I check something myself, there are problems I will simply never see. I always opened the app on the same phone, the same account, in the same order. Other people opened it on different devices, without KakaoTalk installed, in a different order entirely — and in those gaps, cracks I never imagined kept surfacing.
Honestly, this stretch wore me down. Cycling through build, wait, get a screenshot, fix, repeat — several times a day — sometimes it felt like no real progress was happening at all. Looking back now, I think this actually was the real development process. Filling in these invisible gaps, one at a time, took far longer and mattered far more than building any flashy new feature ever did.
Up Next
Episode 11 — Moving the Map to a Real Home, and the Night the Code Disappeared
Giving the map an actual address to live at — and a genuinely frightening night when 700 lines of code quietly became 40.