Backlog: add Siri/Shortcuts features (P1-P3); mark widget config done

This commit is contained in:
FuelBoard Contributor
2026-08-14 04:59:26 +01:00
parent f5a5d3325f
commit e044a1552a
+23 -5
View File
@@ -11,14 +11,22 @@ Status: TODO / IN PROGRESS / DONE / BLOCKED.
## P1 — Soon ## P1 — Soon
- [ ] **EV charging?** — National Chargepoint Registry as a 4th "Charging" tab - [ ] **Siri: "Cheapest [fuel] near me"**`AppShortcutsProvider` + `CheapestFuelIntent`
(second relay endpoint, ~40k+ UK chargers, OGL, connector-type filter) vs fuel-only. (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 ## P2 — Later
- [ ] **Widget configuration** — let the widget's fuel be chosen per-widget - [ ] **Shortcuts: station price lookup**`StationEntity` + `EntityQuery` so
(App Intent `FuelSelectionIntent` + `StaticConfiguration``AppIntentConfiguration`), Shortcuts/Siri pick a station by name; `ReturnsValue<Double>` enables user
instead of inheriting the app's selected fuel. Requires iOS 17 `AppIntentConfiguration`. 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 - [ ] **CarPlay** — widgets render but can't launch Maps; consider a proper CarPlay
scene (CPListTemplate) for navigation deep-links. scene (CPListTemplate) for navigation deep-links.
- [ ] **Alert region tuning** — make alert trigger radius + dedup window - [ ] **Alert region tuning** — make alert trigger radius + dedup window
@@ -33,6 +41,12 @@ Status: TODO / IN PROGRESS / DONE / BLOCKED.
## P3 — Ideas / Research ## 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 - [ ] **Production data mirror (GitHub)** — relay pushes the synced dump
(`stations.json` + `latest.json` version pointer) to a PUBLIC GitHub repo; the (`stations.json` + `latest.json` version pointer) to a PUBLIC GitHub repo; the
app fetches `raw.githubusercontent.com` with the LAN relay as fallback source. 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 - [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 relay-api :8789 (source: api, ~8,012 stations); app baseURL → :8789; credentials
live in relay `.env` only, never in the IPA 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 - [x] Unit test target for the app — FuelBoardShared XCTest target, 37 tests
(title sanitizer, decode price guard, RAG thresholds, cheapest/closest baseline, (title sanitizer, decode price guard, RAG thresholds, cheapest/closest baseline,
miles↔km) miles↔km)