Shipping Apps Is Still Hard
I used AI to build a private photo app for my family, and it was the fast part. Getting people to want it over WhatsApp is the part nothing helps with.
Zain Wania5 min read
I'm building a private photo gallery for my family. Invite only, nothing public, just photos we'd otherwise bury in a group chat. It's close to done. The photos still need to go up and the invites still need to go out, and that last step is the one I'm dreading.
I'm not dreading it because the app is broken. It works, and getting it to work took a fraction of the time it would have a couple of years ago. What I'm dreading is finding out whether anyone wants to use it.
The easy part was really easy
I started by pulling the original high-res photos out of Google Drive, which is its own small chore. Then I hit the next problem: every file was named PXL_20240312_.... A gallery full of camera filenames is a spreadsheet, not a gallery.
So I had AI look at each photo and write it a title. That turned into its own little system, with a prompt I kept tuning until the titles sounded like something a person would say instead of a stock-photo caption.
A few years ago that would have been a side project of its own. Now it's a prompt, and it works. That's the part of the story AI really changed.
Then the scope started growing
The mobile experience felt rough, so I started thinking about a native app. That one spirals fast. Native means a second codebase or a framework to learn, plus builds, signing, and store review, all for a gallery of photos.
Then there's the fact that it's private, which makes security the main requirement instead of a nice extra. This is where I learned something about working with AI. It optimizes for getting the thing working. If you tell it to prove a feature works, it will, and it won't always mention what it left open to get there.
I'd built a hacky way to make myself an admin so I could test things. It was supposed to be local only. It wasn't locked down, and if I'd left it, anyone could have made themselves an admin in production. There was also a missing CSP header.
AI found both of them, and AI fixed both of them. But that only happened because I went back through the code or asked again in a different session. Nobody was going to volunteer that review, and the first pass had been happy to call it done.
The bar is WhatsApp
Say I get all of that right. The app is secure, the titles are good, and it looks great. That still isn't what decides whether this works.
My family already shares photos over WhatsApp. They see them, they like them, and I can download them myself. It's free, it's on everyone's phone, and it's very good. For my app to win, it has to be better than that. Then comes the social layer, because a gallery nobody can react to feels dead. So I need comments and likes, and now I'm building a smaller, slightly worse private Instagram.
I like my app because I made it. That's a bad test. My relatives don't care that I made it, and it doesn't earn the app any patience. If it's slower or clumsier than the thing they already use, they'll go back to the thing they already use, and they'd be right to.
Then you become tech support
Shipping it as a native app raises another problem. I don't want it public, so I'm doing a private beta. That means asking family members who aren't technical, some of them older, to install a beta app. Anyone who has tried this knows how that goes.
I also get a new job. When something breaks, it's on me. This is closer to self-hosting Plex than shipping an app. If you self-host Plex for your family, you didn't write it, but you're on the hook for it being up, for the shows being there, and for nothing hiccuping. People have a built-in expectation of how things work. As the builder I'll put up with rough edges that no one else will, because I know why they're there.
What AI didn't do
AI got me a decent design, a working app, and speed. It can't make people want to use it.
That part is product work: deciding what matters, knowing what feels good, and noticing when you're polishing the wrong thing. Making it run is one problem. Making it run well, for someone who has better options, is a different one. Being able to write code doesn't mean you've learned how to do that. A lot of developers, especially the ones who spend years closing tickets at a big company, have never had to.
The invites haven't gone out yet, so I don't know what people will say. That's the difference between building something and shipping it.