AI · Interior design · 2026
AI Interior Redesign
Photograph a room, choose a style, and get it back redesigned with your own walls, windows and ceiling still where they were.
- Swift
- Kotlin
- Next.js
- OpenAI API
- Mobile App Development

Photograph a room, choose a style, and get it back redesigned with your own walls, windows and ceiling still where they were. The engineering isn't the model call. It's running a paid generation endpoint that scripts can't drain while collecting no personal data: identity is the device, both apps attest themselves to the server, generation is server-side only, and store receipts are verified with Apple and Google rather than trusted from the client. Built natively twice — SwiftUI and Jetpack Compose — over one API with a 6-page operations console.

Two problems, one product
For the user, picturing a room differently is genuinely hard. Photos of other people's homes don't help, because the room in front of you has its own proportions, windows and light.
For whoever operates it, every generated image costs real money — which makes the endpoint a target. Called from a script, the budget disappears overnight. Purchases trusted from the client get forged. The conventional defence is accounts, email verification and per-user rate limits, but that means collecting personal data from people who only wanted to see their living room in a different colour.

Five layers of abuse protection
Identity is the device, not a person. A registration endpoint issues an identity tied to hardware — no email, no password, no profile. Nothing to breach and nothing to ask for.
Both apps attest themselves: Apple App Attest on iOS, Firebase App Check on Android, so the server can tell the genuine app from a curl loop.
Generation runs server-side only. There is no configuration in which a client holds the model credential.
Purchases are validated against Apple's and Google's own libraries rather than believed from the app.
Credit consumption is ledgered per device and surfaced on an admin alerts page.

Why the results are usable
Most image tools will happily return a beautiful picture of a room that isn't yours, with a sofa in the kitchen. Every generation here runs against rules written for that specific room type.
A kitchen must come back showing cabinets, sink, hob and extractor, and is forbidden from containing a bed or a couch. A bathroom needs vanity, mirror, lighting and towel storage. Zoning is preserved — in a studio the sleeping area stays the sleeping area, and the bed anchors the room's orientation.
Five room types and four styles, each style written as a design brief rather than a one-word tag. Two finished variations come back every time.

Built natively twice, deliberately
The iOS and Android codebases mirror each other file for file — same architecture, each written in its platform's idiomatic UI framework. SwiftUI on one side, Jetpack Compose with Room on the other.
A cross-platform framework would have been faster to write. Native was chosen because App Attest, StoreKit and Play Billing are exactly the surfaces where cross-platform wrappers are thinnest and break most often — and those three are precisely what the security model rests on.
The prompt engine was ported between the two by hand, with Swift's multi-line string semantics reimplemented in Kotlin so both platforms emit byte-identical text.

Running it as a business
The admin console has six pages: dashboard, users, generations, purchases, remote config and alerts.
The dashboard tracks generations, revenue, AI cost and margin — today and this month. For an app where every button press costs money, live margin visibility is what separates a business from an expensive hobby.
Support can find a device, see every generation and whether it succeeded, check whether a purchase validated, and grant or revoke credits with a reason — all without an email address that was never collected.
Shipped to the App Store and Google Play with privacy policy, terms and support infrastructure. Client work, so the source is private.