How it works
Rill Bates reads public prices and shows them. It does not estimate a bill, and it does not invent a number when an API is down.
Octopus rates
The current Agile import product is discovered from the products list, choosing the latest domestic import whose code starts with AGILE and is not Outgoing. The regional tariff code comes from that product, with the usual E-1R pattern only as a fallback. Half-hourly rates come from standard-unit-rates. The price on screen is value_inc_vat. When that equals value_exc_vat, the page says the two published figures match.
What cheap means
For each UK day, a half-hour is cheap when it is at least 15% below that day’s average, and expensive when it is at least 15% above. Below 0p is “you get paid”. The 4–7pm peak is reported on its own, because that is when the network charge usually bites, even if the wholesale price is mild.
Cheapest windows
A 1, 2, 3 or 4 hour block is a run of touching half-hours. The winner is the lowest average fully inside the published prices, starting now or later and within 48 hours. Gaps are not bridged. Appliance costs are that average times a kWh figure you can edit. The defaults are typical, not a measurement.
Forecast
The band beyond the published day comes from AgilePredict. Rill Bates asks for seven days, one run, and the high/low band, then caches the response for about three hours so a busy page does not hammer a hobby server. Their fair-use limit is about 60 requests a minute. If the forecast is missing, the published prices stay up and the forecast is left blank.
Caching
Recent rates are kept for about 10 minutes, history for about 6 hours, and the product code for about 12 hours. A short stale copy can be shown, clearly marked, if Octopus does not answer. The cache lives on the server disk (or /tmp) and does not need a database.
Privacy
There is no account. The region, theme, appliance kWh and any alert threshold stay in this browser. Analytics stay off unless you set a Plausible domain. No tracking cookies are set by default.