Back to work

Dressing for the Run, Not just the Forecast

Layer

One sentence and one outfit, for runners tired of translating the forecast themselves.

WebsiteWeb app

Role
Product Design, Design Systems, iOS and Web Engineering
Timeframe
2026
  • Health & Fitness
  • B2C
  • iOS

The Layer app running on an iPhone, walking through a run and the layers it recommends for it

Overview

Layer is my own product, an iOS app that tells a runner what to wear in one sentence and one outfit.

The problem. A weather app tells you what it is outside. You still have to turn 38°F and 18 mph gusts into a jacket, standing at the door in the cold.

The outcome. I designed and built all of it, from the recommendation engine to the App Store listing. It ships on five surfaces from one engine and is in review at Apple. One claim is still unproven: that the app gets better at dressing you by the third week.

Deliverables

  • Product strategy and positioning
  • Competitive research
  • Recommendation engine design
  • iOS app, web app, and landing page
  • Design system and motion language
  • Apple Watch complication and home screen widget
  • App Store listing and launch assets

The Challenge

I am the runner in this problem. Most mornings I stood at the door reading numbers I could not turn into clothes. Those two minutes cost me more than a wrong jacket ever did, because they made going out feel like work before I had done any. Part of it is knowing you might be uncomfortable for the next hour. The rest is having to decide anything at all at 6am.

I did not run a discovery study. I treated my own six months of cold mornings as a hypothesis and put the research into the field instead.

On iOS the whole what-to-wear category is two free apps. Running Weather: What to Wear outputs a layering recommendation and little else, and WeatherToRun pairs an hourly running score with hourly gear. Dress My Run and Run Hive’s Gear Picker do the same job in a browser. Two paid apps answer a neighbouring question and never mention clothes: RunWeather charges $39.99 a year to say when to run, and Sweather charges €9.99 for a weather score across 47 sports.

Nothing in the category reads effort or heart rate from the run you just did. Personalization there is a preference you declare once.

The Approach

How might we answer one runner’s morning in one sentence, without building another dashboard?

Interpretation leads, and the numbers go quiet

A dashboard is good at holding a lot of information in one place, which is the wrong thing to be good at here. I put the briefing sentence at the top, with the pace and duration editable inside it, and the outfit directly under it. The rest of the weather fits into five small chips, and none of them opens into anything.

Layer's home screen, showing a plain-language briefing sentence above a compact row of weather chips and a recommended outfit of real gear
My spec put the weather row last, under the outfit. The build put it second, and after two months of looking at both I ratified the build.

One engine feeds five surfaces, so they cannot disagree

Layer reaches you on a landing page, a web app, an iOS app, a Watch complication and a home screen widget. Show a light shell on the widget and an insulated jacket in the app, and nobody thinks sync bug. They think the app does not know what it is talking about. So I compute the recommendation once, in one TypeScript module. iOS runs that same file through JavaScriptCore instead of a Swift port, and fixture tests fail the build if the two ever disagree about an afternoon. The Watch and the widget calculate nothing. They read a snapshot the phone wrote and tell you how old it is.

Layer running in a browser, handing a visitor a briefing sentence, a row of weather chips and an outfit without an account
The web app hands a stranger the same decision the phone would, with no account, because a funnel that gates the answer never gets tested.

The runners who swap most are the ones worth learning from

Layer reads your effort and heart rate from Strava, and asks one question after a run: how did that feel, on a five point scale. My first model threw out any run where you had swapped something, since a rating on different clothes grades the swap. Then I looked at who that excluded: the runners who think hardest about their gear. So I reversed it. The rating now grades what you wore, and Layer compares thermal tier instead of the specific garment. If you always reach for warmer gloves, it files that as its own habit rather than letting it drag your whole baseline warmer.

Rate how the run felt.

Rate how the run felt.

The Solution

You use Layer for about five seconds a day: open it, read one sentence, see one outfit, leave. The recommendation comes out of a closet of your own photographed gear, so it can only suggest something you already own.

Keeping it that quiet needed rules the build enforces. Every animation on iOS and the web uses one easing curve. Gold means the data is a little old but still usable, coral means the run did not happen, and I never reuse either color for anything else. Both live in two palette files, and a hex code written anywhere outside them fails the build.

A gear profile says what kind of runner you are. A closet knows what is hanging by your door, which is the only one of the two that can change a recommendation.

A gear profile says what kind of runner you are. A closet knows what is hanging by your door, which is the only one of the two that can change a recommendation.

Two things changed about my own mornings. There is nothing left to translate, because the sentence already tells me what the run will feel like. There is nothing to decide either, because the outfit came out of my own closet before I opened the app.

The Takeaways

Stale docs get built

I build with AI agents, so my documents are the brief an agent reads before it writes any code. I wrote the compliance rule before Layer could record what a runner planned to wear. The app gained that months later, and the doc still said to throw those runs away. Editing the document, rather than remembering the exception, is the PM half of building alone.

The best ideas I had are the ones I cut

I designed and tested a cycling version of the engine, then never shipped it. I skipped laundry tracking, a genuine problem that is not mine. Both would have added a screen to an app that promises you do not have to think.

I cannot prove the learning works yet

Layer is in review at Apple, and the only people using it are a small TestFlight group. That is nowhere near enough to tell me whether anyone keeps opening it. The case for Layer over a free weather app is that it learns how you run, so if a runner cannot feel the recommendations improve after two or three weeks, it is a line on a landing page. That is the first thing I want to measure once the app is out.