The Vitamin D Window
Your body can only make vitamin D when UVB rays reach your skin. And UVB only reaches the ground when the sun is high enough in the sky.
Solar Elevation: The Key Number
Solar elevation is the angle of the sun above the horizon, measured in degrees. At sunrise it's 0°. Directly overhead is 90°. For vitamin D production, the sun needs to be above roughly 30°.
Below 30°, the sun's rays travel through so much atmosphere that virtually all UVB is absorbed before it reaches you. UVA still gets through (causing aging and some damage), but UVB — the wavelength that triggers vitamin D synthesis — is filtered out.
This is why you can sit outside for hours on a winter afternoon and not produce a single IU of vitamin D. The sun may feel warm (that's infrared), but without UVB, no vitamin D is being made.
Why Latitude Matters
At the equator, the sun passes nearly overhead every day of the year. The D window is long and reliable. At 50°N (London, Vancouver), the sun barely clears 30° even at midsummer noon. At 60°N (Helsinki, Anchorage), the D window disappears entirely for months.
Vitamin D Winter
For much of the world's population, there are months when no amount of sun exposure will produce vitamin D. This is called "vitamin D winter." In Boston (42°N), it runs roughly November through February. In Edmonton (53°N), it lasts from October through March — nearly half the year. dminder shows you exactly when your D window opens and closes.
The Ozone Layer's Role
The ozone layer is the atmosphere's UVB filter. Its thickness varies by location, season, and day — and that variation directly affects how much vitamin D you can produce.
Ozone absorbs UVB radiation. Thicker ozone means less UVB reaches the surface, which means slower vitamin D production and longer burn times. Thinner ozone means more UVB — faster D production, but also faster burns.
Most apps ignore ozone entirely, or use a fixed global average. dminder uses real NOAA OMPS satellite data — a 360×180 binary grid covering the entire globe, updated from satellite measurements. When you open the app, it looks up the actual ozone column thickness at your latitude and longitude.
This matters more than most people realize. Ozone thickness can vary by 30–40% between locations on the same day. A session in Santiago, Chile (where the ozone layer is thinner due to proximity to the Antarctic ozone hole) produces significantly more vitamin D than the same session in Tokyo at the same latitude and solar elevation.
Why Ozone Matters: The 50% Rule
For every 10% drop in atmospheric ozone, UV radiation increases by a staggering 50%. This non-linear relationship means that small changes in the ozone layer can have dramatic effects on your vitamin D production and burn risk. That's why dminder uses satellite ozone data rather than global averages — your actual exposure depends on the ozone directly above you, right now.
From Photons to IU
Here's how sunlight becomes the vitamin D in your bloodstream — and how dminder calculates every step.
UVB Hits Your Skin
UVB photons (280–315 nm) penetrate the epidermis and are absorbed by 7-dehydrocholesterol (7-DHC), a cholesterol derivative naturally present in skin cells. This photochemical reaction converts 7-DHC into pre-vitamin D3, which then thermally isomerizes into vitamin D3 (cholecalciferol) over the next 24–48 hours.
Skin Type Sets the Rate
Melanin competes with 7-DHC for UVB photons. More melanin means fewer photons reach 7-DHC. A person with Fitzpatrick Type I (very fair) skin produces vitamin D 5–10 times faster than someone with Type VI (very dark) skin under identical conditions. This is the primary reason vitamin D deficiency is disproportionately common in people with darker skin.
Exposed Skin Area Scales Linearly
The amount of vitamin D you produce scales directly with the percentage of skin exposed to the sun. Face and hands alone represent about 10% of your body surface area. At optimal conditions, that's 50 IU per minute. Expose your full body (100% skin) and that jumps to 500 IU per minute — a 10x increase.
Validated With Real Instruments
These aren't theoretical numbers. dminder's base rate of 50 IU/min for 10% skin has been validated against Solarmeter Model 6.4 (D3) readings. A Solarmeter D3 reading of 50 at UV index 8 corresponds to approximately 20 minutes to produce 1,000 IU with face and hands exposed — which is exactly 50 IU/min. At 30 minutes with full body exposure, you'd expect roughly 15,000 IU.
The Burn Time Model
Knowing when you'll burn is just as important as knowing how much vitamin D you're making. dminder calculates your personal burn time for every session.
Minimal Erythemal Dose (MED)
MED is the amount of UV radiation that causes visible reddening of the skin (erythema). It's measured in joules per square meter (J/m²) and varies dramatically by skin type:
Safety Margin & Medications
dminder applies an 80% safety margin to all burn time calculations. If the math says you'd burn in 30 minutes, dminder warns you at 24 minutes. This accounts for individual variation, uneven skin exposure, and the fact that erythema develops gradually.
Photosensitizing medications further reduce your safe exposure time. Common culprits include:
- NSAIDs (ibuprofen, naproxen)
- Certain antibiotics (tetracyclines, fluoroquinolones)
- Retinoids (tretinoin, isotretinoin)
- Blood pressure medications (thiazides, ACE inhibitors)
The burn time calculation combines your skin type's MED threshold, the current UV index, ozone data at your location, solar elevation angle, and any medication adjustments. The UV index and ozone feed directly into the erythemal dose rate — how quickly UV energy accumulates on your skin. dminder integrates this rate over time, warning you before you reach 80% of your personal MED.
Clear-Sky UV Index: Why It Matters
dminder calculates a clear-sky UV Index because if clouds clear suddenly, you need to know your actual burn risk — not a cloud-adjusted average. If it is cloudy during your session, the timer detects this and adjusts your vitamin D rate accordingly in real time. This dual approach protects you from surprise burns while avoiding overly conservative estimates on partly cloudy days.
The Pharmacokinetic Model
dminder doesn't just track what goes in. It models how vitamin D moves through your body over time to estimate your current blood level.
The Vitamin D Ledger
Every sun session, supplement, and dietary intake is recorded in a running ledger. But vitamin D doesn't just accumulate indefinitely — it decays. Vitamin D3 has a biological half-life of approximately 15 days in the bloodstream. This means that half of any given dose is metabolized and cleared within two weeks.
dminder models this exponential decay for every entry in your ledger. A 10,000 IU sun session from last week contributes about 5,000 IU to your current estimated level. The same session from a month ago? Roughly 2,500 IU. The model sums the decayed contributions of all your past intakes to produce a current blood level estimate in ng/mL.
Bioavailability
Not all vitamin D sources are equal. Vitamin D3 (cholecalciferol) — from sun exposure and most supplements — is 100% bioavailable. Vitamin D2 (ergocalciferol) — from plant sources and some prescription supplements — is only about 40% bioavailable. The ledger adjusts each entry accordingly before calculating decay.
Lab Calibration
The pharmacokinetic model produces an estimate. To improve accuracy, you can enter actual blood test results. dminder compares its estimate against your lab value and calibrates the model accordingly. Over time, with periodic lab results, the model becomes increasingly accurate for your individual metabolism.
Projection Engine
Beyond estimating your current level, dminder projects your future blood level. The projection engine calculates three key metrics: steady state (where your level will stabilize if you maintain current habits), runway (how long until you drop below your target if you stop all intake), and time to target (how long to reach your goal at your current pace). This turns abstract numbers into actionable guidance.
The Calculation Engine
All of this math runs in a shared, high-performance calculation engine written in Rust.
One Engine, Both Platforms
The same Rust library powers both the iOS and Android apps. There are no platform-specific shortcuts or approximations. If you and a friend stand side by side — one with an iPhone, one with a Pixel — you'll see identical vitamin D calculations.
What's In The Engine
Solar position algorithms, ozone data lookup, vitamin D production rates, erythemal dose integration, burn time prediction, pharmacokinetic decay modeling, blood level estimation, and projection calculations. All compiled to native code for maximum performance.
Data Sources
dminder's accuracy depends on real data, not assumptions. Here's what feeds the model.
NOAA OMPS Satellite Ozone Data
Ozone column thickness at your location, derived from the Ozone Mapping and Profiler Suite on polar-orbiting satellites. A 360×180 binary grid covering the globe, updated daily.
Weather APIs for UV Index
Real-time and forecast UV index data from weather services, used to validate and supplement the solar position and ozone-based calculations.
GPS: Latitude, Longitude, Altitude
Your exact position determines solar elevation angles, ozone lookup, and D window timing. Altitude matters too — UV intensity increases roughly 10–12% per 1,000 meters of elevation.
Your Profile
Skin type, age, weight, medications, dietary pattern, and lifestyle factors. Each of these modulates either vitamin D production rate, burn susceptibility, or both.
Lab Results
Optional 25(OH)D blood test results calibrate the pharmacokinetic model to your individual metabolism. The more lab data you provide over time, the more accurate your estimated blood level becomes.