An outfit generator is the feature every wardrobe app is asked for and the one we spent the longest failing to make useful.

The arithmetic is against you from the start. Twenty tops, fifteen bottoms, eight pairs of shoes and six outer layers is over fourteen thousand combinations. Every filter you apply cuts that down and none of them cut it down to something a person wants to look at. Show ten suggestions and they are an arbitrary ten out of thousands. Show all of them and you have shown nothing.

Ranking requires knowing things a database does not

The obvious response is to rank rather than enumerate. Score the combinations, show the good ones.

Scoring needs to encode what makes an outfit work, and that turns out to be mostly information the app does not have.

Fit. Two garments that are individually fine can be wrong together because of proportion. A photograph of a folded jumper does not carry this.

Formality. Not a property of a garment in isolation. The same shirt is formal with one pair of trousers and casual with another.

Fabric and texture. Two items the same colour in different materials can clash. Neither the material nor the way it hangs is reliably visible.

Condition and context. A jacket you love that no longer fits well. A shirt you only wear at home. A dress associated with an occasion you would rather not repeat. All of these are real reasons an item never appears in an outfit, and none of them are in any field.

Your taste. Which is specific, inconsistent, and the entire point.

Colour theory can be encoded — that part is genuinely computable — and it is the least of the problem. A combination that is chromatically sound and wrong in every other respect is still wrong, and the suggestions we generated were reliably that.

We ran it internally for a while. The results were not offensive; they were bland. And every suggestion carried an implicit claim that the app had an opinion about your clothes, which it did not.

What replaced it

Filtering, and being fast at it.

The insight from watching people plan outfits is that they are not searching for a combination in the abstract. They start from a constraint that already exists — the weather, the occasion, one garment they have decided to wear, what is clean — and the useful question is what goes with that, not what goes with everything.

So the tools are:

Filter by the constraint you actually have. Season and warmth for weather. Category for structure. Colour when you have committed to one item and want to see what works with it.

See the clothes you cannot see. This is the largest real benefit and it is not glamorous. Everyone wears the clothes at the front. The value of a wardrobe database is the items at the back, in the box, in the other room, out of season — the things a filter surfaces and a wardrobe hides.

Save the combinations you found. A saved outfit is worth more than a generated one, because you decided it works. Over time a set of saved outfits becomes a much better answer to "what do I wear" than any generator would have been, and it was built out of your own judgement rather than ours.

Attributes that make filtering work

The filters are only as good as the data, which is why the app is fussy about a few fields.

Season as a range rather than a label. "Summer" is not a property of a jumper; the useful attribute is the temperature range it works in. A light jacket that covers a cool evening in June and a mild afternoon in November should appear in both, and a label forces a choice that makes it appear in neither.

Colour recorded as more than one value where the garment has more than one. A patterned item filed under a single averaged colour will not surface when you filter for either of its actual colours.

Categories that match how you decide. The generic tree — tops, bottoms, outerwear — is a starting point and it is not how anyone actually thinks. If you distinguish work shirts from weekend shirts, that distinction should be in the data, because it is the one you will filter by.

Notes, honestly. "Runs small." "Only with the black trousers." "Needs an iron." "Uncomfortable after two hours." These are the things you will otherwise rediscover by wearing the item and regretting it, and they are the field most people skip.

A planning routine

Start with the constraint, not the wardrobe. Weather, formality, how much walking, whether you will be carrying something, what needs to still look presentable at nine in the evening. Constraints eliminate most of the possibility space instantly and for free.

Choose the anchor item. The one thing you have decided to wear, or the one thing the occasion requires. Everything else is chosen relative to it.

Filter for what goes with it. This is where the database earns its keep, and it is where forgotten items surface.

Save the result if it worked. Two seconds, and it accumulates into something genuinely useful.

Plan the night before for anything that matters. Not for productivity reasons — because the wardrobe is a bad interface at seven in the morning and a phone is a good one at ten at night.

Where the app should stay out of the way

Wheron does not tell you whether an outfit is good. It has no opinion about your clothes and it should not develop one.

It also cannot know about the item you keep and never wear for reasons that are not in the data, and it should not nag about it. We considered surfacing garments that never appear in outfits, and the honest version of that feature is a list of things you feel slightly bad about, which is not what a wardrobe app is for.

What it can do is show you what you own, quickly, filtered by something real. That turns out to be most of the value, and it required removing a feature rather than adding one.