Backlog: price-history direction — P0 relay archive (start now) → P1 Favourites Trends graph → P2 avg/min-max overlay → P3 prediction arrow + widget sparkline

This commit is contained in:
FuelBoard Contributor
2026-08-15 05:39:51 +01:00
parent bb6ee33254
commit 16bf9ba9dd
+30 -2
View File
@@ -9,6 +9,17 @@ Status: TODO / IN PROGRESS / DONE / BLOCKED.
--- ---
## P0 — Next build
- [ ] **Price history archive (start now — warm the data for Trends)** — relay-api
appends one daily snapshot (digest-change-triggered, once per calendar day) using
the existing `relay_snapshot.py` shape; prune to ~90 days (~18 MB). No UI
dependency: accumulating TODAY means the Trends graph launches with weeks of real
history instead of an empty chart. Optional first-weeks tweak: hourly snapshots to
build history faster, then settle to daily. Later add
`/api/v1/history?station=&fuel=&days=` (keyless, X-Client-tagged like
`/api/v1/stations`).
## P1 — Soon ## P1 — Soon
- [x] **Siri: "Cheapest [fuel] near me"**`AppShortcutsProvider` + `CheapestFuelIntent` - [x] **Siri: "Cheapest [fuel] near me"**`AppShortcutsProvider` + `CheapestFuelIntent`
@@ -23,6 +34,15 @@ Status: TODO / IN PROGRESS / DONE / BLOCKED.
Directions-to-cheapest `caadf18` + spoken hand-off `aed99e3`.* Directions-to-cheapest `caadf18` + spoken hand-off `aed99e3`.*
- [ ] **Siri: "Closest [fuel] station"** — same plumbing as cheapest, sort by - [ ] **Siri: "Closest [fuel] station"** — same plumbing as cheapest, sort by
distance instead of price. Free second phrase in the same `AppShortcutsProvider`. distance instead of price. Free second phrase in the same `AppShortcutsProvider`.
- [ ] **Favourites Trends graph** — price history chart for starred stations.
Swift Charts (iOS 26 target) line chart in the Favourites tab; one series per
favourite, fuel-scoped (station, fuel) pairs map 1:1 to the archive. Default =
absolute price lines; toggle "vs cheapest favourite" re-baselines to 0 as signed
pence (mirrors the Cheapest/Closest delta pattern users already know). Reuse the
capsule fuel picker; range control 7/30/90 days; respects the price-display
toggle; honest empty-state copy in Localizable.strings ("Prices are recorded from
each refresh — check back in a few days"). No widget in v1 (one-kind rule).
Depends on the P0 archive.
## P2 — Later ## P2 — Later
@@ -69,6 +89,9 @@ Status: TODO / IN PROGRESS / DONE / BLOCKED.
- [ ] **Localization** — UK English only today; audit string catalog for l10n. - [ ] **Localization** — UK English only today; audit string catalog for l10n.
- [ ] **Dark mode polish** — verify brand logos (white-circle clips) and RAG dot - [ ] **Dark mode polish** — verify brand logos (white-circle clips) and RAG dot
contrast under dark appearance on-device. contrast under dark appearance on-device.
- [ ] **Trends: national average overlay + per-day min/max** — the full dump is
already held, so the UK/regional average line is computable locally; archive can
store per-day min/max so the chart shows intraday spikes, not just the daily point.
## P3 — Ideas / Research ## P3 — Ideas / Research
@@ -84,8 +107,13 @@ Status: TODO / IN PROGRESS / DONE / BLOCKED.
Public repo required for App Review (reviewer must fetch the data themselves); Public repo required for App Review (reviewer must fetch the data themselves);
HTTPS/ATS fine; plain JSON data is not "remote code" (2.5.2-safe); bundle a small HTTPS/ATS fine; plain JSON data is not "remote code" (2.5.2-safe); bundle a small
fallback dump so the app never demos empty. Needs GitHub PAT (aptonline account). fallback dump so the app never demos empty. Needs GitHub PAT (aptonline account).
- [ ] **Fuel-price prediction**trend from historical dumps (relay could keep a - [ ] **Fuel-price prediction**"price tends up/down" arrow derived from the
rolling archive) to show "price tends up/down". price-history archive (P0). Cheap once the archive + Trends graph exist; keep a
separate phase. Backlog ancestry: this was the original "relay could keep a
rolling archive" idea — the archive is now P0 and the Trends graph (P1) is its
visible half.
- [ ] **Widget sparkline** — medium-widget mini sparkline of a favourite's 30-day
trend, after the Trends UI lands (one-kind rule preserved).
- [ ] **Price alerts for a specific station** — notify when a starred station's - [ ] **Price alerts for a specific station** — notify when a starred station's
price drops below a user threshold. price drops below a user threshold.
- [ ] **Share sheet** — share "Cheapest Unleaded near me" as text/image card. - [ ] **Share sheet** — share "Cheapest Unleaded near me" as text/image card.