Inspiration
I have so many photos of my friends that I always forget to send them. And my friends have just as many photos of me. If I don't ask for an AirDrop right away, those photos stay buried in our camera rolls forever. That's a shame, because they're some of the best memories we have, and sharing them makes someone's day.
So I built uncover, an app that makes sure those photos finally reach the people in them.
What it does
- Finds everyone in your photos. uncover detects and groups faces, so each friend gets their own page with every photo of them.
- Puts names to faces. Your contacts suggest who is who, and you always have the final say.
- Shows what's still unsent. Each person shows how many photos you haven't shared with them yet.
- Shares in seconds. Pick your favorites and send them to Messages without digging through your camera roll.
- Stays private. All face detection and grouping happens on your iPhone. No account, no cloud copy, no ads. Your photos never leave your device.
How we built it
- SwiftUI and The Composable Architecture (TCA). Every screen is a TCA feature with its own state, actions and dependencies. That kept a growing app well structured and made the logic easy to unit test.
- On-device face processing. Faces are detected, embedded and clustered locally with Apple's frameworks and Core ML, so privacy is built into the architecture, not just promised.
- Local storage with SQLite. People, faces and "already shared" state live in a local database on the phone.
- RevenueCat for Pro features and subscriptions. This was my first RevenueCat integration.
- Firebase for the website at getuncover.app (landing page and legal pages), plus separate Test and Prod environments.
- AI-agent-supported workflows throughout, from implementation and tests to tooling and App Store copy.
Challenges we ran into
Time. I only heard about the Shipaton at the beginning of September. From the first line of code to a finished app took three weekends.
Everything that isn't code. One whole weekend went to legal and compliance, the privacy policy and terms, the website, marketing, App Store setup, screenshots and copy, without writing a single line of app code. Shipping a real product means a lot more than building the app.
Privacy without compromise. Keeping every face and photo on the device meant getting on-device processing fast and accurate enough for a real camera roll, with no server to lean on.
A first RevenueCat integration. I had never set up in-app subscriptions with RevenueCat before, so I learned products, entitlements and paywalls on a deadline.
Accomplishments that we're proud of
- Going from idea to a complete, App Store-ready app in three weekends.
- A privacy promise that holds up: no photo and no face data ever leaves the phone.
- A clean, testable codebase with TCA, even at this pace.
- Fully automated App Store screenshots: a UI test drives the app in a fresh simulator with a library of AI-generated photos, and a script frames them in the app's design language. When the app changes, I get new screenshots in minutes.
What we learned
With AI-agent-supported workflows, one person can ship far more than before. I spent my time on product decisions, design and reviewing code, and the agents handled a lot of the implementation, tests and tooling. It's an exciting time to build.
I also learned a lot about RevenueCat. It made subscriptions, entitlements and paywalls far simpler than building them myself would have been.
What's next for uncover photos
More ways to share, better reminders when new photos of your friends show up, and getting uncover into the hands of as many people as possible, so no great photo stays buried again.
Log in or sign up for Devpost to join the conversation.