
Doover: an AI photo-art app, from first commit to the App Store in ten days
An iOS app that gives ordinary photos a second life: 15 hand-written visual skills and 41 looks rendered with gpt-image-2, an on-device Core Image color pipeline, and natural-language refinement. Built solo — SwiftUI client, Next.js backend, AWS render queue, in-app purchases — and shipped to the App Store within ten days of the first commit.

Doover: Photo Art Effects
Your photo, reimagined. Every photo deserves a second life.
Free tier with 20 credits a month · Plus and Pro subscriptions · iPhone
Most people have a camera roll full of photos they will never post: flat light, a cluttered background, a moment that was better in person than on screen. Doover is a small bet that those photos deserve another chance, and that the way to give them one is not a slider panel or a prompt box but a set of looks an art director would recognise.
- First commit → App Store
- ≈ 10 days
- Commits, one author
- 263
- Hand-written visual skills
- 15 · 41 looks
- Render time per image
- 30–90 s
What it does
Upload a photo, choose a look, tap once. About a minute later you have an editorial artwork rather than a filtered snapshot: a cinematic grade, a naturalist lithograph, a newsprint spread, a midnight-neon poster. If it is almost right, you say what to change in a sentence and it changes.




The thing I am proudest of is not the model call. It is the skill format.
Each look is a .doover package, a small interchange format with a JSON
schema, a prompt of up to 64,000 characters, and up to 24 directives that
tell the compiler how to adapt the direction to this photo. Skills are
authored, verified against a harness of A/B renders, and versioned like code.
That is what makes the results consistent enough to charge for.
How it is built
- iOS. A native SwiftUI app, about 30,000 lines of Swift. Colour work that does not need a generative model, such as exposure rescue and saliency-aware grading, runs on device with Core Image and Vision, so the first improvement appears before any network call.
- Rendering. Looks are compiled per photo by a language model, then
rendered with OpenAI's
gpt-image-2; a separate verify pass checks the output against the skill's intent. A China build swaps in Qwen image and vision models behind the same interface. - Backend. Next.js on AWS ECS Fargate behind a load balancer, DynamoDB for projects and effect versions, S3 for media, and an SQS queue with an always-on worker so a 90-second render never blocks a request.
- Business. In-app purchases verified server-side with Apple's App Store Server library, credit packs, and Plus/Pro tiers. Phone verification and WeChat sign-in for the China build.
Why it matters to me
I spend most of my time on foundation models for biology, where a wrong claim costs a great deal and shipping is measured in papers. Doover was the opposite exercise: pick a real, small problem, put a generative model in front of real users, and get it into their hands before the idea went stale. Ten days from an empty repository to a listing was a useful reminder that the distance between a model and a product is mostly engineering discipline, and that discipline transfers.
Doover is still evolving. If you try it and something feels off, I would like to know.


