One step short of blinking
Fridays are for what shipped and what broke. This week was all about the paywall.
New territory
Subscriptions are new territory for me. Until now I had a couple of tip jars here and there, waiting quietly for some adventurous user to find them buried in Settings. Camaïeu is different: subscriptions, the RevenueCat SDK, and all. So I skimmed Apple's docs, watched a few tutorials, wrote a plan and began coding politely asked Claude to write the code.
What a new user sees
Camaïeu has a free tier I'm happy with: one shape family, two moods, three colors, every mode (ambient, focus, breath), and a still export. You can use it for as long as you like without subscribing. The subscription buys range: the other families, the two-color moods, the rest of the wheel, the video loop, new favorites.
The problem was where the free things lived. The ten color dots sit in wheel order, and the three free ones happened to be dots three, seven and nine. The two free moods were the last two of four. Everything premium was dimmed to forty percent, but dimmed and mixed in, so the first thing a thumb reaches for is usually something it can't have. One tap, and there's the sheet: monthly, yearly, seven days free. Four seconds after launch, before the app has shown a single thing it does for free.
For an app that takes pride in slow motion, a breath pacer and a focus timer, that felt aggressive. It was one step short of blinking.
Three small moves
Yours first. Each strip now shows the free set first, then a hairline, then the rest. The colors keep their wheel order inside each half; the moods go Mono, Grayscale, then the two-color ones. If you subscribe, the order doesn't change; only the hairline goes. Nothing reshuffles under your finger the moment you pay. The ordering lives in the one pure file that already knew what was free; the views just draw it.
Look before you're asked. Tapping a dimmed color used to open the sheet. Now it nudges: a light tap under the finger, and the premium group lifts to full brightness for a second and a half, then settles back. Here it is; it isn't yours yet. Tap again within a few seconds and you get the sheet. Browsing is free; intent is asked twice. Saving a new favorite or exporting the video still opens the sheet at once: those are acts, not browsing. VoiceOver users get the sheet on the first activation, because the label already says "requires subscription" and a silent double-tap rule would be a trap.
One invitation, late. The app now brings the subscription up itself exactly once: on the fifth launch. If you've come back four times to the free set, a small sheet asks "A week of everything?" A couple of seconds after the field appears, only if nothing is running and nothing is open, and only after RevenueCat has actually answered whether you're subscribed. "Not now" is final. A swipe is final. "Show me" opens the real paywall. Five launches is a number I'll revisit with data; the principle won't move.
Hints, not onboarding
The answer to last week's question came back in favour of hints, so that's what shipped: three wordless glyphs for framing, composing and recentring, shown once each, no walkthrough. The app still explains itself; it just points now.
A bug that was not a bug
I spent some time fixing a bug that wasn't one. Restore Purchases told me "No active subscription found" after I deleted and reinstalled. It turned out to be the sandbox clock, another new thing for me. Test subscriptions renew every five minutes and stop after twelve renewals, so an hour after buying, it had simply expired. The message was correct. I wrote the whole thing down as a test plan, restore matrix, Family Sharing via a sandbox test family, offer codes for the judges, because I will have forgotten all this by October.
Oh, and I submitted Camaïeu for review. A couple of days of rest.
Camaïeu is built for RevenueCat's Shipaton 2026. #Shipaton #BuildInPublic