Blog

Notes from building apps on my own. What shipped, what broke, and the decisions I'd make differently next time.

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 Free CBZ Export

ComicFlow 3.0 adds EPUB export for Kobo, Boox and reMarkable, Face ID-locked collections, reader presets, and free CBZ export. 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 →