99 Francs
sales@99francs.agency

HQ Paphos, Cyprus · worldwide

Case study · Our own product

ClearShot: an AI camera for iPhone that clears the crowd.

ClearShot finds every person in a travel photo on the iPhone, then has a cloud model rebuild the street, square or shoreline behind them — or keeps just the one person you came with. We designed it, built the app and the backend, and run it ourselves.

ClearShot on three iPhones — the result screen in the middle with Piazza del Popolo half crowded, half empty, the Clean camera on a busy Kyoto street on the left and a Kyoto result with Auto enhance and the Soft Film look on the right
ProductOur own product · built and run by 99 FrancsCyprus
PlatformsiPhone (iOS 17+) · Android 8+
StatusIn review · App Store and Google Play
BuiltMay–Oct 2026
StackSwiftUI, Kotlin + Compose, Node, Postgres
Languages8 in the app
Direct answer

Our own AI camera app — on-device detection, cloud repaint, designed and built by 99 Francs.

ClearShot is a native SwiftUI app that finds people with Apple’s Vision framework on the iPhone and sends only the photo and a mask to a Node and Postgres backend on Railway, where a cloud image model rebuilds the background inside that mask. Work began on 9 May 2026; the iPhone app and its Kotlin and Jetpack Compose Android port are now in review on the App Store and Google Play.

The idea

The landmark, without the crowd.

Removing one stranger from a photo is a solved problem: circle them and wait. A crowded street is not — there are dozens of people, half of them blurred, some holding umbrellas. ClearShot is built around one tap that removes all of them, and around shooting the next frame while it works.

Find people on the phone

Person detection runs on the iPhone with Apple's Vision framework. Only the photo and a black-and-white mask go to the server, and the cloud model is told exactly which pixels it may repaint.

Keep shooting while it works

Every photo becomes a job in a background queue — detecting, uploading, processing, done — so a traveller takes the next frame while the last one is cleaned. A notification brings them back to the result.

Pay only for results

A Shot is charged only after a result comes back and passes a check. The balance lives in a server-side ledger, so purchases, refunds and restores all go through one source of truth.

How it was built

Seven steps, from a working MVP to store review.

One team did all of it: the design, the iPhone and Android apps, the backend and admin, the landing site and the store listings. Nothing was handed over, because there was no one to hand it to.

01

Working MVP

Work began on 9 May 2026 with an end-to-end build on day one: camera, person mask, upload, a Node backend on Railway and the cleaned photo back on the phone.

02

Design system and queue

A Liquid Glass design system with iOS 17 fallbacks, the background processing queue, local notifications and a persistent gallery of before-and-after results.

03

Keep one

Remove everyone except one person: tap them on the live preview, or brush over them on an imported photo. Results are re-checked on the phone, with one free retry.

04

Detection that holds up in crowds

Tiled segmentation, person boxes and body pose, then a fallback ladder that ends with the cloud model finding people itself when the phone finds no one.

05

Shots, Pro and an admin

A server-side Shots ledger, StoreKit 2 purchases verified on the server, App Store Server Notifications for renewals and refunds, and a React admin for users, jobs and pricing.

06

Camera, languages and launch

48 MP capture where the iPhone supports it, lens switching and live film looks, eight languages, a landing site and localised store listings.

07

Android and store review

A Kotlin, Jetpack Compose and CameraX port against the same API, with person masks found on the phone by TFLite and MediaPipe models and Google Play Billing verified on the server. Both apps are now in store review.

The app

Pick a mode, shoot, keep walking.

The camera opens in Clean or Keep one, with a live film look over the preview. The result screen compares before and after with a slider, and the look and Auto enhance can still change there.

The ClearShot camera in Clean mode on a crowded street in Kyoto, with lens buttons, the shutter and the Clean and Keep one switch
The camera in Keep one mode on Piazza del Popolo in Rome, with a ring marking the one person to keep
The camera with the film looks tray open — Soft Film, Nordic, Rangefinder, Noir and Cinematic previews, with Rangefinder selected
The processing screen — Sending to ClearShot, keep shooting, we'll let you know when your Clean shot is ready
The result screen for Piazza del Popolo — people removed, with a before and after slider, Auto enhance, looks and Save to Photos
A Kyoto result with Auto enhance on and the Soft Film look at full strength, with Save to Photos and Share
Hard parts

What it takes to make one tap work.

An AI demo removes one person from one photo. A product has to handle crowds, misses, slow models and money without the user noticing. These are the parts that took the work.

The Your shots sheet over the camera — one Clean job cleaning, a Keep one job uploading and two finished shots ready to open
The job queue: two photos processing while two finished ones wait to be opened.

Finding everyone in a crowd

Whole-frame person segmentation behaves like a main-subject detector and misses most people in a group. ClearShot adds overlapping tiles, person rectangles and body pose, merges umbrellas and bags people hold, and widens the mask with each person's size.

When the phone finds no one

Detection runs as a two-pass ladder with stricter settings on the second pass. If both passes miss in Clean mode, the photo goes up with an empty mask and the cloud model locates and removes the people itself.

Repaint only the people

The server keeps the model's pixels only inside a feathered mask, and skips that step if the result is misaligned or changed people outside it. Output is snapped to a supported aspect ratio and cropped back to the source frame.

No charge for a bad result

The app re-runs person detection on the result. If more than 30% of the removed area still reads as a person, it retries once for free, and if that also fails the Shot is not charged.

A slow model never hangs the app

Each quality tier has its own chain of image models with fallbacks, a per-attempt timeout and a 150-second budget for the whole chain, kept under the app's own timeout.

Photos kept only as long as needed

Location and camera metadata are stripped before upload, photos are never logged and are deleted after 30 days, and no location is ever derived from an IP address.

Landing site

The proof is a slider.

The landing site leads with a before-and-after slider of real ClearShot output and renders every film look with the app’s own filter code. It is static, prerendered HTML with no dependencies, ready for more languages.

The ClearShot landing page hero — The landmark, without the crowd, with a before and after slider of a Kyoto street
Where it stands

In review on both stores.

ClearShot runs on iPhones with iOS 17 and later and on Android 8 and later. New users start with 3 free Shots; ClearShot Pro and Shot packs cover the rest.

8

languages in the app

English, Italian, Spanish, Portuguese, German, Russian, Ukrainian and Simplified Chinese — with App Store listings prepared for 10 locales.

2

modes, one tap each

Clean removes every person in the frame. Keep one removes everyone except the person you choose. Film looks and Auto enhance run on the phone and are free.

113

commits, one team

Design, the iPhone and Android apps, the backend and admin, the landing site and the store listings, all built by 99 Francs between May and October 2026.

Guides

Further reading

Design → build → App Store → run

Need an AI feature that works on a real phone, not just in a demo?

We design and build the app, the on-device and cloud AI behind it, purchases and the backend, and take it through App Store review — the same way we build our own.

SwiftUI · Vision · Metal · StoreKit 2 · Node · Postgres
An iPhone camera app that removes tourists and strangers from travel photos in one tap. Clean mode removes everyone in the frame; Keep one keeps just the person you choose. It also has free film looks and an on-device Auto enhance.
No. It is our own product. 99 Francs designed it, built the iPhone app, the backend and the admin, and runs it. We build products for ourselves so we know first-hand what it takes to ship an app and keep it working.
Not yet. The iPhone app is in App Store review and the Android app is in Google Play review. The landing site is live.
Swift and SwiftUI on the iPhone, with AVFoundation for the camera, Vision for person detection, Core Image and Metal for live film looks, and StoreKit 2 for purchases. The backend is Node and TypeScript on Fastify with Sharp for image processing, on Postgres, deployed on Railway with a storage bucket and a React admin.
The iPhone finds the people and builds a mask on the device. The photo and mask go to the server, a cloud image model rebuilds the background inside the mask, and the app checks the result before charging for it.

Yes. The same team designs and builds native iPhone apps with on-device machine learning, cloud AI behind them, in-app purchases and the backend, and takes them through App Store review. See iOS app development and AI app development.