See the wholesale electricity price beneath the average on your bill.
Price Blur compares the residential electricity price a household usually sees with the underlying wholesale market price, then puts the gap into household terms. The current release includes a live New York view, a fifty-state residential-price map, and a measured replay of Winter Storm Uri.
Open the live Price Blur site.
The screenshot follows one New York City ZIP code from the May 2026 residential average to the live NYISO zonal price. A transparent household model turns both prices into a same-usage cost comparison. The page also opens a historical February 2021 replay showing how exposure to ERCOT's wholesale market changed during Winter Storm Uri.
This is a research interface, not a bill quote. Retail values are state averages, wholesale values are regional market references, and household usage is modeled rather than read from a smart meter.
npm install
npm run devOpen the local address printed by Next.js. New York ZIP codes use NYISO's keyless public real-time zonal LBMP feed. Other U.S. ZIPs resolve their state and display the bundled EIA residential-price snapshot, with wholesale coverage explicitly marked unavailable.
The public site is a static export, while the local development server keeps
the live server routes described above. Its NYISO snapshot is refreshed and
baked into a new deployment every two hours by
.github/workflows/pages.yml; the interface labels both the latest grid
interval and the build time. Build the same export locally with:
npm run refresh:nyiso
npm run build:pagesnpm test
npm run lint
npm run build
npm run build:pagesWith the app running, capture the required responsive evidence:
npm run capture- Residential prices:
data/eia-state-residential-prices.jsonis derived from U.S. Energy Information Administration Electric Power Monthly Table 5.6.A. It contains May 2026 state residential averages, released July 23, 2026. The source workbook is retained underdata/source/. - Live wholesale price: the New York view requests NYISO's keyless public
five-minute real-time zonal LBMP feed.
data/nyiso-nyc-cache.jsonis a dated fallback; the interface labels it as a snapshot whenever the live request cannot be used. - Household usage: the profiles in
src/config/household-profiles.tsare normalized load shapes scaled to the chosen monthly kWh. They are modeled scenarios, not measured household or smart-meter records. Editable fixed charges are kept separate from energy cost. - Winter Storm Uri:
data/ercot-uri-february-2021.jsonretains every 15-minuteLZ_HOUSTONreal-time settlement point price for February 2021 from ERCOT's public Historical RTM Load Zone and Hub Prices archive (report type 13061). Its embedded provenance records the retrieval time, archive URL and SHA-256, exact filter method, interval checks, and the EIA February 2021 Texas residential average used for the retail counterfactual. src/data/us-state-paths.tsis a build-time conversion of thestates-10m.jsonTopoJSON inus-atlas3.0.1 (ISC license, derived from U.S. Census Bureau cartography).d3-geoconverts it to U.S. Albers coordinates. The generated file records the source SHA-256 and ships as inline SVG paths; no map geometry or tiles are fetched at runtime.
Refresh scripts are intentionally local and credential-free:
npm run refresh:eia
npm run refresh:nyiso
npm run refresh:uri
npm run build:mapMIT. See LICENSE.
