← All projects
ProductsPrivate site, not public yet

Armoire

A phone web app that picks a complete outfit each morning from the clothes someone actually owns, using only what's clean and checking the weather. Each piece is photographed once; Claude tags it, the background is cut out on the server, and a stylist model writes the look. Built for one friend, with an invite code to get in.

Period

Sep–Oct 2026

Role

Sole engineer

Type

Private site, not public yet

Tools

Next.jsReactTypeScriptSupabasePostgresClaude APIONNX RuntimeTailwind CSSVitestPlaywrightVercel
Source: private

The idea

A friend of mine stands in front of her closet every morning and still can't decide. Outfit apps don't know what she owns or what's in the laundry. So the whole thing is built around her real closet: every piece gets photographed once, and from then on the app only ever suggests things she can put on right now.

How a look gets made

She picks a vibe: Work, Casual, Date, Brunch, Cozy, Going Out, Event or Gym. The stylist is Claude Sonnet with a plain prose brief, her closet and saved inspiration photos as a cached prompt prefix, and a structured output schema so the answer is always a list of pieces plus a few lines of copy. Pieces get short aliases like i12 so the model can't mistype an ID. Every look is checked in code before she sees it: real pieces, all clean, a complete outfit, sane for the weather. If it fails, the problems go back to the model for up to three tries.

Swapping a piece or rewearing a look doesn't call a model at all; plain code picks the closest clean stand in. When she opens the app, all eight vibes get styled in the background so switching between them is instant.

Photos

The phone shrinks each photo to 2048 pixels and strips the location data before upload. The server cuts out the background with the U²-Net silueta model on ONNX Runtime, which I picked from a bake off of seven models against the one CPU and 2 GB a Vercel Hobby function gets. It takes about half a second per photo. Claude Haiku then tags the category, colors, warmth and formality, and she confirms with one tap.

Keeping it cheap and private

Wears, laundry and accepting a look are Postgres functions under row level security, and so is the daily allowance: one AI look per vibe per day plus one regenerate, a ceiling of twenty calls, and a padlock password stored as a bcrypt hash that lifts the limit. A look costs about a cent. Signing up needs an invite code, checked in a Supabase auth hook, and photos live in a private bucket.

Status

It's deployed and I use it with a test closet, but she hasn't been onboarded yet. The unit tests run the real migrations in an in process Postgres (PGlite), and the end to end suite runs on WebKit at phone width against a fake Anthropic server. Past looks still aren't in the bottom nav.

Design mockup of the Today, Closet and Laundry screens
Design mockup of the Today, Closet and Laundry screens
← PreviousLinesightNext →Augur