Balancing a game usually works like this: you ship it, you wait, you watch a dashboard fill up with player deaths, and then you nudge a number and do it all again. That loop needs players. I did not have players. I had a tower-defense game I built in Flutter, an unreleased one, and a very specific question: is wave 20…
EN2026-07-19
I was building a real-time Flutter game — a tower-defense thing with a deterministic simulation core and a CustomPaint renderer on top. The kind of project where "does it feel right?" is a real engineering question, not a vibe. Enemies walk a path, towers fire on a clock, and if the clock drifts by a few frames the…
I wanted the same boring thing twice: pull my own chat history out of an AI product and save it as Markdown. Once for Claude, once for Gemini. Same author, same monorepo, same output format, same week. I assumed I'd write one script and copy-paste it with the hostname swapped. I ended up with two scripts that share…
EN2026-07-18
Autocomplete on an icon font is a very specific kind of comedy. You type LucideIcons. and the IDE proudly offers you 2,023 options with names like pencilSparkles, beefOff, and squirrel. Which of these is the icon you saw in the design mock? No idea. Alt-tab to lucide.dev, search, squint, alt-tab back, pick,…
Here is a small quiz. A user in Seoul types a card number that starts with 4599 2700. Your card-type detector looks at it and says, confidently: Visa. Is it wrong? No. Is it useful? Also no. In the Korean payments context, "Visa" is barely the beginning of the question. Which issuer — 신한카드? 현대카드? Is it a credit card…
Every CI publishing pipeline I have ever set up began the same way: generate a long-lived token on the registry website, paste it into the repo's secret store, and promise myself I'd rotate it someday. (Narrator: he did not rotate it.) I've paid for that pattern before. On an earlier npm project, my tag-driven publish…
Receipts are the most hostile documents in consumer computing. They're printed on thermal paper that fades in a glovebox, crumpled before they leave the store, photographed at 11 PM under a single kitchen bulb, and shaped like nothing else your image pipeline has met — a "tall" receipt can push past a 20:1 aspect…
For a while I thought "always edit the TurboModule spec before you touch native code" was just a discipline I'd imposed on my own React Native libraries. A convention. The kind of thing you write in CLAUDE.md and hope your future self respects. I even phrased it that way to myself: my house style. Then I tried to cut…
I sit on both sides of AI code review. On one side, I run AI reviewers over pull requests as part of my own tooling. On the other, my repos receive automated reviews from vendor bots — Codex, Copilot — whose comments I then have to triage. Living on the receiving end teaches you something the producing end desperately…
EN2026-07-17
I've been building a wake-up alarm app as a side project — a Flutter app whose whole premise is waking you with a voice message you (or someone who tolerates you) recorded. The one non-negotiable contract: the alarm sound fires at the scheduled time even if the app was never launched. If you've never built an alarm…
I've been building QuestKeeper, a small native iOS side project: a gamified to-do app where every task is a monster in a dungeon and missing a deadline kills your pixel hero. (Yes, I now do the dishes to keep a fictional character alive. It works disturbingly well.) Naturally, it needed a Home Screen widget — the…
KO / EN2026-07-17
Every React Native migration has a moment where somebody flips a flag, the app still launches, and the room collectively decides that the hard part must be over. This is a lovely moment. It is also a terrible time to stop looking. The New Architecture is not only a setting in your app configuration. It is a contract…
EN2026-07-16
Follow via RSS or receive new posts by email.