Skip to content

Repository files navigation

Price Blur

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.

Price Blur showing the national residential-price map, a New York household comparison, and the underlying 24-hour wholesale-price curve

What it shows

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.

Quickstart

npm install
npm run dev

Open 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.

GitHub Pages

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:pages

Verify

npm test
npm run lint
npm run build
npm run build:pages

With the app running, capture the required responsive evidence:

npm run capture

Data provenance

  • Residential prices: data/eia-state-residential-prices.json is 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 under data/source/.
  • Live wholesale price: the New York view requests NYISO's keyless public five-minute real-time zonal LBMP feed. data/nyiso-nyc-cache.json is 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.ts are 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.json retains every 15-minute LZ_HOUSTON real-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.ts is a build-time conversion of the states-10m.json TopoJSON in us-atlas 3.0.1 (ISC license, derived from U.S. Census Bureau cartography). d3-geo converts 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:map

License

MIT. See LICENSE.

About

Compare what you pay for electricity with what the grid pays - live wholesale vs residential retail

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages