ERIC, OUTSIDEHow we score U.S. FIELD NOTES / 01

A DEEPLY PERSONAL, SLIGHTLY SILLY WEATHER INDEX.

Can Eric work outside?

Good weather only counts when Eric can actually get into the zone.

HISTORICAL WEATHER
2023 — 2025

Loading bundled historical weather…

ERIC HAS KIDS. THE WEATHER SHOULD RESPECT THAT.

Protect the workday

WEEKDAYS · LOCAL TIME
Edit work windows & session rules

Weekdays 9 am–noon and 1–6 pm. One-hour runs get ⅓ credit, two-hour runs ⅔, and 3+ hours full credit. Lunch breaks a run.

GREAT PLAINS / 67010

Augusta, KS

Calculating

Eric Outside Work Points

points / year

NO COST WEIGHT
3+ HOUR OUTSIDE DAYSdays / year with a full-length run
WORK-WINDOW DAYLIGHThours / year inside your schedule

Raw weather points / yr
Outside your work windows
Marginal or fragmented hours

THE RHYTHM OF THE YEAR

Find your season

Usable work points / month

WHEN TO TAKE YOUR LAPTOP OUT

A day, across the seasons

01

Average points after the schedule and session rules. Select a cell to inspect it.

Dark hours score zero. Times follow the location’s clock, including daylight saving.

WEATHER IS ONLY HALF THE MOVE

Great patio. Can Eric afford it?

Affordability uses median gross rent, separately from work time. Income adds context.

LocationEOWP / yrWork fitRent / moIncome / yrBalance / 100

ACS 2020–2024 five-year estimates, in 2024 dollars. “Rent” includes renter-paid utilities; it is not an asking-rent quote. Balance combines work-window fit with a rent proxy—not a full cost-of-living or quality-of-life index.

HOUSING CONTEXT / 67010

Augusta, KS

Median gross rent / month
Median household income / year
Annual rent ÷ household incomeRatio of area medians, not household rent burden.

OPEN NOTEBOOK

Silly units. Real weather.
Very explicit assumptions.

01 / What an hour means

An Eric Outside Work Point (EOWP) is one perfect-equivalent outdoor working hour. Every historical hourly sample receives a score from 0 to 1. First we score weather alone: 1 is nearly perfect, 0.5 is half-good, and 0 is unusable. Then we apply your work windows and the contiguous-session rule. Add the scores, then divide by the number of complete calendar years: annual EOWP equals annualized focus-adjusted good outdoor working hours. This measures potential, not hours you will actually work.

The default windows are weekdays 09:00–11:59 and 13:00–17:59 local time. Lunch, school-time edges, and weekends earn zero. Times follow daylight saving; holidays and vacations are not excluded. Work fit is final points divided by valid scheduled hours, including any darkness inside the workday. In all-day mode the denominator is daylight hours. Night always earns zero.

Emoji tiers follow work fit: 😍 ≥70%; 🙂 ≥55%; 😐 ≥40%; 🙁 ≥25%; 😣 below 25%. These are chosen preference labels, not scientific thresholds. The full-length-day counter counts each date once if it contains at least one sufficiently comfortable run of the target length; two qualifying sessions on one day still count as one day.

01b / An hour is not a work session

We find contiguous runs in the actual chronological weather series, never in the monthly average. Every hour in a run must be inside your work windows, in daylight, and have a weather score at or above your chosen threshold (default 0.60). Missing data or a less comfortable hour breaks the run; so do lunch and the end of a day. Separate runs cannot be glued together.

Default rule: final hour points = weather score × min(1, run length / 3). A perfect one-hour run earns ⅓ point; a perfect two-hour run earns 1⅓ points total; three perfect consecutive hours earn 3 points. A four-hour run earns 4, with no overlapping-window double counting. Hours below the minimum quality earn zero. “Only full-length blocks” gives short runs zero; “No session penalty” restores the raw hourly sum inside the selected schedule.

With your 9–noon and 1–6 schedule, a fully comfortable morning is a three-hour run and the afternoon is a five-hour run. Both get full credit. Your maximum is eight points per working day; lunch still earns zero. The raw weather total and both discounts remain visible.

All locations use identical rules. Tampa is penalized only to the extent its historical comfortable hours fall outside your windows or fragment into short runs. Session length and the 0.60 comfort threshold are preference assumptions you can change.

02 / Temperature, shade & wind

Any hour with Open-Meteo apparent temperature below 50°F scores zero. This is your bare-finger typing preference, not a medical dexterity threshold. We use apparent temperature only for that gate to avoid repeatedly applying its wind, humidity, and sun adjustments.

Above the gate, air temperature starts at 0.4 at 50°F, rises to 1 at 55°F, stays at 1 through 80°F, then falls by 0.025 per °F through 95°F and 0.045 per °F above 95°F. All scores are clamped to [0,1].

Let W = clamp((T−72)/18), C = clamp((65−T)/15), D = clamp((dew−55)/20), B = clamp(seated wind/7), and S = clamp(radiation/800) × (1−shade). Thermal score = clamp(base − 0.50WD − 0.25WS + 0.12WB − 0.15CB + 0.06CS − high-wind penalty).

Seated wind is assumed to be 50% of modeled 10 m wind. Above 15 mph seated wind, a penalty grows to 0.40 at 30 mph. Radiation is in W/m². Cloud effects are already present in radiation and are not penalized twice. Rain has no direct thermal penalty; the canopy is assumed to keep you and the laptop dry, at every shade setting.

The provider’s apparent-temperature gate is unchanged by the canopy setting. This deliberately strict floor can reject hours that would feel warmer in a sheltered microclimate.

03 / Bugs: useful proxy, big uncertainty

Weather score = thermal score × (1 − sensitivity × bug pressure), before work-window and session weighting. Bug pressure is the product of habitat, current-temperature activity, 14-day seasonal warmth, moisture, and wind reduction. Current rain never enters directly; the preceding seven days of rain inform moisture.

Activity = clamp((T−50)/25) × clamp((100−T)/15). Season = clamp((14-day mean T−45)/20). Moisture = 0.20 + 0.45 × clamp((dew−40)/30) + 0.35 × clamp(7-day rain mm/35). Wind multiplier = 1 − 0.65 × clamp(seated wind/8). Habitat is 0.35, 0.70, or 1.00.

These coefficients are uncalibrated preference assumptions. CDC supports the relevance of standing water and local habitat; it does not validate this equation. Rainfall is an imperfect proxy for standing water. No nationwide insect-count API is used, and species, screens, yard drainage, irrigation, and local control can change the result. Setting bug sensitivity to zero removes this uncertainty from the score.

04 / Housing, income & the balance score

Census ACS table B25064 supplies median gross rent; B19013 supplies median household income. Values include reported 90% margins of error. ZIP inputs are matched by code to Census ZIP Code Tabulation Areas (ZCTAs); some postal ZIPs have no matching ZCTA. Missing values stay unavailable.

Housing affordability = clamp((3000 − monthly rent)/2250): $750 or less gets 1, $3,000 or more gets 0. These are explicit, adjustable-in-source anchors in 2024 dollars. Balance = 100 × [work-fit weight × work fit + (1−weight) × housing affordability]. Missing rent means no balance score.

Income is context, not part of the housing score. The ratio of median rent to median household income combines different populations and must not be interpreted as actual renter burden. This prototype does not measure taxes, transportation, healthcare, employment, or broader quality of life.

BEA regional price parities are a better broad price measure, but cover states and metros rather than individual ZIPs and need a geographic crosswalk. They are researched and linked below, not silently substituted for ZIP-level housing data.

05 / Data quality, coverage & privacy

Weather is Open-Meteo ERA5 reanalysis, a modeled grid of roughly 25 km, not a sensor in your yard. ZIP centroids come from Zippopotam.us. The sample covers 2023–2025, not a 30-year climate normal; year-to-year ranges do not capture all model uncertainty.

Sunrise and sunset use the provider’s binary is_day sample: this approximates usable daylight in one-hour steps and cannot resolve canopy darkness, terrain, or partial dawn/dusk hours. Wind gusts, smoke, air quality, and severe-weather hazards are not scored. A high score is a comfort preference, not a safety recommendation.

Complete local calendar years are required. Missing weather values are excluded and flagged; totals become a lower bound and are never scaled up to fill gaps. UTC timestamps are converted to the location’s actual timezone. Two weeks of extra weather initialize the bug season and rain history.

Bundled examples run offline. Looking up another ZIP sends that ZIP to Zippopotam.us and Census Reporter, and its approximate coordinates to Open-Meteo. No account, analytics, or server database is used. New lookups stay in page memory until reload.

06 / Sources & reproducibility

The delivered source includes the complete scoring equation and tests. Hourly CSV exports include component scores, weather inputs, UTC times, local dates, and setup assumptions. Model version: 1.1. Silly name, transparent math.