FuelBoard Contributor
35e0adaf0b
Favourites are fuel-scoped: starring pins the station for one fuel only
...
Fixing the bug where favouriting an Unleaded entry also created a Diesel
favourite. Favourites are now [FavouriteEntry] = (station, fuel) pairs:
- Starring a row pins it only for the fuel being viewed
- Favourites tabs show only fuels that actually have favourites
- Geofence monitor gives priority slots only to favourites matching the
monitored fuel
- Tests updated + new fuel-scoping test (31/31 passing)
2026-08-12 08:31:08 +01:00
FuelBoard Contributor
0dbf88ee7d
Favourites: split list by fuel type with segmented tabs
...
Only fuel types that currently have at least one favourite appear as
tabs; each tab ranks that fuel's favourites cheapest-first and the
narrative (crown header, section title, cheapest-favourite explainer)
names the active fuel.
2026-08-12 08:17:10 +01:00
FuelBoard Contributor
7903c9a2d8
App icon: match the onboarding welcome badge
...
Green-to-blue gradient circle with a white fuel pump symbol on a light
background — identical to the first onboarding icon.
2026-08-12 08:10:25 +01:00
FuelBoard Contributor
a6b1e24cd6
Merge station count into the top explainer
...
The 'N stations within X' caption now lives in the header explainer
(Closest/Cheapest + radius + count on one line); the Distance section
shows just the picker.
2026-08-12 08:02:38 +01:00
FuelBoard Contributor
75cfb3681d
Remove 'Distance only applies to Cheapest' explainer
...
Closest mode now shows the disabled distance picker with no caption;
the N-stations-within caption still appears in Cheapest mode.
2026-08-12 07:58:01 +01:00
FuelBoard Contributor
44c6c38536
Add Settings tab: distance units toggle, onboarding replay, £4.99 tip; drop E10/E5 from labels
...
- FuelType labels: 'Unleaded (E10)'/'Premium (E5)' -> 'Unleaded'/'Premium'
- New DistanceUnit (miles/km) preference; all app + widget distances,
radii and alert text convert/display in the chosen unit
- Settings tab (4th tab): segmented miles/km picker, 'Show introduction'
replay button (onboarding moved out of Alerts tab), StoreKit tip £4.99
- ProximityMonitor + widget notifications use the chosen unit
- Tests: label expectations updated, DistanceUnit conversion + format tests
2026-08-12 07:46:08 +01:00
FuelBoard Contributor
fb79cf0788
Add first-launch onboarding with location + notification permission prompts
...
- OnboardingView: 4-page flow (welcome + features, location, notifications, done)
- Triggers system prompts in-context via OnboardingPermissionPrompter
- Shown at initial launch only (FuelStore.onboardingCompleted flag, app-group defaults)
- Test hook: 'Show onboarding (testing)' button at bottom of Alerts tab
2026-08-12 07:10:54 +01:00
FuelBoard Contributor
2ed18d81a3
Backlog, tests, logo compression, security audit, App Store icon
...
- BACKLOG.md: P0-P3 roadmap incl. govuk API switch (blocked on credentials)
- APPSTORE.md: review-gate analysis (2 blockers: LAN data source, Always-location notes)
- SECURITY.md: audit - no secrets, no ATS holes, one MEDIUM (relay IP in binary, planned fix)
- FuelBoardTests/: SPM package, 28 tests on real Shared/ sources (sanitizer, price guard, RAG, sort, distance, brands)
- Logos: proper 2x/3x pairs, palette-quantized, 75% smaller (315KB -> 79KB)
- App icon: 1024px fuelpump on gradient (was missing entirely -> instant rejection)
- decodeStations(from:) exposed for testability; relay fetch reuses it
2026-08-11 23:14:28 +01:00
FuelBoard Contributor
05f3ef0a70
Add (E10)/(E5) bracket labels to Unleaded/Premium in picker and descriptions
2026-08-11 22:41:50 +01:00
FuelBoard Contributor
313fe84037
Use native large-title behaviour: drop custom icon header, .navigationTitle + .large (exact Mail-style collapse)
2026-08-11 22:27:38 +01:00
FuelBoard Contributor
24fffe1e8f
Pin large title above list so it fades+collapses in place on scroll (Mail-style cross-fade)
2026-08-11 22:21:09 +01:00
FuelBoard Contributor
ec191d77aa
Cross-fade large title with compact bar on scroll (Mail-style)
2026-08-11 22:15:11 +01:00
FuelBoard Contributor
cf69350472
Use native onScrollGeometryChange (iOS 18) so the compact icon+title bar actually appears on scroll, Mail-style
2026-08-11 22:05:03 +01:00
FuelBoard Contributor
8d24de401d
Large icon+title header at rest; compact gas-pump bar appears only after scrolling (tracker on header row background)
2026-08-11 21:59:32 +01:00
FuelBoard Contributor
644342ae63
Nav bar: always show gas-pump icon next to title (inline mode); remove scroll-offset row hack
2026-08-11 21:54:56 +01:00
FuelBoard Contributor
12cb3707b6
Nav bar: show compact gas-pump+title only when scrolled (large title at rest); drop icons from fuel picker
2026-08-11 21:49:18 +01:00
FuelBoard Contributor
39b310d68d
Add gas-pump icon left of title + coloured fuel-type tab icons (Unleaded green, Premium blue, Diesel grey)
2026-08-11 21:36:28 +01:00
FuelBoard Contributor
c1edd4d52d
App-side defensive price guard: drop grades outside 50-500p at decode (belt-and-braces vs relay regression)
2026-08-11 21:28:19 +01:00
FuelBoard Contributor
aee890e2a8
Title-case station names: fix Sainsbury's apostrophe, lowercase/mixed names, hyphen/paren chunks, acronyms; re-sanitize cache on load
2026-08-11 21:23:36 +01:00
FuelBoard Contributor
7be98c51ad
Closest mode: TOP + deltas vs the CHEAPEST within radius (not the nearest); list stays nearest-first
2026-08-11 20:16:32 +01:00
FuelBoard Contributor
2ca1274b8f
Closest mode: deltas vs the CLOSEST station (signed +X.Xp/-X.Xp), not the nationwide cheapest; baseline = sortedStations.first
2026-08-11 20:04:29 +01:00
FuelBoard Contributor
3bc795317a
Distance picker disabled in Closest mode; whole-country pool for nearest-first (radius never empties Closest)
2026-08-11 19:49:26 +01:00
FuelBoard Contributor
3cff677729
Distance change is local-only: no re-fetch (full-UK cache already covers 5/10/15 miles)
2026-08-11 19:41:46 +01:00
FuelBoard Contributor
d62ac1b265
Distance filter below fuel type under Distance heading; list paginated 10 rows with Show more
2026-08-11 19:38:08 +01:00
FuelBoard Contributor
cf9765be7b
Fetch full-UK dump (no radius/limit); stations in app-group defaults only; alert path keeps focused radius fetch
2026-08-11 19:30:02 +01:00
FuelBoard Contributor
3953c65a65
Show distances in miles (app + widget) to match the miles filter
2026-08-11 19:18:27 +01:00
FuelBoard Contributor
6eae42ff3d
STRICT radius enforcement: never fall back to out-of-radius stations in list, cheapest reference, or widget
2026-08-11 18:36:08 +01:00
FuelBoard Contributor
e0a5bb3d5d
Cheapest reference uses chosen miles radius (same pool as list) in app + widget; header shows 'within N miles'
2026-08-11 18:29:20 +01:00
FuelBoard Contributor
bcf4ea4f81
Enforce chosen miles radius client-side (cache may hold larger-radius stations); monospaced £ price + delta for decimal alignment
2026-08-11 18:07:17 +01:00
FuelBoard Contributor
0fc24eab7c
Fix alert fetch signature (radiusKM param); alert fetches within max(trigger radius, 10km)
2026-08-11 18:03:23 +01:00
FuelBoard Contributor
213f93aa04
Results filter is now search radius in miles (5/10/15); relay fetch scoped to radius, limit 500; changing miles re-fetches; caption shows stations within N miles
2026-08-11 18:02:23 +01:00
FuelBoard Contributor
810cc2c006
Show full fetch in list (count picker respected); radius scope only for cheapest/RAG reference; row = logo | name/address/distance | £price + delta | star
2026-08-11 17:54:04 +01:00
FuelBoard Contributor
8230daa249
Cache-first refresh policy: auto-fetch at most twice a day (12h gate), no fetch on launch/foreground/location/fuel-switch, pull-to-refresh forces; geofences still follow location
2026-08-11 17:43:11 +01:00
FuelBoard Contributor
5a08a3a2fa
Revert station name to natural width (truncates, does not fill row); price stays on row below right-aligned
2026-08-11 17:29:13 +01:00
FuelBoard Contributor
2d95c4e1d6
Scope cheapest/RAG/TOP to alert trigger radius in app + widget; header shows 'within X km'; falls back to full fetch when radius pool empty
2026-08-11 17:21:36 +01:00
FuelBoard Contributor
cde51622a3
All fuel prices per station (E10/E5/Diesel from one fetch); re-fetch on fuel switch; fuel tabs populate instantly
2026-08-11 17:16:55 +01:00
FuelBoard Contributor
e8a82ce515
Preload cached stations at launch (all tabs populate instantly); alert handler falls back to cache on background wake, restores enabled/fuel/radius in monitor init, re-registers geofences on setEnabled
2026-08-11 16:50:45 +01:00
FuelBoard Contributor
c5050df445
Live location tracking: continuous foreground updates (250m filter) + significant-change background monitoring; list/widget refresh and geofences follow the user, re-fetch on every move
2026-08-11 16:16:46 +01:00
FuelBoard Contributor
75629b39b5
Price right-aligned on second row; word-capitalise station titles (keep BP/MFG/ASDA)
2026-08-11 15:40:19 +01:00
FuelBoard Contributor
d8f635fb41
Move price + RAG delta to second row; name line is name-only full width
2026-08-11 15:27:57 +01:00
FuelBoard Contributor
3da5de6da2
Station name fills row width (logo left, price pinned right, wraps); fix Favourites alert wording
2026-08-11 15:24:52 +01:00
FuelBoard Contributor
60d25164d6
Tabs (Stations/Favourites/Alerts): favourites with cheapest-first ranking, proximity geofence alerts (favourites priority, 3km default radius, 1h dedup), Always location + background mode
2026-08-11 15:17:26 +01:00
FuelBoard Contributor
54403ed4b3
Enlarge brand logo badges 34pt -> 46pt
2026-08-11 15:04:02 +01:00
FuelBoard Contributor
d220023917
Round brand logos in station rows: 11 bundled assets (Simple Icons + Wikimedia), fuel-pump fallback for unknown brands
2026-08-11 15:00:26 +01:00
FuelBoard Contributor
acb5c33578
Remove Location status section; add 10/25/50/75/100 station limit picker; refresh location every foreground
2026-08-11 14:41:39 +01:00
FuelBoard Contributor
7304d99fd8
England-wide: relay-backed provider (full-UK data), regional sample fallback replaces Halifax-only
2026-08-11 14:34:04 +01:00
FuelBoard Contributor
2e2b189b69
Reorder: Fuel type → Stations (sort picker inside) → Key legend; drop emoji legend
2026-08-11 14:19:55 +01:00
FuelBoard Contributor
d9ec2f8c35
Sort toggle (cheapest/closest) + RAG value rating per station with TOP badge
2026-08-11 14:14:07 +01:00
FuelBoard Contributor
543212a721
Sort every fuel tab cheapest-first (distance only as tiebreaker) in app + widget
2026-08-11 14:09:14 +01:00
FuelBoard Contributor
4f5f1999a9
Location-driven results: widget fetches its own location (async, cache fallback), app auto-requests on first launch, Halifax sample stations
2026-08-11 14:03:41 +01:00