Building Photo Declutter with Claude, Cursor, and a lot of iteration.
I had an idea for a photo organising app that would display random photos and allow you to just keep or delete them. I wanted it to be a slick native iOS app. Suddenly AI has allowed me to scratch that itch. Swipe right to keep, swipe left to mark for release, nothing gets deleted until you confirm it.
I’ve worked in UX for over 20 years and I’ve done UX for mobile apps, since right back when BlackBerry was a thing, and iPhone was released. My team designed the first SNCF iPhone app. So I know how important native apps are, and I didn’t think I would have the time to learn and implement a Swift app at 50. I knew what to build, just not how.
2026 will be the year of AI, that’s what I told myself in January. So I decided to stop resisting, and start really testing.
Initially I started talking to ChatGPT, finding out its limits, searching for a good way to prompt. I didn’t like it much at first, the tone bothered me. Asking it to remember not to use certain phrases helped, along with telling it to stop using hyperbole and praise.
I then started to ask what a good development workflow with AI might look like. Cursor came up, and I downloaded it and prompted a skeleton app on the advice of ChatGPT. Just get the main idea working. I wanted to access the photo library and to start counting how many photos there were, before shuffling the photos and displaying them for swiping to keep or release. This was the basis of the Photo Declutter idea.
“Most apps add more to your life. This one helps you let go of a little.”
I got a clean Xcode install set up first – always sanity-check before pointing an LLM at your project! Then I pointed Cursor to the same place and prompted it (with ChatGPT’s help) to make the bare-bones app. Then I quickly ran out of free credit on Cursor and I had to decide what I was going to pay for.
My initial feeling was just to subscribe to ChatGPT and work iteratively from there, so I did. I was quickly caught up in some strange hallucinations as it rewrote code with approximate variable names that forced me to think a bit too hard and challenge the responses too often. Asking around I realised Claude might be a better fit, and I eventually migrated completely to Claude as using projects with the source code worked really well to maintain sensible context. ChatGPT had worked nicely for generating some app images and the app icon though!
During this transition away from ChatGPT I had started to doubt if I could succeed – a lot of work was needed on the code still, and the looming product release and app review had me worried. Writing a product philosophy document, partly to give Claude context, partly to focus myself, helped.
I had considered Swift a bridge too far. Then I met Claude.
Immediately with Claude progress was better. In my history with ChatGPT I had a number of files that accelerated development : a philosophy document, a backlog, and a changelog story. So loading those into a project with some relevant source files meant I could immediately converse about the rest of the features that needed developing.
As I started to work with Claude the code base was becoming clearer to me too. I already had a hobbyist developer background, so gradually Swift was making sense to me, and the notions of views and stacks started to map to my thinking about HTML rendering and CSS constraints. I tested Claude Code on a separate project in parallel, and saw it could help, but I was reluctant to make it manage all my code since I was now into a nice LLM assisted manual iteration to finalise the app.
Developing an app is one thing – I now had swiping, sharing, check before release (deletion) and a fledgling statistics page working. Submission to the app store was necessary, and it costs 99€ to subscribe to Apple Developer program. I felt ready to take the plunge.
Getting onto the developer program wasn’t smooth, probably because the pipeline is full of AI-assisted people like me, hungry to start submitting apps. Probably loads of agent assisted bots also clogging up the pipeline too! So Apple took ages (like 2 weeks) to approve and I didn’t have access to test StoreKit (for a tip jar and an unlock feature that is little more than a bigger tip really, for those who really want custom timed sessions).
In the meantime there was lots to prepare anyway. An App Store description, screenshots from the app, and some marketing material. It’s not simply a case of launching an app and hoping everyone installs it… you have to push here and there. In particular it’s important to pay a lot of attention to the details of all the information you need to provide for an app submission, so that it will pass review. Many things are in fact required before you submit – including justification as to why you need access to the photo library and notifications, a good title and description, screenshots, and the signature of a number of agreements about payments and use (or not) of network access, cryptography and your tax status.
On the marketing side, any app is unlikely to make visibility even with a few seed installs; the virality is only via the “share” feature, but people who make shares might remove the link that’s automatically added anyway. I’ll look at promotion at a later date, but since this is a hobby project the main likely channel for big installation growth would be an article from a journalist, or a lucky review from a known YouTuber.
As I finished up screenshots and marketing planning, the use-case for Claude came to me. I realised it could help with a code review. So I pointed Claude Code to the project directory and asked it to check whether the app was submission-ready. Here the LLM was solid, flagging a couple of key points: describing why notification permission is needed was missing, and seeing that the code had some minor issues that needed attention. I let it auto-fix them while vetting each code change.
I let it auto-fix them while vetting each code change.
The user testing journey was interesting. In parallel to reviewing and finalising features I had the app sideloaded (installed directly from my Mac to iPhones via a USB cable) onto my phone and a couple of friends’ phones. I was pleasantly surprised by some initial reactions. The app really comes into its own when you see it acting on your own photos. Some useful feedback during testing led to adding safeguards. If you miss releasing photos at the end of a session, you can’t start a new one without confirming that your “to be released” pile can be forgotten about. An option to add to a collection “rediscovered” on double-tap was also inspired by user testing.
One thing missing that was brought up in testing – by my son – is a chance to rewind if you swipe a photo right (to keep it) but you wanted to delete it or add it to your collection. This has been backlogged as a feature for an upcoming release. The app philosophy doesn’t want to go too far into features though; simplicity is a key goal.
The app really comes into its own when you see it acting on your own photos.
The other thing in testing was that it’s not easy to get people to give you their phone to plug into your laptop, so close friends who trust you are really the only audience available. TestFlight helped eventually, though getting people to accept an invitation, install an app, and actually use it turns out to be its own small miracle.
The good news finally came, that the developer account was available (I had to call Apple to actually unblock the access, over a week after having paid the 99€). I started to get my build onto App Store Connect, and meticulously filled out all the information necessary to launch. Then I was ready for my first review. I submitted the app without in-app purchases for now, to see if it passed review. It did!
In the meantime I now had access to test StoreKit and set up my in-app purchases. The app isn’t meant to be a premium subscription experience or even paid, I just wanted a couple of mechanisms to make a little back on the time investment, and the Developer Program costs. So I thought a “buy me a coffee” tip on the about screen, and a once-off payment for custom session lengths would suffice. I set those up and added the code to make that all happen in a couple of short sessions.
The app is now live at v1.1 – in-app purchases are in place, but really the app is free for its main purpose: a daily ritual to declutter your photos and rediscover some great pictures from the archive on your phone.
I’m proud of where I’ve got in a short month since I started the project. I never imagined myself finding the time to become an iOS developer.
A friend pointed me toward Byung-Chul Han after seeing the app: his writing on the compulsion to accumulate, and the quiet value of letting things go, maps surprisingly well onto what I’d built by instinct. I’d arrived at the philosophy before I had the vocabulary for it.