How it works
No machine learning, no vibes — a 1940s physiology model you can check by hand.
1. Your body is a heater
Walking, you produce about 145 W/m² of heat (2.5 MET). Roughly 78 % of it must escape through your clothes — the rest leaves as breath and sweat. Comfort is when production equals loss: too much insulation and you overheat, too little and you freeze.
required insulation = (T_skin − T_air) / (0.155 × heat flux) T_skin = 33 °C (comfortable skin temperature) air film = 0.7 clo in still air, eroded by wind: 0.7 / (1 + 0.5 × wind) what you must wear = required insulation − air film (in clo)
Sanity anchor: at 21 °C, seated, still air, this yields 1.0 clo — which is the definition of the unit. That case is a pinned unit test in the engine.
And because an outfit chosen at 8am is worn until midnight, the model reads the whole waking day: the morning window sets the target, a warmer midday sets how much insulation must be removable(layers you can shed at lunch), and the evening, rain timing and UV become the day's tips — each with its numbers shown.
2. Garments add up
Each garment has a measured insulation value (ASHRAE Standard 55); an outfit is approximately the sum of its parts. The picker enumerates outfits from the wardrobe and chooses one within ±0.15 clo of the target — closer than your body can feel.
3. What this model gets wrong (on purpose)
- Wind uses an approximation, not the ISO 9920 formula — right order of magnitude, simpler to show. If feedback says windy days run cold, it gets upgraded.
- Rainisn't insulation math: wet clothes lose most of their warmth, so the picker simply requires a waterproof outer layer instead of modeling it.
- Sun is ignored. Full sun can be worth ~0.5–1 clo of warmth; on sunny mornings CLO will dress you slightly warm.
- Your body is assumed average. The fix is per-person calibration from daily feedback — designed, not yet built.
Why ship a knowingly-simplified model? Because garment values are themselves ±10 %, and a model you can read beats a model you must trust.