diff --git a/BACKLOG.md b/BACKLOG.md index 7c58f55..27124a3 100644 --- a/BACKLOG.md +++ b/BACKLOG.md @@ -11,14 +11,22 @@ Status: TODO / IN PROGRESS / DONE / BLOCKED. ## P1 — Soon -- [ ] **EV charging?** — National Chargepoint Registry as a 4th "Charging" tab - (second relay endpoint, ~40k+ UK chargers, OGL, connector-type filter) vs fuel-only. +- [ ] **Siri: "Cheapest [fuel] near me"** — `AppShortcutsProvider` + `CheapestFuelIntent` + (App Intents, iOS 16+), dialog + price-card snippet, cached full-UK dump first + with freshness label ("as of 6am"), last-known-location fallback. Constraint: + fresh-data path needs a reachable source off-LAN — cached answers work anywhere + the app has previously fetched (see P3 data mirror). +- [ ] **Siri: "Closest [fuel] station"** — same plumbing as cheapest, sort by + distance instead of price. Free second phrase in the same `AppShortcutsProvider`. ## P2 — Later -- [ ] **Widget configuration** — let the widget's fuel be chosen per-widget - (App Intent `FuelSelectionIntent` + `StaticConfiguration` → `AppIntentConfiguration`), - instead of inheriting the app's selected fuel. Requires iOS 17 `AppIntentConfiguration`. +- [ ] **Shortcuts: station price lookup** — `StationEntity` + `EntityQuery` so + Shortcuts/Siri pick a station by name; `ReturnsValue` enables user + automations ("get cheapest diesel → notify"). +- [ ] **Siri: favourite station price** — "What's diesel at my favourite station?" + (cheap once `StationEntity` exists). + - [ ] **CarPlay** — widgets render but can't launch Maps; consider a proper CarPlay scene (CPListTemplate) for navigation deep-links. - [ ] **Alert region tuning** — make alert trigger radius + dedup window @@ -33,6 +41,12 @@ Status: TODO / IN PROGRESS / DONE / BLOCKED. ## P3 — Ideas / Research +- [ ] **Siri: create fuel alert** — voice-create an alert for a station. Deferred: + alert semantics (cheapest-within-radius + hourly dedup) are hard to express in + a dialog; needs the alert engine surfaced as an intent. +- [ ] **App Intents testing** — AppIntentsTesting (iOS 27) for intent coverage + instead of XCUITest when the Siri features land. + - [ ] **Production data mirror (GitHub)** — relay pushes the synced dump (`stations.json` + `latest.json` version pointer) to a PUBLIC GitHub repo; the app fetches `raw.githubusercontent.com` with the LAN relay as fallback source. @@ -58,6 +72,10 @@ Status: TODO / IN PROGRESS / DONE / BLOCKED. - [x] Switch dataset to govuk API data — official Fuel Finder OAuth API via relay-api :8789 (source: api, ~8,012 stations); app baseURL → :8789; credentials live in relay `.env` only, never in the IPA +- [x] Widget configuration — per-widget fuel/sort/distance via + `WidgetConfigurationIntent` (`AppIntentConfiguration`), distance options as + `WidgetDistance` AppEntity (`26e724f`); small widget gained Favourites + (`d0bd4e7`) + `.systemMedium` (`b94f769`) - [x] Unit test target for the app — FuelBoardShared XCTest target, 37 tests (title sanitizer, decode price guard, RAG thresholds, cheapest/closest baseline, miles↔km)