Inspiration
Some of the best-looking photos on anyone's feed right now come from a small compact camera with the flash on. It's the Canon G7X look: warm, slightly blown-out flash, light catching the contours of a face, the background falling away softly. People carry a second camera around just to get it. We wanted that look on a photo already sitting in your camera roll, with nothing to learn and nothing to adjust.
What it does
Vela is an iPhone app with one look and one loop. Pick a selfie, wait a few seconds, and Vela develops it into a flash-lit photo that looks like it was shot on a G7X. Then drag The Line, a white line across the photo, to compare before and after. Save it or share it, and it lands in a gallery that lives only on your phone.
There's no account, no sign-up, and no sliders or filters. It's one opinionated look, done well.
How we built it
- The iOS app is Flutter, iPhone-only and portrait-only, in a monochrome editorial design: white ground, black ink, and no accent colour, so the photos carry all of it. The first-run intro walks one real photograph through a complete develop instead of explaining one.
- The backend is one Supabase Edge Function (TypeScript on Deno, hosted in the EU). It checks the subscription with RevenueCat server-side and claims a develop from a weekly fair-use quota in one atomic Postgres call. It then sends the photo to Google's Gemini 3.1 Flash Image with our style instruction and streams the JPEG straight back. Nothing is stored. The style, the image tier and the quota are rows in a config table, so all three change without a deploy or an app update.
- Subscriptions run through RevenueCat: weekly or annual, one entitlement, and the only question anything asks is "subscribed or not".
- Analytics and crash reporting go to PostHog EU over plain HTTPS, with no SDK. The events come from the app, the Edge Function and RevenueCat's own integration.
Challenges we ran into
Measuring without watching. No consent banner means writing nothing to the device, so the app keeps no stored ID. Per-subscriber questions are answered from a server-side ledger of develops instead, which never holds a photo.
Unpredictable declines. The image API sometimes turns down an ordinary photo, and often passes it on a second try. The function retries once and refunds the quota if both attempts fail.
Accomplishments that we're proud of
- It's live. Vela passed App Store review on its first submission and went live on 30 August 2026.
- It speaks seven languages across eight locales, legal pages included. Portuguese is two, because no single register reads naturally in both Brazil and Portugal.
- The Collection is real. The app opens on fifteen before/after pairs from twelve real people, not stock photography.
What we learned
- One look, done well, is a product. Every control we didn't add is one less decision between a person and the reveal.
- Storing nothing makes whole problems disappear. There's no photo database to breach, no deletion requests to process, and no consent screen.
What's next for Vela: Digital Camera
- Getting it in front of people. Before/after clips from Vela Lab on social, and Apple Search Ads in the non-English storefronts, where the auctions are cheaper.
- A clearer paywall, and testing the price.
- Fresh community photos in The Collection without waiting for an app update.
Built With
- flutter
- gemini-flash
- revenuecat
- supabase
Log in or sign up for Devpost to join the conversation.