Blog
What we learn building small iOS apps — pricing, the App Store, design. Usually the hard way. Weekly-ish.
-
25 September 2026
Building a 32-second AI construction timelapse for Instagram — what $4.77 and four days taught us
We made a Borobudur construction timelapse reel with image-to-video models, an ffmpeg pipeline and a vector HUD — and spent most of the time on things the models don't tell you about: drifting geometry, audio that hallucinates bells from the picture, a HUD nobody could read, an AAC encoder that clipped a singing bowl, and a loop seam that was two pixels off. Every lesson here has a number attached, because eyeballing it was wrong every time.
Read it → -
21 September 2026
The game world went completely blank, and the headless build looked perfect
Every sprite in our Unity 2D game stopped drawing — a black screen with a working HUD — while the exact same project rendered perfectly in batch mode. Nothing was wrong with the cameras, the sprites or the materials. The editor had simply never read the sorting layers we had added to TagManager.asset while it was open, so every renderer sat on an unknown layer and URP 2D drew none of them. Why it happens, how to prove it in ten seconds, and the one-line guard that stops it happening twice.
Read it → -
17 September 2026
We put the water on the ceiling, and it looked completely fine
Our water tracker tilts the water when you tilt your phone. On a real device the water sat on the ceiling, upside down, sloshing happily. The cause was one minus sign in an atan2, a wrong note in our own docs, and an iOS simulator that has no accelerometer. A hands-on guide to DeviceMotion, accelerometer sign conventions, atan2 and spring physics — with a phone you can tilt in the page.
Read it → -
26 August 2026
Our homepage is 39 KB, contains no images, and hums at you
A neon harbour, eleven glowing boats, moonlight on the water and a generative ambient score — built with zero image files, zero audio files and 39 KB over the wire. How to draw neon on an HTML canvas, synthesise a soundtrack with the Web Audio API, and keep Google and screen readers able to read a page made of pixels you drew yourself.
Read it → -
26 August 2026
Your UI doesn't need another colour pass. It needs the arithmetic done first.
We recoloured the same screen three times and it still looked wrong. Then we worked out how many points wide the icons actually were — twelve — and the problem stopped being taste and started being arithmetic. Apple's 44pt touch target, the legibility floor, and why you should do the sums before you draw anything.
Read it → -
23 August 2026
Your app is giving its in-app purchase away for free, and the source code looks correct
Three of our React Native apps reached a signed App Store archive with react-native-purchases missing entirely. The paywall rendered, the button worked, and it unlocked the app for free with no payment sheet. Nothing in the source, App Store Connect or RevenueCat reported a thing. Here is the one command that catches it.
Read it → -
21 August 2026
Your Blender model exports to glTF as a white blob. You probably don't need to bake it.
Export a procedural material to glTF or GLB and it arrives white — in three.js, in model-viewer, in Godot, everywhere. Every answer online says bake your textures. There is a two-minute fix that works for most of it, and one line that decides whether it works at all.
Read it → -
21 August 2026
App Store Connect won't let you submit, and it won't tell you why
Not in a valid state. Missing Metadata with every field filled. Add for Review greyed out. Six apps and every one of these blocked us at least once — here is the full list, and the API call that finally says what is actually wrong.
Read it → -
20 August 2026
Apple is quietly charging India more than America for your app
Set one US price and Apple fills in the rest of the world for you. For a $4.49 app that meant ₹499 in India and ₺249.99 in Turkey — more, in real terms, than Americans pay. Here is what is actually happening, and the fix.
Read it →