carbontools.build Chelsea residence · 2,300 sf · cold climate
Whole-life carbon assessment · 30-year horizon

A passive house with rooftop solar reduces this home's 30-year carbon by 78%.

Compared to a standard new home built to code in Chelsea, Michigan. Adjust the parameters below to model your project.

Code-minimum baseline
311tons CO₂
over 30 years
Best-case scenario
67tons CO₂
passive shell + solar−244 t
Lifetime energy savings
$78k
in avoided utility costs
30-year cumulative carbon emissions by scenario Line chart comparing four building scenarios. Y-axis shows tons of CO2 equivalent. X-axis shows years 0 to 30. Each line starts at the embodied carbon value at year 0 and rises with operational carbon over time.
Scenario data: embodied carbon (year 0), annual operational carbon, and 30-year total
ScenarioEmbodied (tons CO2)Annual (tons/year)30-year total (tons)
Floor area 2,300sf
Heating system
Gas furnace Heat pump Heat pump + backup
Building shell
Code minimum Above code Passive house
Rooftop solar 8.0kW
Interior finish level
Modest Typical High-end
Air leakage 1.5ACH50
Occupants 2.5people
01
Carbon impact, ranked by single design decision.
Each lever applied independently against the code-minimum baseline.
02
Carbon source breakdown, by scenario.
Materials, energy use, and solar offsets contributing to each scenario's total.
Component (tons CO₂) Code minimum Electric + small PV Passive house Passive + large PV
Building shell (materials) 17172121
Interiors, MEP, finishes 53535328
Solar panel materials 1118
Operational energy (30 yr) 241971370
Total whole-life 311 177 209 67
03
Data sources & confidence ranges.
Where each input comes from and how much it could shift with project specifics.
Operational energy
Validated within 10% of US DOE/PNNL prototype building.
Solid
Grid carbon factor
EPA eGRID 2022 emissions data by region. State-level resolution.
Solid
Building shell materials
BEAM Tool v4.1 (Builders for Climate Action). Representative product selection.
Reasonable · ±15%
Solar generation
NREL PVWatts v8 state-average capacity factor. Real yield varies with roof orientation, tilt, shading.
Reasonable · ±15%
Interiors, MEP, finishes
Category averages from CLF, Athena, and Magwood typical residential ratios. Project-specific data would shift this significantly.
Placeholder · ±30%
Future grid decarbonization
Currently held constant at 2022 rates. Real grid emissions will drop over the analysis horizon.
Placeholder · favorable

Full calculation walkthrough

Every number on this page can be traced to an explicit formula, a published data source, and a defined unit conversion. The walkthrough below shows exactly how project inputs become operational and embodied carbon estimates. Each section corresponds to one engine module in src/.

Step 1 — Regional lookups
From ZIP code to climate, grid, and rates

The ZIP code resolves to a state via a zip_to_state.json crosswalk (~42,000 ZIPs). State drives four regional values:

  • IECC climate zone (1–8) and moisture zone (A humid / B dry / C marine) from climate_zones.json. Michigan resolves to CZ 5A.
  • Heating & cooling degree days (base 65°F) aggregated to the climate zone from degree_days.json. CZ 5 uses 6,500 HDD / 900 CDD as the representative pair. This is a deliberate simplification: real ZIP-level NOAA normals vary within a zone (Chelsea is ~6,300 HDD, Marquette ~8,200), introducing roughly 1–3% spread on heating-dominated whole-life totals.
  • Electricity and gas rates (state-average residential) from electricity_rates.json and gas_rates.json, sourced from EIA Form 861.
  • Grid carbon intensity (kg CO₂e per kWh) from egrid.json, EPA eGRID 2022. Michigan's MROE subregion is ~0.47 kg/kWh.
Step 2 — Geometry
From floor area to envelope areas

The house is modeled as a simple rectangular volume. From floor area and stories, the engine derives:

footprint_sf = floor_area_sf / stories
side_ft = √footprint_sf
perimeter_ft = 4 × side_ft
wall_height_ft = 9.0 (default)
gross_wall_sf = perimeter_ft × wall_height_ft × stories
window_sf = gross_wall_sf × 0.18  (WWR default)
net_wall_sf = gross_wall_sf − window_sf
roof_sf = footprint_sf × 1.10  (slope factor)
foundation_sf = footprint_sf
volume_cf = footprint_sf × wall_height_ft × stories

A 2,300 sf single-story house produces a 48 × 48 footprint, ~1,728 sf of gross walls, ~311 sf of windows, ~2,530 sf of roof, and ~20,700 cubic feet of volume.

Step 3 — Envelope UA
From R-values to total heat-loss coefficient

Each envelope element's UA (heat loss coefficient, BTU/hr-°F) is area divided by R-value. The total UA includes a constant infiltration term derived from blower-door ACH50:

UA_wall  = net_wall_sf / wall_R
UA_roof  = roof_sf / ceiling_R
UA_floor = foundation_sf / floor_R
UA_window = window_sf × window_U
UA_infiltration = volume_cf × (ACH50 / 20) × 0.018
total_UA = sum of the above

The ACH50/20 conversion approximates natural air change rate from blower-door ACH50 via the LBNL N-factor for typical US climates. The 0.018 factor is the volumetric heat capacity of air (BTU/cf-°F). Default R-values come from IECC 2021 for the climate zone unless overridden by the chosen assembly (Passive House paths use the actual derived R-value from the assembly stack).

Step 4 — Annual heating
Degree-day method with ventilation and internal gains

Heating energy is computed via the classic degree-day method, modified to include ventilation losses and internal heat gain credits:

envelope_load_btu = total_UA × HDD × 24

vent_cfm = 7.5 × occupants + 3 × (floor_area_sf / 100)  (ASHRAE 62.2)
vent_load_per_hr = vent_cfm × 60 × ΔT × 0.018 × (1 − HRV_efficiency)
heating_hours = HDD / 20 × 24  (empirical correlation)
ventilation_load_btu = vent_load_per_hr × heating_hours

internal_gains_btu = (230 × occupants + 800) × 8760 × heating_credit_fraction

net_load_btu = max(0, envelope_load + ventilation_load − internal_gains)
fuel_used = net_load_btu / system_efficiency / energy_per_unit

The 230 BTU/hr per person is ASHRAE metabolic heat for light office activity; 800 BTU/hr is the constant appliance/lighting baseline. The heating credit fraction is the share of the year that heating runs (heating_hours/8760), so summertime metabolic gains aren't subtracted from winter heating loads.

System efficiencies are: gas furnace AFUE 0.80, high-efficiency gas 0.95, standard heat pump HSPF 8.8 (COP ≈ 2.58), cold-climate heat pump HSPF 10.0 (COP ≈ 2.93), electric resistance 1.0, geothermal COP 4.0. HSPF is converted to COP by dividing by 3.412 (BTU/Wh).

Step 5 — Annual cooling
Sensible load plus zone-specific latent uplift

Cooling load combines envelope, solar gain through windows, internal gains, and ventilation, then multiplies the sensible total by a latent uplift factor that depends on the climate's moisture zone:

envelope_cooling_btu = total_UA × CDD × 24
solar_gain_btu = window_sf × SHGC × 200 × 4 × cooling_days
internal_gains_btu = (230 × occupants + 800) × cooling_hours
ventilation_cooling_btu = vent_load_per_hr × cooling_hours

sensible_total_btu = envelope + solar + internal + ventilation
total_cooling_btu = sensible_total_btu × (1 + latent_uplift)
cooling_kwh = total_cooling_btu / (COP × 3,412)

The latent uplift is a lookup by climate zone and moisture zone — the dehumidification penalty for humid climates. Selected values:

ZoneHumid (A)Dry (B)Marine (C)
1 (Miami)0.400.10
3 (Atlanta)0.250.050.12
5 (Chicago)0.150.080.12
7 (Duluth)0.080.05

SEER ratings are converted to COP by dividing by 3.412. Code-minimum AC is SEER 14 (COP ≈ 4.1). The 200 × 4 in solar gain is 200 BTU/sf-hr average summer solar flux × 4 hours/day equivalent of direct exposure.

Step 6 — Water heating & baseline
Domestic hot water and non-HVAC electricity

Hot water energy scales with occupants. Baseline electricity covers lighting, plug loads, and appliances:

gallons_per_day = 25 × occupants
annual_hot_water_btu = gallons_per_day × 365 × 541  (541 BTU/gal at 65°F rise)
hot_water_fuel = annual_hot_water_btu / system_EF / energy_per_unit

baseline_kwh = 5,500 × (occupants / 2.5) × area_factor
area_factor = 1 + 0.0001 × max(0, floor_area_sf − 2000)

Hot water energy factors (EF): gas tank 0.62, gas tankless 0.82, electric tank 0.92, heat pump water heater 3.5 (COP-equivalent). The baseline electricity floor of 5,500 kWh/year for a 2.5-person household is the EIA RECS 2020 median for non-HVAC residential electricity; it scales linearly with occupants and weakly with floor area.

Step 7 — Solar PV
Generation, embodied, and the “no greenwashing” rule

PV is treated as both an operational offset and an embodied carbon cost:

annual_kwh_generated = kw_dc × state_specific_yield_kwh_per_kw
  (NREL PVWatts v8 — MI ~1,230, AZ ~1,650, WA ~1,050)

pv_embodied_kg = kw_dc × 1,800  (IEA-PVPS Task 12 median)

electric_offset_kwh = min(consumption, generation × net_meter_frac)
carbon_offset_kg = electric_offset_kwh × grid_factor

gross_operational_co2 = (heating + cooling + WH + baseline) × factors
net_operational_co2 = max(0, gross_operational_co2 − carbon_offset)

The max(0, ...) clamp is intentional. Per ISO 21930 attributional LCA, exported electricity does not create negative operational carbon for the building. This means oversizing PV beyond actual consumption adds embodied carbon (1.8 t per kW) without further offset — so a 20 kW array on a leaky house has a higher whole-life total than a 10 kW array on the same house. The tool will not let users "buy negative carbon" with surplus PV.

Step 8 — Embodied (envelope)
BEAM material data, assembled per square meter

Each envelope assembly (wall, roof, foundation) is built from a stack of materials drawn from the BEAM Tool v4.1 database (Builders for Climate Action). Each material has a per-thickness or per-mass embodied factor and, where applicable, a biogenic carbon storage value:

for each material in assembly:
  quantity = thickness × density (or layer-specific quantity)
  emissions_kg_per_m2 += quantity × A1-A3_factor
  biogenic_kg_per_m2 += quantity × biogenic_factor

net_kg_per_m2 = emissions − biogenic
total_kg = net_kg_per_m2 × element_area_m2

The bounding box is A1–A3 (cradle-to-gate): raw material extraction, transport to factory, and manufacturing. Excluded for now: A4 (transport to site), A5 (installation), B1–B7 (use and maintenance), C1–C4 (end of life), D (beyond system boundary). These omissions matter most for assemblies with short service life (cladding, roofing) and for biogenic materials whose net climate impact depends on end-of-life assumptions.

Windows use a placeholder of 80 kg CO₂e/m² of glazed area, drawn from industry-average aluminum-clad and vinyl windows. This is a flat assumption that does not yet vary by frame type or glazing performance.

Step 9 — Embodied (non-envelope)
Placeholder presets for interiors, MEP, finishes, cabinetry

Interior partitions, mechanical/electrical/plumbing equipment, floor finishes, and cabinetry are estimated via per-square-foot category presets, scaled by total floor area:

for each category in [partitions, finishes, MEP, cabinetry]:
  total_kg += category_kg_per_sf × floor_area_sf

// Preset totals (sum of all four categories):
modest_finish_level → 16 kg/sf
typical_finish_level → 23 kg/sf
high_end_finish_level → 36 kg/sf

Sources: CLF MEP-LCA 2024, Athena Sustainable Materials Institute residential prototype outputs, Magwood (2022) Build Beyond Zero, BEAM v4.1. These are typical-range averages, not project-specific. Real residential non-envelope carbon varies by ±30% from these presets depending on actual equipment, finish brands, and interior configuration. For a 2,300 sf house this contributes 37–83 t of the total, making it the largest single source of absolute uncertainty in the whole-life total.

Step 10 — Carbon and cost rollup
From fuel use to CO₂ and dollars

Each fuel stream is converted to CO₂e using a constant emissions factor; each is also priced at the state rate:

// kg CO₂e per fuel unit:
natural_gas: 5.31 per therm
propane: 5.77 per gallon
fuel_oil: 10.28 per gallon
electricity: state grid factor (e.g. MI 0.47 per kWh)

annual_co2_kg = Σ (fuel × factor) − pv_offset
annual_cost_$ = Σ (fuel × state_rate) − pv_value

30_yr_carbon_tons = annual_co2_kg × 30 / 1000
30_yr_cost_$ = NPV(annual_cost, 4% discount rate, 30 years)

Whole-life carbon is the sum of embodied envelope + embodied non-envelope + embodied PV + 30 years of operational. The 30-year horizon is the IECC analysis period, not a building service life claim. The cost projection uses a 4% real discount rate per OMB Circular A-94 convention for long-horizon residential analysis.

Step 11 — Uncertainty quantification
Absolute ranges and comparative confidence

Two distinct uncertainty calculations run alongside every result:

// Per-component uncertainty (abs / comp):
operational_energy: ±10% / ±5%
grid_carbon: ±5% / ±2%
envelope_embodied: ±15% / ±10%
pv_embodied: ±15% / ±8%
pv_generation: ±15% / ±10%
non_envelope_embodied: ±30% / ±20%

// Composed via root-sum-of-squares (independent uncertainties):
σ_total = √(σ_op² + σ_envEmb² + σ_nonEnvEmb² + σ_pvEmb²)
90%_CI = central ± 1.65 × σ_total

// Comparative confidence between two scenarios:
σ_comparison = √(σ_op_comp² + σ_envEmb_comp² + ...)
sigmas = |Δ| / σ_comparison
very_high_confidence: ≥3σ  |  high: ≥2σ  |  moderate: ≥1.3σ
low: ≥0.7σ  |  within_noise: <0.7σ

Absolute uncertainty is the realistic spread on a single scenario's total — typically ±20–30% of the central value. Comparative uncertainty is much narrower because shared modeling assumptions cancel between scenarios. This is why a result like "317 t vs 67 t = 79% reduction" can be very-high-confidence even though each absolute value has a ±15% range.

Approach follows ISO 14044 (LCA principles), EPA WBLCA Guide, and standard practice for comparative LCA where shared boundary conditions reduce relative uncertainty. The 1.65σ multiplier gives the 90% confidence interval assuming approximately normal error distribution on independent components.

Known omissions (deliberate, in priority order to address)
  1. Grid decarbonization trajectory. Operational carbon uses a static 2022 grid factor over 30 years. Real grid carbon intensity is dropping ~2% per year in most US regions. This makes the tool conservative — long-term electrification benefits are larger than shown.
  2. Replacement cycles (B-modules). Vinyl cladding (~25-year service life) currently looks better than fiber cement (~50+ years) on A1-A3 alone. Adding service-life modeling would reverse some current rankings.
  3. Dual biogenic reporting. Biogenic carbon storage in cellulose, wood fiber, and straw is shown as a single net credit. ISO 21930 requires reporting gross and net separately to handle different end-of-life assumptions.
  4. ZIP-specific HDD/CDD. Climate-zone aggregation introduces 1–3% spread vs. precise ZIP-level normals. Largest effect for zones with wide internal variation (e.g., CZ 5 from Detroit to Marquette).
  5. Window thermal performance variation. Window embodied uses a flat 80 kg/m² regardless of frame type or U-factor. Triple-pane wood-clad and double-pane vinyl currently look identical on embodied.
04
Reading the ranges and confidence levels.
How to interpret the "likely range" bars on the chart and the confidence labels on scenario cards.
Likely range (vertical bars on chart)

The vertical bar at year 30 shows the 90% confidence interval on the absolute total. This is wider than the single number suggests because non-envelope materials, equipment, and finish choices have real product-level spread that this tool doesn't try to nail down precisely. A 200 t result might be 170–230 t in reality. That's not a flaw in the engine — it's an honest representation of what the data supports.

Comparative confidence (scenario cards)

When comparing scenarios, the same modeling assumptions affect both — so the difference between them is much more reliable than the absolute values. "Very high confidence" means the gap is so large (3+ standard deviations) that the ranking is unambiguous. "Within modeling noise" means the difference falls within the inherent spread of the assumptions — the two scenarios are effectively a tie.

Methodology: Per-component uncertainty bands (operational ±10%, envelope ±15%, non-envelope ±30%, PV ±15%) are composed via root-sum-of-squares (independent uncertainties). Comparative confidence uses narrower bands (operational ±5%, envelope ±10%, non-envelope ±20%, PV ±8%) because shared modeling assumptions cancel out between scenarios. Approach follows ISO 14044 and EPA WBLCA Guide conventions.