Blog
Notes from building apps on my own. What shipped, what broke, and the decisions I'd make differently next time.
Test your comic server before you pay: where I put ComicFlow's paywall
ComicFlow 3.7 reads from Komga, Kavita and OPDS servers, and all of it is part of Pro. A paid feature that depends on someone else's setup has an obvious risk: you pay, and it doesn't connect. So the paywall waits until your server has answered. Getting the one sentence that explains this right took me three tries.
Read it →Captain Rojo can't see your cards: testing that a game AI doesn't cheat
Every game in Peekaboard is about a secret: a hidden fleet, five dice under a cup, a hand of cards. The computer player sits at the same table. Here is how it only ever gets what a player in its seat would know, and the tests that fail if it could peek.
Read it →Folding iPhone Duo into a small laptop for my Mac
Uplid stands iPhone Duo up like a tiny MacBook: my Mac on the top half through the Screen Sharing built into macOS, a Mac keyboard and trackpad on the bottom half. How it talks to the Mac, how the trackpad got its feel, and why the store screenshots use Apple's own product images.
Read it →One manga page folded, a whole spread open: ComicFlow on iPhone Duo
This week a lot of people noticed that a folded iPhone Duo is about the shape of one manga page, and that it opens into two. I'd been building ComicFlow around that shape since September. Here's the story of that work, including the small gap in the middle I fussed over most.
Read it →Komga, Kavita and OPDS on a real iPhone: the device pass before ComicFlow 3.7
ComicFlow 3.7 reads comics straight from your own Komga, Kavita or OPDS server. Before it shipped I ran it on an iPhone against real servers on my Mac. Most of it passed. Three things didn't, and none of them was where I expected.
Read it →Ten App Store screenshots that read as one comic
For ComicFlow 3.6 I replaced ten separate App Store screenshots with one comic that runs across all of them, starring Kaede, a heroine with a paper katana. How she and her made-up library came together, and what it took to ship the set in 18 languages.
Read it →Hiding a fleet on iPhone Duo, before I could hold one
Peekaboard is a naval duel for two people and one phone. On iPhone Duo you fold your half up towards you to peek at your fleet. I built it in less than a week, for a phone that isn't on sale until 23 October.
Read it →App Store screenshots for a camera app, from a simulator with no camera
Fold Cue records you while you read, so every screen worth showing has a camera picture in it. The iPhone Duo simulator has no camera, and the phone isn't on sale yet. Here is how the screenshots got made, and what I decided not to show.
Read it →Designing Fold Cue around an outer screen I can't test yet
Fold Cue's best feature on iPhone Duo is the script on the outer screen, beside the camera. The system decides when that screen is mine, and I won't hold a Duo until it goes on sale. So the app is designed to be fine without it.
Read it →Following a voice through a script, on the device
Fold Cue's script scrolls as you speak and waits when you stop. The hard part isn't hearing the words. It's deciding where in the script the speaker is right now, and never guessing out loud.
Read it →Takes that survive a phone call, and captions spelled the way you wrote them
Fold Cue records with an asset writer rather than the simple movie output, feeds the same microphone audio to the recording and to speech recognition, and keeps everything on one clock. That one decision is what makes crash-safe takes, trimmed commands and script-perfect captions possible.
Read it →The teleprompter text that cost more than the camera
Fold Cue froze for seconds every time I rotated my phone. Two of the causes were visible in the code without any tools. The biggest one only showed up in a trace: the scrolling script was being redrawn on the main thread, over and over.
Read it →What Fold Cue would never cut, and what it isn't trying to be
Fold Cue was planned in a hurry, for a phone that isn't out yet. The most useful part of the plan wasn't the feature list. It was deciding in advance what would never be traded away when time ran short, and what the app wasn't going to try to be.
Read it →I'm building apps for a phone I haven't held yet
iPhone Duo isn't in anyone's hands yet, and I'm already building for it. Why now, what makes an app a Duo app rather than a big phone app, and the kinds of app I've decided not to build.
Read it →The lines that made ComicFlow assume every iPhone was the same shape
Running ComicFlow in the iPhone Duo simulator showed stretched layouts, phone-sized covers and a reader that decided on spreads by orientation. The Duo exposed them, but several of the bugs were already shipping on iPad.
Read it →The iPhone Duo's inner screen is drawn larger than its panel
The simulator, App Store Connect and Apple's spec sheet give different pixel sizes for the iPhone Duo's inner display. None of them is wrong. The simplest explanation is that the system renders larger than the panel and scales down, which is one more reason to lay out in points.
Read it →On iPhone Duo, the outer screen belongs to apps using the camera
Third-party apps can show interactive content on the iPhone Duo's outer screen while they run on the inner one, but only through a camera capture accessory. That one rule decides which Duo ideas are possible, and it closed off a few I wanted to build.
Read it →Reading the hinge on iPhone Duo, and designing around what Apple won't promise
iOS 27.1 gives every app the iPhone Duo's hinge status and a live angle, with no entitlement. The API is small. The interesting part is the one promise Apple leaves out, and how to design an interaction that doesn't need it.
Read it →Setting up the iPhone Duo simulator, and the things that tripped me up
The iPhone Duo simulator ships in the Xcode 27.1 beta. Getting it running took one surprise from xip, a renamed Simulator app, a permission error on my external drive, a noisy first boot, and screenshots that came out black.
Read it →The Bug I Was Certain I Had, and the Six I Actually Had
ComicFlow 3.4 was finished when a paying reader said a comic would not open. I was sure the cause was RAR5. It was six mundane things wearing the same blank page, because one catch block had been swallowing every error since the reader's first commit.
Read it →A One-Star Review, and the Eight Bytes That Fixed It
A reader said ComicFlow didn't recognise 90% of his comic files. He was right, and every one of those files was fine. I was routing archives by their filename instead of reading what was actually inside them.
Read it →Measuring Light With an iPhone, and Admitting How Wrong It Might Be
iOS won't give third-party apps the ambient light sensor. You can derive lux from the camera's exposure metering instead, but the number is soft. Building Solspot was mostly about what to do with that.
Read it →Nine Apps, Five Different StoreKit Shapes
Paid up front, paid plus an unlock, free plus an unlock, free plus consumable credits, free plus a subscription. What each one costs you in code, and the one I removed after shipping it.
Read it →Three of My Apps Had the Wrong Price on My Own Website
Mino was listed as free while charging $2.99. Timeflip charged $0.99 while being free. Nobody noticed for months, because nothing was comparing the pages to the store. Here's the 150 lines that now do.
Read it →ComicFlow 3.0: Send Comics to Your E-Reader, Lock Private Shelves, and Export to CBZ
ComicFlow 3.0 adds EPUB export for Kobo, Boox and reMarkable, Face ID-locked collections, reader presets, and CBZ export in the $2.99 app. Still one-time, still offline, still no subscription.
Read it →Why I Built ComicFlow (And What I Learned Shipping a Niche iOS App)
I'm an indie iOS dev. I shipped a comic reader to a market dominated by Panels and Shonen Jump. Here are the unsexy decisions that made it work, and the mistakes I made along the way.
Read it →