diff --git a/about.html b/about.html index 40e63b1..829548b 100644 --- a/about.html +++ b/about.html @@ -37,10 +37,10 @@ "mainEntity": [ { "@type": "Question", - "name": "What is UTCI?", + "name": "What is UTCI and why is it better than a standard feels-like temperature?", "acceptedAnswer": { "@type": "Answer", - "text": "The Universal Thermal Climate Index (UTCI) is a biometeorological standard that combines air temperature, humidity, wind speed, and solar radiation into a single felt-temperature value. It was developed by Bröde et al. (2012) and is used worldwide in heat-health warning systems." + "text": "The Universal Thermal Climate Index (UTCI) is a peer-reviewed biometeorological standard developed by Bröde et al. (2012) and used in public health systems worldwide. Unlike simple feels-like values that only apply wind-chill or heat-index formulas, UTCI combines air temperature, humidity, wind speed, and the full solar radiation load using a physiological model of the human body. It accounts for mean radiant temperature from all surrounding surfaces, making it a much more accurate predictor of actual thermal comfort and heat stress." } }, { @@ -48,7 +48,95 @@ "name": "What is the SunScope soak-factor?", "acceptedAnswer": { "@type": "Answer", - "text": "The SunScope soak-factor is an original precipitation penalty formula that reduces the UTCI value based on rain intensity, snowfall, and wind speed — reflecting the extra chill of wet clothing and skin that standard UTCI does not account for." + "text": "The SunScope soak-factor is an original precipitation penalty formula that reduces the UTCI felt-temperature value based on rain intensity, snowfall, and wind speed — reflecting the extra chill of wet clothing and skin that standard UTCI does not account for. The result is shown as UTCI+P." + } + }, + { + "@type": "Question", + "name": "How hot does a car get in the sun?", + "acceptedAnswer": { + "@type": "Answer", + "text": "A sealed car in direct sunlight can reach cabin temperatures 20–30 °C above outside air temperature within 30–45 minutes. On a 25 °C day with strong sun, cabin air can hit 50–55 °C. SunScope models this hour by hour using the actual solar radiation forecast, accounting for body panel conduction and window solar gain. Values above 35 °C are dangerous for children and pets; above 45 °C can be fatal within minutes." + } + }, + { + "@type": "Question", + "name": "Does opening car windows reduce the temperature inside?", + "acceptedAnswer": { + "@type": "Answer", + "text": "Yes, significantly. Open windows allow convective airflow to flush hot cabin air out continuously, reducing heat build-up by roughly 60–80% compared to a sealed vehicle. SunScope's Vehicle column includes a Windows open toggle that switches the physics model to a ventilated state, showing you the estimated cabin temperature with windows cracked compared to fully sealed." + } + }, + { + "@type": "Question", + "name": "Is it safe to leave a dog in a parked car?", + "acceptedAnswer": { + "@type": "Answer", + "text": "No — on any warm or sunny day a sealed vehicle heats up rapidly to temperatures that can cause heatstroke and death in animals within minutes. Dogs cannot cool themselves as efficiently as humans and are at risk at cabin temperatures above 32 °C. SunScope's Vehicle interior column gives an hour-by-hour estimate of cabin temperature so you can see at a glance whether conditions are safe." + } + }, + { + "@type": "Question", + "name": "How do I keep my house cool in a heatwave without air conditioning?", + "acceptedAnswer": { + "@type": "Answer", + "text": "Keep curtains and blinds closed during the day to block direct solar gain, then open windows once outdoor air drops below the indoor temperature — usually in the evening or early morning. SunScope's Home profile lets you select your building type (brick, modern, Victorian terrace, stone cottage, timber frame, flat, or conservatory) so the model reflects how your building actually heats up. Ticking Managed shows the effect of following this advice hour by hour — so you can see exactly when to open up and how much difference it makes." + } + }, + { + "@type": "Question", + "name": "Why is my house hotter in the evening than during the day?", + "acceptedAnswer": { + "@type": "Answer", + "text": "Building materials absorb heat slowly throughout the day and release it gradually over several hours — a property called thermal mass. How pronounced the effect is depends on construction: a stone cottage or Victorian terrace stays warm well into the night, while a timber frame new build or conservatory responds almost immediately to outdoor changes. SunScope's building type selector lets you match the model to your actual home so the indoor temperature lag it shows reflects your building rather than an average." + } + }, + { + "@type": "Question", + "name": "How hot does pavement or concrete get in summer?", + "acceptedAnswer": { + "@type": "Answer", + "text": "Exposed concrete and tarmac can be 15–25 °C hotter than the surrounding air on a sunny day. Unlike grass they have no evaporative cooling and absorb a large fraction of solar radiation. This is a hazard for dogs on pavements, barefoot children, and cyclists. SunScope's Concrete surface column estimates this temperature using an energy-balance model driven by the real solar radiation forecast." + } + }, + { + "@type": "Question", + "name": "What is the difference between UV-A and UV-B?", + "acceptedAnswer": { + "@type": "Answer", + "text": "UV-A has a longer wavelength and penetrates deeper into the skin. It is present throughout all daylight hours, passes through glass, and is the primary cause of long-term skin ageing. UV-B has a shorter wavelength, causes sunburn directly, and drives vitamin D production. UV-B intensity falls sharply at low solar elevations. SunScope shows both indices separately so you can make informed decisions about both immediate burn risk and long-term UV exposure." + } + }, + { + "@type": "Question", + "name": "How long can I spend in the sun before I get sunburned?", + "acceptedAnswer": { + "@type": "Answer", + "text": "It depends on your skin type and the current UV index. SunScope's Burn time column estimates the minutes to one Minimal Erythemal Dose (MED) — the threshold for the onset of sunburn — based on the UV forecast and your Fitzpatrick skin type. Fair skin (type I–II) may burn in under 10 minutes at UV index 8+; darker skin can tolerate significantly longer exposure. Figures assume no sunscreen and direct unshaded exposure." + } + }, + { + "@type": "Question", + "name": "What soil temperature do seeds need to germinate?", + "acceptedAnswer": { + "@type": "Answer", + "text": "Most vegetable seeds need soil temperatures above 7–10 °C to germinate reliably, with warm-season crops like courgettes and beans requiring 12–15 °C or more. SunScope shows both surface soil temperature and 6 cm depth temperature — the root zone where germination actually happens — so you can time sowing decisions accurately." + } + }, + { + "@type": "Question", + "name": "How can I tell if the ground is too wet for a motorhome or caravan?", + "acceptedAnswer": { + "@type": "Answer", + "text": "SunScope's soil moisture column shows volumetric water content in m³/m³. A reading above 0.4 indicates saturated ground where a heavy vehicle is likely to sink or churn the surface. Below 0.2 is dry and firm. The Vehicle profile includes soil moisture by default for motorhome and caravan users assessing pitch suitability." + } + }, + { + "@type": "Question", + "name": "What is the difference between UTCI and heat index?", + "acceptedAnswer": { + "@type": "Answer", + "text": "Heat index is a simple table-based formula that adjusts air temperature for humidity only — it was designed for shade conditions and ignores wind and solar radiation. UTCI is a full physiological model accounting for all four factors simultaneously: air temperature, humidity, wind speed, and mean radiant temperature from solar radiation and surrounding surfaces. In sunny or windy conditions the two values can differ by 10–20 °C. UTCI is the standard used in European heat-health warning systems." } }, { @@ -56,7 +144,23 @@ "name": "How accurate is SunScope?", "acceptedAnswer": { "@type": "Answer", - "text": "SunScope uses Open-Meteo forecast data, which is sourced from ECMWF and national meteorological services. The UTCI calculation follows the peer-reviewed Bröde 2012 polynomial. The soak-factor is an original model and should be treated as an informed estimate rather than a scientific measurement." + "text": "SunScope uses Open-Meteo forecast data sourced from ECMWF and national meteorological services. The UTCI calculation follows the peer-reviewed Bröde 2012 polynomial exactly. Derived columns (vehicle temperature, indoor temperature, concrete surface, UV) are physics-based estimates rather than measured values, and will vary based on local factors like building construction, shading, and surface colour." + } + }, + { + "@type": "Question", + "name": "Does SunScope work outside the UK?", + "acceptedAnswer": { + "@type": "Answer", + "text": "Yes — SunScope works for any location worldwide. Search for any city, town, or village using the search bar. The indoor temperature model offers seven building types — brick, modern insulated, Victorian terrace, stone cottage, timber frame, top-floor flat, and conservatory — so you can match the model to your actual building wherever you are. All other columns are fully location-agnostic." + } + }, + { + "@type": "Question", + "name": "How far ahead does the forecast go?", + "acceptedAnswer": { + "@type": "Answer", + "text": "The free tier shows 3 days of hourly data. The forecast auto-refreshes every 5 minutes while the page is open, so the current hour always reflects the latest available data from Open-Meteo." } } ] @@ -77,18 +181,79 @@

What is SunScope?

- SunScope is a free outdoor thermal comfort forecast that goes beyond standard air temperature. - Most weather apps tell you it's 12 °C and leave you to guess whether that means t-shirt weather - or a heavy coat. SunScope combines air temperature, humidity, wind speed, and solar radiation - into a single felt temperature — so you know what to actually expect when you - step outside. + SunScope is a free outdoor thermal comfort forecast that goes well beyond standard air + temperature. Most weather apps tell you it's 12 °C and leave you to guess whether that means + a t-shirt or a heavy coat. SunScope combines air temperature, humidity, wind speed, and solar + radiation into a single felt temperature — so you know what to actually expect + when you step outside.

- It uses the Universal Thermal Climate Index (UTCI), a peer-reviewed - biometeorological standard developed by Bröde et al. (2012) - and used globally in heat-health warning systems and urban planning. Forecast data is sourced - in real time from Open-Meteo, a free and open-source weather API drawing on - ECMWF and national met services. SunScope is available for any location worldwide. + The core calculation is the Universal Thermal Climate Index (UTCI), a + peer-reviewed biometeorological standard developed by + Bröde et al. (2012) + and used globally in heat-health warning systems and urban planning. On top of that, SunScope + layers its own soak-factor precipitation penalty — because UTCI alone doesn't + account for the extra chill of rain soaking through your clothes on a windy day. The combined + result is the UTCI+P score: a more honest, real-world comfort number. +

+

+ Forecast data is sourced in real time from Open-Meteo, a free and open-source + weather API drawing on ECMWF and national meteorological services. The forecast refreshes + automatically every five minutes and is available for any location worldwide. +

+ +

What else does SunScope calculate?

+

+ SunScope goes far beyond a single felt-temperature number. Depending on the profile you choose, + it can calculate and display a wide range of derived quantities, each built on the same + per-hour weather data: +

+

+ Vehicle interior temperature. A physics-based model estimates how hot a sealed, + parked vehicle gets over time — combining heat conducted through the roof and body panels with + direct solar gain through the side windows. You can select your vehicle type (car, MPV, SUV, + motorhome, or caravan), each of which has its own albedo, glazing area, and insulation + characteristics. A Windows open toggle switches to a ventilated model where convective + loss is roughly five times higher, dramatically reducing cabin heat build-up — mirroring the + real-world effect of cracking the windows. +

+

+ Indoor temperature. The Indoors column estimates the temperature + inside a building with windows closed and no air conditioning, simulating wall conduction, + window solar gain, and thermal mass hour by hour. You choose your building type from a dropdown + — brick, modern insulated, Victorian terrace, stone cottage, timber frame, top-floor flat, or + conservatory — and the physics model adjusts accordingly. Each type has its own insulation + level, thermal mass, and glazing characteristics, so a stone cottage and a conservatory behave + very differently on a hot day. Indoor temperatures typically peak 2–4 hours after the outdoor + peak, which is why a house can still feel stifling at 10 pm on a summer day. Tick + Managed alongside the dropdown to switch to the heatwave-advice model: curtains + closed by day to cut solar gain, windows opened whenever outdoor air is cooler than inside. +

+

+ Urban concrete surface temperature. Concrete and tarmac absorb far more solar + energy than grass, and unlike grass they have no evaporative cooling. On a sunny summer + afternoon, exposed paving can run 15–25 °C hotter than the surrounding air. SunScope models + this using a surface energy balance approach that accounts for solar absorption, surface + emissivity, and convective cooling by wind. +

+

+ UV and sunburn. SunScope splits the solar UV spectrum into UV-A and UV-B + components. The burn-time column estimates how long before you reach one Minimal Erythemal + Dose (the clinical threshold for sunburn) based on the UV index and your Fitzpatrick skin type + — selected from a dropdown in the column bar. +

+

+ Soil temperature and moisture. Surface and 6 cm soil temperatures are shown for + agricultural and outdoor-work planning. Soil moisture indicates whether the ground is workable + or saturated — particularly useful for motorhome and caravan pitching. +

+

+ The sky scope. The large circular visualisation at the top of the page shows + the sky conditions for the currently selected hour. The sky colour smoothly interpolates through + a full set of elevation-keyed gradients — from deep pre-dawn navy through golden sunrise, bright + midday blue, warm sunset amber, and back to night — with a sun disc whose glow radius and + intensity scale with the actual shortwave radiation at that moment. It refreshes automatically + alongside the forecast.

What is the SunScope soak-factor?

@@ -182,15 +347,16 @@

🏠 Home

- For managing indoor comfort without air conditioning — the typical UK home scenario. - The two indoor temperature columns are central: Indoors estimates the - ambient temperature inside a typical brick house with windows closed and no active cooling, - accounting for wall conduction, window solar gain, and thermal mass (indoor temperatures - usually peak 2–4 hours after the outdoor peak). Managed indoors shows - what you could achieve by following standard heatwave advice — closing curtains to block - direct solar gain and opening windows whenever the outdoor air is cooler than inside. - Supporting columns include air temperature, relative humidity - and dew point (important for condensation and mould risk in cooler months), + For managing indoor comfort without air conditioning. The indoor temperature column is + central: select your building type from the dropdown (UK brick, modern insulated, Victorian + terrace, stone cottage, timber frame, top-floor flat, or conservatory) and the physics model + adjusts for that building's insulation, thermal mass, and glazing characteristics. Tick + Managed to switch to the heatwave-advice model — curtains closed by day + to block solar gain, windows opened whenever outdoor air is cooler than inside. + Indoor temperatures typically peak 2–4 hours after the outdoor peak due to thermal mass, + and the model reflects this lag for each building type. Supporting columns include + air temperature, relative humidity and + dew point (important for condensation and mould risk in cooler months), wind speed for ventilation decisions, cloud cover, and precipitation — so you know whether to open the windows or bring the washing in. @@ -227,8 +393,8 @@ Soil moistureVolumetric water content of the top 1 cm of soil in m³/m³. Above 0.4 indicates saturated ground; below 0.2 is dry. Useful for assessing whether ground is workable, and for motorhome or caravan pitch suitability. Concrete °CEstimated temperature of sun-exposed urban paving. Concrete absorbs more solar energy than grass and cannot cool itself through evaporation — surface temps can run 15–25 °C above air temperature on sunny days. Vehicle °CEstimated ambient cabin temperature inside a sealed, parked vehicle — adjusted for your chosen vehicle type. Values above 35 °C are dangerous for children and pets; above 45 °C potentially fatal within minutes. - Indoors °CEstimated temperature inside a typical UK brick house with windows closed and no active cooling. Accounts for wall conduction, window solar gain, and thermal mass — indoor peak typically lags the outdoor peak by 2–4 hours. - Managed °CEstimated indoor temperature following standard UK heatwave advice: curtains closed during the day to block solar gain, windows opened whenever outdoor air is cooler than inside. Shows the benefit of passive cooling over doing nothing. + Indoors °CEstimated temperature inside a building with windows closed and no active cooling. Select your building type from the dropdown — brick, modern insulated, Victorian terrace, stone cottage, timber frame, top-floor flat, or conservatory. Each type has its own insulation, thermal mass, and glazing characteristics. Indoor peak typically lags the outdoor peak by 2–4 hours due to thermal mass. + Managed °CThe same building model with two interventions applied: curtains closed by day to block solar gain, and windows opened whenever outdoor air is cooler than inside. Toggle with the Managed tick next to the building dropdown. Shows how much passive cooling can reduce indoor heat compared to doing nothing. @@ -302,30 +468,110 @@

Frequently asked questions

-
-

Why does SunScope sometimes show a much higher temperature than my regular weather app?

+
+ Why does SunScope sometimes show a much higher temperature than my regular weather app?

On clear, sunny days direct solar radiation heats your skin significantly — sometimes adding 10 °C or more to what the air temperature alone would suggest. SunScope calculates Mean Radiant Temperature from shortwave radiation data, capturing this effect. Standard weather apps ignore it entirely.

-
+ -
-

Why does SunScope sometimes show a lower temperature than my regular weather app?

+
+ Why does SunScope sometimes show a lower temperature than my regular weather app?

Wind chill and precipitation both reduce felt temperature. If it's raining or blustery, the UTCI+P value will be noticeably lower than the thermometer reading — which is exactly what your body experiences.

-
+ -
-

How far ahead does the forecast go?

-

SunScope currently shows a 72-hour hourly forecast. Data refreshes automatically from Open-Meteo each time you load the page.

-
+
+ What is UTCI and why is it better than a standard feels-like temperature? +

The Universal Thermal Climate Index (UTCI) is a peer-reviewed biometeorological standard developed by Bröde et al. (2012) and used in public health systems worldwide. Unlike simple "feels like" values — which typically only apply a basic wind-chill or heat-index formula — UTCI combines air temperature, humidity, wind speed, and the full solar radiation load using a physiological model of the human body. It accounts for the mean radiant temperature your skin "sees" from all surrounding surfaces, not just the air around you. This makes it a much more accurate predictor of actual thermal comfort and heat stress.

+
-
-

Is SunScope free?

+
+ How hot does a car get in the sun? +

A sealed car in direct sunlight can reach cabin temperatures 20–30 °C above outside air temperature within 30–45 minutes. On a 25 °C day with strong sun, cabin air can hit 50–55 °C. SunScope models this hour by hour using the actual solar radiation forecast for your location, accounting for body panel conduction and window solar gain. Select the Vehicle profile and choose your vehicle type to see the estimate. Values above 35 °C are dangerous for children and pets; above 45 °C can be fatal within minutes.

+
+ +
+ Does opening car windows reduce the temperature inside? +

Yes, significantly. Open windows allow convective airflow to flush hot cabin air out continuously, reducing the heat build-up by roughly 60–80% compared to a sealed vehicle. SunScope's Vehicle column has a Ventilation toggle that switches the physics model to a ventilated state, showing you the estimated cabin temperature with windows open compared to fully sealed.

+
+ +
+ Is it safe to leave a dog in a parked car? +

No — on any warm or sunny day, even with cloud cover, a sealed vehicle heats up rapidly to temperatures that can cause heatstroke and death in animals within minutes. Dogs cannot cool themselves as efficiently as humans and are at risk at cabin temperatures above 32 °C. SunScope's Vehicle interior column gives an hour-by-hour estimate of cabin temperature: if the forecast shows values in amber (above 35 °C) or red (above 45 °C), the vehicle is not safe for a dog, cat, or young child, even for a few minutes.

+
+ +
+ How do I keep my house cool in a heatwave without air conditioning? +

The standard approach is to keep curtains and blinds closed during the day to block direct solar gain through windows, then open windows once the outdoor air temperature drops below the indoor temperature — usually in the evening or early morning. SunScope's Home profile lets you select your building type (brick, modern, Victorian terrace, stone cottage, timber frame, flat, or conservatory) so the model reflects how your building actually heats up. Ticking Managed shows what you could achieve by following this advice, hour by hour — so you can see exactly when to open up for maximum benefit and how much difference it actually makes.

+
+ +
+ Why is my house hotter in the evening than during the day? +

Building materials absorb heat slowly throughout the day and release it gradually over several hours — a property called thermal mass. How pronounced the effect is depends heavily on construction: a solid stone cottage or Victorian terrace has very high thermal mass and can stay warm well into the night, while a timber frame new build or conservatory responds almost immediately to outdoor temperature changes. SunScope's building type dropdown lets you match the model to your actual home, so the indoor temperature lag it shows reflects your building rather than an average.

+
+ +
+ How hot does pavement or concrete get in summer? +

Exposed concrete and tarmac can be 15–25 °C hotter than the surrounding air on a sunny day. Unlike grass, they have no evaporative cooling mechanism and their dark colour means they absorb a large fraction of incoming solar radiation. This is a real hazard for dogs walking on pavements, barefoot children, and cyclists — and it also radiates heat back upward, making urban areas feel significantly warmer than open countryside. SunScope's Concrete surface column estimates this temperature using an energy-balance model driven by the real solar radiation forecast.

+
+ +
+ What is UV-A and UV-B and what is the difference? +

UV-A has a longer wavelength and penetrates deeper into the skin. It is present throughout all daylight hours, passes through glass, and is the primary cause of long-term skin ageing and contributes to some skin cancers. UV-B has a shorter wavelength, causes sunburn directly, and drives vitamin D production. UV-B intensity is much more angle-dependent: it is strongest when the sun is high and falls sharply in the early morning and late afternoon due to the longer atmospheric path the radiation has to travel. SunScope shows both indices separately so you can make informed decisions about both immediate burn risk and long-term UV exposure.

+
+ +
+ How long can I spend in the sun before I get sunburned? +

It depends on your skin type and the current UV index. SunScope's Burn time column estimates the minutes to one Minimal Erythemal Dose (MED) — the clinical threshold for the onset of sunburn — based on the UV forecast and your Fitzpatrick skin type, selectable from the column bar. Fair skin (type I–II) may burn in under 10 minutes at UV index 8+; darker skin (type V–VI) can tolerate significantly longer exposure. These figures assume no sunscreen and direct, unshaded exposure.

+
+ +
+ When is it safe to spray crops or apply pesticides? +

Safe spraying requires low wind speeds (typically below 3 m/s), low temperatures to minimise evaporation and drift, and ideally no rain forecast within several hours. SunScope's Farming profile shows wind speed and direction, air temperature, relative humidity, dew point (to assess inversion risk and overnight settling conditions), and precipitation — giving you all the variables you need in one view without switching between apps.

+
+ +
+ What soil temperature do seeds need to germinate? +

Most vegetable seeds need soil temperatures above 7–10 °C to germinate reliably, with warm-season crops like courgettes, beans, and sweetcorn requiring 12–15 °C or more. SunScope shows both surface soil temperature and 6 cm depth temperature — the root zone where germination actually happens. The 6 cm figure lags behind the surface by several hours and gives a more realistic picture of what seeds in the ground are actually experiencing.

+
+ +
+ How can I tell if the ground is too wet for a motorhome or caravan? +

SunScope's soil moisture column shows the volumetric water content of the top centimetre of soil in m³/m³. A reading above 0.4 indicates saturated ground where a heavy vehicle is likely to sink or churn the surface. Below 0.2 is dry and firm. The Vehicle profile includes soil moisture by default precisely for motorhome and caravan users who need to assess pitch suitability before arriving on site.

+
+ +
+ How far ahead does the forecast go? +

The free tier shows 3 days of hourly data. The forecast auto-refreshes every 5 minutes while the page is open, so the current hour always reflects the latest available data from Open-Meteo.

+
+ +
+ How accurate is SunScope? +

SunScope uses Open-Meteo forecast data sourced from ECMWF and national meteorological services — the same underlying models used by professional forecasters. The UTCI calculation follows the peer-reviewed Bröde 2012 polynomial exactly. The derived columns (vehicle temperature, indoor temperature, concrete surface, UV) are physics-based estimates rather than measured values, and should be treated as informed approximations. Real-world values will vary based on local factors like building construction, shading, surface colour, and vegetation.

+
+ +
+ Is SunScope free?

SunScope beta is currently free to use for any location worldwide. As the product develops, some features may move to a paid tier — but core forecasting will always be accessible.

-
+ -
-

What data sources does SunScope use?

+
+ What data sources does SunScope use?

Forecast data comes from Open-Meteo, which aggregates ECMWF, GFS, and national meteorological service models. The UTCI calculation follows the Bröde et al. 2012 polynomial. Geolocation search uses the Open-Meteo geocoding API.

-
+ + +
+ Does SunScope work outside the UK? +

Yes — SunScope works for any location worldwide. Search for any city, town, or village using the search bar. The indoor temperature model offers seven building types — brick, modern insulated, Victorian terrace, stone cottage, timber frame, top-floor flat, and conservatory — so you can pick the one that best matches your building wherever you are. All other columns (UTCI, vehicle, UV, soil, concrete) are fully location-agnostic.

+
+ +
+ What is the difference between UTCI and heat index? +

Heat index is a simple table-based formula that adjusts air temperature for humidity only — it was designed for shade conditions and ignores wind and solar radiation entirely. UTCI is a full physiological model that accounts for all four factors simultaneously: air temperature, humidity, wind speed, and the mean radiant temperature from solar radiation and surrounding surfaces. In sunny, windy, or mixed conditions, the two values can differ by 10–20 °C. UTCI is the standard used in European heat-health warning systems and urban heat research.

+
+ +
+ Why does the sky display show the wrong time of day? +

The sky scope visualisation reflects the hour you have selected in the forecast table, not necessarily the current time. Click on a different hour row to see how the sky will look (or looked) at that time, with the sun's position, sky colour, and glow intensity all calculated from the actual solar elevation and radiation data for that hour.

+

Get in touch

diff --git a/assets/about.css b/assets/about.css index 4de2574..9743306 100644 --- a/assets/about.css +++ b/assets/about.css @@ -115,21 +115,56 @@ em { color: #7a5c2a; font-style: italic; } background: #fef8ea; border: 1px solid #e0d0a8; border-radius: 8px; - padding: 1.2rem 1.4rem; - margin-bottom: 1rem; + margin-bottom: 0.5rem; + overflow: hidden; + transition: border-color 0.15s; +} + +.faq-block[open] { + border-color: #c8922a; } .faq-q { + list-style: none; + display: flex; + align-items: center; + justify-content: space-between; + gap: 1rem; + padding: 1rem 1.2rem; font-weight: 600; color: #1e1208; - margin-bottom: 0.4rem; font-size: 0.97rem; + cursor: pointer; + margin: 0; + user-select: none; +} + +.faq-q::-webkit-details-marker { display: none; } + +.faq-q::after { + content: '+'; + font-size: 1.3rem; + font-weight: 300; + color: #c8922a; + flex-shrink: 0; + line-height: 1; + transition: transform 0.2s; +} + +.faq-block[open] .faq-q::after { + transform: rotate(45deg); +} + +.faq-block[open] .faq-q { + border-bottom: 1px solid #e0d0a8; } .faq-a { color: #5a3e1a; font-size: 0.93rem; margin: 0; + padding: 0.9rem 1.2rem 1rem; + line-height: 1.65; } .stress-table { diff --git a/assets/css/table.css b/assets/css/table.css index 4f98c08..8a797f6 100644 --- a/assets/css/table.css +++ b/assets/css/table.css @@ -238,6 +238,81 @@ border-color: #c8922a; } +/* ── Vehicle group: select + windows-open checkbox fused together ── */ +.col-toggle-group { + display: inline-flex; + align-items: stretch; + gap: 0; +} + +/* Remove the right border + radius on the select so it butts up flush + with the checkbox label. When the label is absent (hide state), the + select is the only child and :last-child restores full pill rounding. */ +.col-toggle-group .grouped-left { + border-right: none; + border-radius: 20px 0 0 20px; +} +.col-toggle-group .grouped-left:last-child { + border-right: 1.5px solid #c9b08a; + border-radius: 20px; +} + +/* The checkbox pill — same height/padding as a col-toggle but styled as a label */ +.col-toggle-vent { + display: inline-flex; + align-items: center; + gap: 5px; + padding: 4px 10px 4px 9px; + font-size: 9px; + font-family: JetBrains Mono, monospace; + letter-spacing: 0.08em; + text-transform: uppercase; + cursor: pointer; + border: 1.5px solid #c9b08a; + border-left: 1px solid #d4c0a0; /* softer join line */ + border-radius: 0 20px 20px 0; + background: #fef8ee; + color: #7a5c30; + user-select: none; + transition: background 0.15s, color 0.15s, border-color 0.15s; + white-space: nowrap; +} +.col-toggle-vent:hover { + border-color: #c8922a; + color: #6b4f2a; + background: #fef3dc; +} +.col-toggle-vent.on { + background: #c8922a; + border-color: #c8922a; + color: #fff; +} + +/* Custom checkbox square inside the vent label */ +.vent-checkbox { + display: inline-block; + width: 12px; + height: 12px; + border: 1.5px solid currentColor; + border-radius: 3px; + background: transparent; + flex-shrink: 0; + position: relative; + transition: background 0.12s; +} +.vent-checkbox.checked::after { + content: ''; + position: absolute; + left: 2px; + top: -1px; + width: 5px; + height: 8px; + border: 2px solid currentColor; + border-top: none; + border-left: none; + transform: rotate(45deg); +} + /* ── 7. HOURLY TABLE ────────────────────────────────────────────────── */ diff --git a/assets/css/ui.css b/assets/css/ui.css index 631373a..0973fc2 100644 --- a/assets/css/ui.css +++ b/assets/css/ui.css @@ -99,6 +99,18 @@ color: #6b4f2a; } +.utci-about-link { + display: inline-block; + margin-left: 4px; + color: #c8922a; + font-weight: 600; + text-decoration: none; + white-space: nowrap; +} +.utci-about-link:hover { + text-decoration: underline; +} + .utci-footer { margin-top: 36px; padding-top: 20px; diff --git a/assets/js/app.js b/assets/js/app.js index 2a803a7..cd6d8c3 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -27,7 +27,7 @@ import { vaporPressureHpa, solarElevationDeg, calcTmrt, utciApprox, calcConcrete import { utciCategory, precipPenalty, windCompass8, uvSplit, SKIN_TYPES, sunburnMinutes, burnLabel, - VEHICLE_TYPES, + VEHICLE_TYPES, BUILDING_TYPES, cloudCategory, confidenceBand, moonGlyph, } from './utils.js'; import { SkyScope, WindVane, CloudIcon, ScopeReticle, PrecipIcon } from './components.js'; @@ -113,7 +113,7 @@ export function UTCIForecast() { // FLIP THE `false` BELOW TO `true` TO PREVIEW THE PRO EXPERIENCE. // When this is wired to real billing/auth, replace `useState(false)` // with a check against the logged-in user. - const [isPro, setIsPro] = useState(true); + const [isPro, setIsPro] = useState(false); // How many days the free tier shows. Days beyond this get a 🔒. // Bump this number if you want to give free users more access. @@ -178,6 +178,16 @@ export function UTCIForecast() { // Vehicle type for the cabin heat column. 'car' is the default preset. const [vehicleType, setVehicleType] = useState('car'); + + // Vehicle ventilation — true = windows open (high convective loss). + const [vehicleVent, setVehicleVent] = useState(false); + + // Indoor: buildingType drives the physics preset; indoorManaged toggles the + // curtains+ventilation model on top. indoorMode gates column visibility: + // 'off' = hidden, 'on' = indoorT shown (managed or not depending on indoorManaged). + const [buildingType, setBuildingType] = useState('brick'); + const [indoorManaged, setIndoorManaged] = useState(false); + const [indoorMode, setIndoorMode] = useState('off'); const searchTimeout = useRef(null); // Refs for the two-scroller table layout (sticky-to-viewport header + @@ -579,7 +589,7 @@ export function UTCIForecast() { // dt kept for SkyScope / backward compat — same as dtUTC. const dt = dtUTC; const elev = solarElevationDeg(location.lat, location.lon, dtUTC); - const vehicleT = calcVehicleInteriorTemp(Ta, glob, elev, vehicleType); + const vehicleT = calcVehicleInteriorTemp(Ta, glob, elev, vehicleType, vehicleVent); const eh = vaporPressureHpa(Ta, RH); const Tmrt = calcTmrt(Ta, dir, dif, glob, elev); const utci = utciApprox(Ta, Tmrt, va, eh); @@ -605,8 +615,8 @@ export function UTCIForecast() { const TaArr = hourlyRows.map(r => r.Ta); const globArr = hourlyRows.map(r => r.glob); const elevArr = hourlyRows.map(r => r.elev); - const indoorTemps = calcIndoorTempPass(TaArr, globArr, elevArr); - const managedTemps = calcManagedIndoorTempPass(TaArr, globArr, elevArr); + const indoorTemps = calcIndoorTempPass(TaArr, globArr, elevArr, buildingType); + const managedTemps = calcManagedIndoorTempPass(TaArr, globArr, elevArr, buildingType); hourlyRows.forEach((r, i) => { r.indoorT = indoorTemps[i]; r.managedT = managedTemps[i]; }); } @@ -957,19 +967,48 @@ export function UTCIForecast() { } setActiveProfile(key); if (key !== 'custom') setVisibleCols({ ...profile.cols }); + // Auto-enable indoor column for profiles that include it; + // reset to off for profiles that don't. + if (key !== 'custom') { + const hasIndoor = profile.cols['indoorT'] || profile.cols['managedT']; + setIndoorMode(hasIndoor ? 'on' : 'off'); + setIndoorManaged(false); + } }} >${profile.icon} ${profile.label}${locked ? ' 🔒' : ''}`; })}

- ${(FILTER_PROFILES[activeProfile]?.cols['burn'] || FILTER_PROFILES[activeProfile]?.cols['vehicleT']) && html` + ${(isPro || FILTER_PROFILES[activeProfile]?.cols['burn'] || FILTER_PROFILES[activeProfile]?.cols['vehicleT'] || FILTER_PROFILES[activeProfile]?.cols['indoorT'] || FILTER_PROFILES[activeProfile]?.cols['managedT']) && html`
Columns: - ${FILTER_PROFILES[activeProfile]?.cols['burn'] && html` + + ${isPro && (activeProfile === 'custom' || FILTER_PROFILES[activeProfile].cols['air']) && html``} + ${isPro && (activeProfile === 'custom' || FILTER_PROFILES[activeProfile].cols['rh']) && html``} + ${isPro && (activeProfile === 'custom' || FILTER_PROFILES[activeProfile].cols['dew']) && html``} + ${isPro && (activeProfile === 'custom' || FILTER_PROFILES[activeProfile].cols['soilT']) && html``} + ${isPro && (activeProfile === 'custom' || FILTER_PROFILES[activeProfile].cols['soilT6']) && html``} + ${isPro && (activeProfile === 'custom' || FILTER_PROFILES[activeProfile].cols['soilM']) && html``} + ${isPro && (activeProfile === 'custom' || FILTER_PROFILES[activeProfile].cols['concreteT']) && html``} + ${isPro && (activeProfile === 'custom' || FILTER_PROFILES[activeProfile].cols['wind']) && html``} + ${isPro && (activeProfile === 'custom' || FILTER_PROFILES[activeProfile].cols['dir']) && html``} + ${isPro && (activeProfile === 'custom' || FILTER_PROFILES[activeProfile].cols['cloud']) && html``} + ${isPro && (activeProfile === 'custom' || FILTER_PROFILES[activeProfile].cols['sun']) && html``} + ${isPro && (activeProfile === 'custom' || FILTER_PROFILES[activeProfile].cols['direct']) && html``} + ${isPro && (activeProfile === 'custom' || FILTER_PROFILES[activeProfile].cols['diffuse']) && html``} + ${isPro && (activeProfile === 'custom' || FILTER_PROFILES[activeProfile].cols['tmrt']) && html``} + ${isPro && (activeProfile === 'custom' || FILTER_PROFILES[activeProfile].cols['delta']) && html``} + ${isPro && (activeProfile === 'custom' || FILTER_PROFILES[activeProfile].cols['utci']) && html``} + ${isPro && (activeProfile === 'custom' || FILTER_PROFILES[activeProfile].cols['uvA']) && html``} + ${isPro && (activeProfile === 'custom' || FILTER_PROFILES[activeProfile].cols['uvB']) && html``} + + ${(activeProfile === 'custom' || FILTER_PROFILES[activeProfile]?.cols['burn']) && html` `} - ${FILTER_PROFILES[activeProfile]?.cols['vehicleT'] && html` - `} -
`} - ${isPro && html` -
- Columns: - ${[ - // Hour and UTCI+P are always-on — no toggle button for them. - { key: 'air', label: 'Air' }, - { key: 'rh', label: 'RH' }, - { key: 'dew', label: 'Dew' }, - { key: 'soilT', label: 'Soil °C' }, - { key: 'soilT6', label: 'Soil 6cm' }, - { key: 'soilM', label: 'Soil moist' }, - { key: 'concreteT', label: 'Concrete' }, - { key: 'indoorT', label: 'Indoors' }, - { key: 'managedT', label: 'Managed' }, - { key: 'wind', label: 'Wind' }, - { key: 'dir', label: 'Dir' }, - { key: 'cloud', label: 'Cloud' }, - { key: 'sun', label: 'Sun' }, - { key: 'direct', label: 'Direct' }, - { key: 'diffuse', label: 'Diffuse' }, - { key: 'tmrt', label: 'Tmrt' }, - { key: 'delta', label: 'Δ' }, - { key: 'utci', label: 'UTCI' }, - { key: 'uvA', label: 'UV-A' }, - { key: 'uvB', label: 'UV-B' }, - ].filter(c => - activeProfile === 'custom' || !!FILTER_PROFILES[activeProfile].cols[c.key] - ).map(c => html` - `)} + ${(activeProfile === 'custom' || FILTER_PROFILES[activeProfile]?.cols['vehicleT']) && html` + + + ${visibleCols.vehicleT && html` + `} + `} + + ${(activeProfile === 'custom' || FILTER_PROFILES[activeProfile].cols['indoorT'] || FILTER_PROFILES[activeProfile].cols['managedT']) && html` + + + ${indoorMode === 'on' && html` + `} + `} + ${isPro && (activeProfile === 'custom' || FILTER_PROFILES[activeProfile].cols['precip']) && html``} - ${(activeProfile === 'custom' || FILTER_PROFILES[activeProfile].cols['precip']) && html` - `}
`}