Inspiration
Every great image and video model lives on its own website with its own subscription. We wanted one pocket studio: pick any model, see the exact price before you run it, pay only for what you make.
What it does
Aishkin is an AI image and video studio for your phone.
- Create images with 40+ models: FLUX, Nano Banana, Imagen, Ideogram, Recraft, Seedream, GPT Image, Grok Imagine and more. Auto mode reads your prompt, picks the model and explains why. Improve prompt turns a few words into a full description.
- Make video from text or from a first and last frame: Seedance 1 Lite, 1.5 Pro and 2.5 (720p, with audio), Hailuo 2.3 Fast. Animate turns any picture you made into the first frame of a clip.
- Edit your own photos: remove or replace the background, upscale, restore faces, erase objects, vectorize, restyle, change a marked area or change anything by instruction. Rotate, crop and markup are free.
- Try a new look: templates for hairstyle, outfit, figure and face. "What suits me?" is an AI stylist that looks at your photo, suggests what would suit you, and lets you try each tip on in one tap.
- Sparks, not subscriptions. Every model shows its exact price before the run. Sparks come from packs (in-app purchases through RevenueCat), rewarded ads, promo codes and reward cards for milestones.
- Safety built in. Any result can be reported from the app. Reports go to a moderation queue together with the picture, the prompt and the model.
- On the Mac too. The same app in a desktop layout: a sidebar, the form on the left and the canvas on the right, a two-pane model picker, and video in the system player.
How we built it
- Kotlin Multiplatform + Compose Multiplatform. Screens, view models and all business logic are shared between Android and iOS (and a desktop build). Pricing, model selection, the job queue and draft handling live in a common core covered by tests with mocked networking.
- RevenueCat handles consumable spark packs on Google Play and the App Store. A RevenueCat webhook credits sparks on our server, which keeps the balance ledger, so the client never decides how much anyone has.
- Ktor server on Fly.io with PostgreSQL proxies generation to Replicate, sets prices from each provider's real rates (per image, per megapixel, per GPU-second, per second of video), refreshes the model catalog on its own and caps total spend.
- Firebase for sign-in (Google, Apple, email), Crashlytics and a small analytics funnel. AdMob for rewarded ads.
- macOS from the same code. The phone screens run on the JVM with Compose for Desktop and switch to a desktop layout on a wide window. purchases-kmp has no JVM or macOS target, so purchases go through our own small Swift bridge over purchases-ios, loaded through JNI. The Mac app shares the App Store record and the spark packs with iOS (universal purchase), so one RevenueCat project serves Android, iOS and the Mac. The same bridge shows video frames and plays clips with AVKit.
- The UI is verified with offscreen screenshot rendering of every screen, and each release is checked on a physical device.
Challenges we ran into
- Pricing that doesn't lie. Providers bill in completely different units. We show one exact number in sparks, a range where the provider bills by compute time, and price video in tiers by length.
- Faces in video. We built "put yourself in the clip" on Seedance 2.5 reference images, but real selfies were rejected as sensitive in 4 of 4 runs. We rolled it back rather than ship a button that always fails. Cameo is now marked "coming soon" and will go through an image first, then that image as the first frame.
- Platform differences. Android's regex engine and old Android versions reject things the JVM accepts. We added guard tests that read the source code itself.
- iOS without a Mac most of the time. The Kotlin for iOS compiles on Windows, and the Xcode project is generated by a script.
- RevenueCat on the JVM. There is no RevenueCat SDK for a Kotlin/JVM desktop app, so we wrote a Swift/JNI bridge, signed the bundled Java runtime inside-out for the Mac App Store sandbox, and checked that StoreKit answers a JVM process.
Accomplishments that we're proud of
- One Kotlin codebase for Android, iOS and macOS, with no platform code in the screens, plus a Kotlin server.
- A server-side ledger where every spark is accounted for, with refunds when a model fails.
- Reporting of AI content, a privacy policy and account deletion shipped before launch, not after.
What we learned
Honest prices and clear failure messages matter more than the number of models. People forgive a failed run when they get their sparks back and are told why.
What's next
- Cameo: put yourself into a short clip from a selfie.
- The App Store release.
- The Mac App Store release.
- A chat assistant that plans multi-step edits.
For judges
On Android: promo code SHIPATON-2026 (1000 sparks) — sign in, open the menu → your account at the bottom → Top up → Promo code → Apply. On iOS (App Store rules don't allow in-app promo codes for purchasable currency): every new account gets welcome sparks from the reward cards; for more, use the demo account from the private testing notes. On Mac: the same as on iOS — sign in with email and password; welcome sparks from the reward cards, or the demo account.
Built With
- android
- compose-multiplatform
- firebase
- fly.io
- ios
- jni
- kotlin
- kotlin-multiplatform
- ktor
- macos
- postgresql
- replicate
- revenuecat
- swift
Log in or sign up for Devpost to join the conversation.