Work 01 AI product MVPs
AURA
A social wardrobe app. Photograph a piece and Gemini tags it; describe an occasion and it builds an outfit from clothes you already own. One Next.js codebase ships to web, iOS and Android.
01 The problem
People forget what they own. Wardrobe apps that could help ask you to type in every item's type, colour, material and season by hand, so nobody keeps them up to date.
AURA turns a single photo into a fully tagged item, then uses those tags to suggest outfits from your own wardrobe, with friends, wishlists and purchase links on top.
02 My role
Sole developer: product, the web app, the native shells and the AI features.
03 Architecture
A Next.js app on MongoDB. The server signs each upload, the phone sends the photo straight to Cloudinary, and Gemini Vision returns structured metadata: category, type, subtype, colours, material, seasons, formality and tags. The user can correct anything before saving.
Outfit suggestions work on that metadata, not on images. Gemini gets the user's items as JSON, plus their style preferences and the occasion, and must answer with two to five clothing items and one to three accessories by ID, a reason, a confidence score and any gaps in the wardrobe. A separate image model handles virtual try-on.
Around it is a social layer: friends, public profiles, wishlists, per-item visibility, and purchase links that count clicks and notify the owner.
04 Two hard decisions
A
One web app, three platforms
The iOS and Android apps are Capacitor shells that load the deployed dashboard, so a single deploy updates every platform at once, with no app-store release for a UI fix.
Native features (camera, haptics, the Android back button) load only when the app is running inside the shell. The browser and PWA versions never pay for them.
B
Tag once, reason over text
Images are analysed once, at upload. Every outfit request after that sends compact JSON about the items instead of photos. Requests stay small, and the model's answer has to point at real item IDs.
When the model's quota runs out, the try-on screen tells the user when to retry, using the wait time Gemini returns, instead of showing a generic failure.
05 The result
- platforms from one codebase
- 3
- API routes
- 25
- data models
- 6
- screens
- 17
The clip shows the real flow on a demo account with eight illustrated wardrobe pieces: upload, automatic tagging, then an outfit built only from items in the wardrobe.

Screens show seeded demo data on local or emulated devices. No real users or records.