Commit Graph

  • 57121d5213 Widget preview screen + shared widget rendering; dark-mode screenshots with real data FuelBoard Contributor 2026-08-15 16:25:10 +01:00
  • 24b6ca9bb2 Copy: England → UK-wide, include Northern Ireland; migrate user-facing copy into Localizable.strings FuelBoard Contributor 2026-08-15 16:04:56 +01:00
  • 4797886a1d Add raw App Store screenshot captures (6.9-inch, 1320x2868) FuelBoard Contributor 2026-08-15 15:55:19 +01:00
  • b5a49fc68d App Store prep: privacy manifests, 1.0.1 (2), OGL attribution, UK empty state, screenshot harness FuelBoard Contributor 2026-08-15 15:50:26 +01:00
  • 06dd8a919c APPSTORE.md: submission plan — P0 resolved old blockers, owner/timeline checklist FuelBoard Contributor 2026-08-15 14:57:20 +01:00
  • 44a8e7f42a Onboarding: prompts fire on forward-leave of their page, not arrival FuelBoard Contributor 2026-08-15 14:44:18 +01:00
  • b634c0686d Onboarding: permission prompts fire on page arrival, not just Continue FuelBoard Contributor 2026-08-15 14:34:24 +01:00
  • 485ef782b6 Stations tab: explainer styled like the Favourites cheapest callout FuelBoard Contributor 2026-08-15 14:22:43 +01:00
  • b072b62208 Stations tab: explainer moved below the list with N/TOTAL station count FuelBoard Contributor 2026-08-15 13:57:08 +01:00
  • 10ab1cebef Backlog: P0 Done entry updated for GitHub-only consumer chain FuelBoard Contributor 2026-08-15 13:33:53 +01:00
  • 535a504160 Consumer chain: GitHub-only — relay removed from app+widget, Local Network permission gone FuelBoard Contributor 2026-08-15 13:33:02 +01:00
  • c447372d40 Backlog: P0 live chain DONE (moved to Done, P0 section cleared) FuelBoard Contributor 2026-08-15 13:01:37 +01:00
  • 366e21a1b4 P0: live provider chain — GitHub mirror primary, relay fallback, bundled dump last resort + app telemetry beacon FuelBoard Contributor 2026-08-15 13:00:24 +01:00
  • 54aca14fd4 Trends: anchor empty/loading/error states to the top of the chart slot FuelBoard Contributor 2026-08-15 12:30:25 +01:00
  • d1fbac3f05 New app icon (drip: £ fuel drop, green border, gradient bg) + Alerts radius guidance labels FuelBoard Contributor 2026-08-15 12:18:56 +01:00
  • 6cbf1dfc8f Debug: 100 m fence delivery test + test-button trace logging FuelBoard Contributor 2026-08-15 11:46:00 +01:00
  • 494412ba99 Debug: live alert trace — surface every gate decision from the alert chain FuelBoard Contributor 2026-08-15 11:10:10 +01:00
  • d0d25811c7 chore: untrack build-sim artifacts (ignored now; were committed before the rule) FuelBoard Contributor 2026-08-15 10:12:46 +01:00
  • aab2d02ef5 P1: Favourites Trends graph — FuelHistoryStore + TrendsView (Swift Charts) FuelBoard Contributor 2026-08-15 10:12:23 +01:00
  • 5b83d9f510 Backlog: P0 mirror push side DONE (repo live, deploy key, launchd daily job); size math corrected to full-dump 2.58MB/day @180d retention (Option 2) FuelBoard Contributor 2026-08-15 09:24:33 +01:00
  • 0545659c1b Backlog: P0 GitHub mirror — capture telemetry implications (widget beacon survives, opportunistic app beacon, /stats canary + fallback-outage signal) FuelBoard Contributor 2026-08-15 08:43:59 +01:00
  • 817a829107 Backlog: P0 archive reshaped to GitHub price-history mirror (relay pushes daily latest.json + history/YYYY-MM-DD.json to public fuelboard-data repo; app reads raw.githubusercontent); P3 production-mirror item absorbed into P0 FuelBoard Contributor 2026-08-15 05:49:18 +01:00
  • 16bf9ba9dd Backlog: price-history direction — P0 relay archive (start now) → P1 Favourites Trends graph → P2 avg/min-max overlay → P3 prediction arrow + widget sparkline FuelBoard Contributor 2026-08-15 05:39:51 +01:00
  • bb6ee33254 Stations: move price-rating Key (legend) into a modal sheet opened by an info button in the nav header; list stays focused on stations. Sheet = medium detent, inline nav title 'Key', Done button; legend rows unchanged. Adds -showKeySheet launch arg (QA hook for sim). FuelBoard Contributor 2026-08-14 23:53:02 +01:00
  • 75506b48b7 Telemetry: tag relay fetches with X-Client (app/widget) — app via RelayFuelProvider, widget focused/fuel-only fetches + diag beacon; Siri untouched (cached-only). Purely observational for relay admin /stats. FuelBoard Contributor 2026-08-14 23:23:06 +01:00
  • d91652aedc Onboarding: space the welcome feature rows out vertically (per-row padding 5pt → 10pt) FuelBoard Contributor 2026-08-14 22:47:48 +01:00
  • 9571e0c876 Onboarding: enlarge welcome-page feature icons 16pt → 20pt (semibold, wider alignment frame) for readability FuelBoard Contributor 2026-08-14 22:43:10 +01:00
  • bfb59d498a Live Activity: price now respects the Price display style — style carried in ContentState (captured at push time, extension renders deterministically instead of re-reading storage), setting change pushes an in-place content update via explicit override (no save-ordering race) FuelBoard Contributor 2026-08-14 21:06:04 +01:00
  • 8a589a35c1 Settings: drop parenthesized example figures from Price display segmented buttons — 'Station sign' / 'Pounds & pence' (cleaner, roomier labels) FuelBoard Contributor 2026-08-14 20:56:01 +01:00
  • e317a1e451 Settings: rename 'Show introduction' row to 'Replay onboarding' with round-arrow icon (arrow.clockwise.circle); key stays the address, value changed in Localizable.strings FuelBoard Contributor 2026-08-14 19:34:11 +01:00
  • 80113456ae Price display: station sign drops the £ (134.9) — matches roadside signs; pounds & pence uses forecourt superscript style £1.29⁹/L (small superscript third digit, small /L); attributed Text on list/widgets/Live Activity, Unicode superscript in Siri cards FuelBoard Contributor 2026-08-14 18:14:10 +01:00
  • fd7fa5f9c9 Settings: price display toggle — station sign (£129.9) vs pounds & pence (£1.299); display-only, all surfaces (list, widgets, Live Activity, Siri cards); Siri dialog stays speech-safe pounds FuelBoard Contributor 2026-08-14 15:33:26 +01:00
  • 819d2e6152 BACKLOG: favourite-directions phrase drop + Directions-to-Cheapest allocation FuelBoard Contributor 2026-08-14 14:50:53 +01:00
  • 8a4c472ab3 Siri: allocation swap B — Directions-to-Cheapest voice phrases restored (per-fuel), favourite-directions phrases dropped (card button covers it) FuelBoard Contributor 2026-08-14 14:50:31 +01:00
  • b46c09109e Siri: full-width Directions row on price card — fixes squashed 2-line button in narrow snippet FuelBoard Contributor 2026-08-14 14:45:51 +01:00
  • 6d7254ebba Siri: interactive price-card snippet (iOS 26 SnippetIntent) with Directions button → Apple Maps; zero AppShortcut slots FuelBoard Contributor 2026-08-14 14:38:14 +01:00
  • b458d92972 Siri: favourite price + favourite directions (top favourite per fuel); trim to 10 AppShortcuts (Apple cap) FuelBoard Contributor 2026-08-14 14:24:20 +01:00
  • aed99e3f32 Siri directions: speak the station before Maps hand-off (.result(opensIntent:dialog:)) FuelBoard Contributor 2026-08-14 14:05:42 +01:00
  • caadf184f2 Siri: Directions to Cheapest [fuel] AppShortcuts — OpenURLIntent hands off to Apple Maps (universal link) FuelBoard Contributor 2026-08-14 13:55:03 +01:00
  • a3b6f37843 Siri: shortcut names match app (Unleaded/Premium/Diesel); phrases cover UK speech variants FuelBoard Contributor 2026-08-14 13:23:52 +01:00
  • e55078c5e2 Siri: per-fuel App Shortcuts with literal fuel words (unleaded/petrol/premium/diesel) + UK case labels FuelBoard Contributor 2026-08-14 13:06:26 +01:00
  • 037c2418af Siri: scope cheapest-near-me to the saved search radius (5/10/15 mi) FuelBoard Contributor 2026-08-14 12:49:30 +01:00
  • be781d80f5 Backlog: Siri on-screen awareness (View Annotations + StationEntity) P2 FuelBoard Contributor 2026-08-14 12:42:27 +01:00
  • 29d4a0472b Siri: cheapest [fuel] near me intent + App Shortcuts (cached-first, freshness label) FuelBoard Contributor 2026-08-14 12:32:31 +01:00
  • b5fe21c44b Backlog: Siri cheapest entry notes Tailscale interim + IN PROGRESS status FuelBoard Contributor 2026-08-14 12:29:09 +01:00
  • f85c74a7a8 Backlog: Localizable.strings key-normalization idea (P3, no action) FuelBoard Contributor 2026-08-14 12:02:26 +01:00
  • b66a9161a3 Copy sync: Localizable.strings matches current UI (114 keys; favourites reorder note, geofence debug section, alerts footer; dead keys pruned) FuelBoard Contributor 2026-08-14 11:07:15 +01:00
  • fbf8c79feb Favourites: drag-and-drop reorder per fuel; stored order drives single-widget favourite FuelBoard Contributor 2026-08-14 10:48:53 +01:00
  • aa95d214e8 Alerts: move geofence monitoring status to Settings debug; plain-language footer FuelBoard Contributor 2026-08-14 10:34:45 +01:00
  • edf376d378 Settings: move Data source section behind debug flag (debug-only) FuelBoard Contributor 2026-08-14 10:01:36 +01:00
  • 3dd567a5cc Widgets: merge small+medium into one kind (both sizes, one gallery entry) FuelBoard Contributor 2026-08-14 09:52:50 +01:00
  • e62177ae2e Backlog: add lock screen widgets (P2, Option B) FuelBoard Contributor 2026-08-14 05:02:43 +01:00
  • e044a1552a Backlog: add Siri/Shortcuts features (P1-P3); mark widget config done FuelBoard Contributor 2026-08-14 04:59:26 +01:00
  • f5a5d3325f Swap app icon to water-drop pound design (drip export) FuelBoard Contributor 2026-08-14 04:53:31 +01:00
  • b94f769750 Small widget: support .systemMedium so the icon menu offers both sizes FuelBoard Contributor 2026-08-14 02:53:52 +01:00
  • 6375af4c05 Small widget: restore its own intent TYPE (minimal params) for the icon menu FuelBoard Contributor 2026-08-14 02:28:43 +01:00
  • 050c9f13a3 Onboarding: show the app icon with iOS rounded corners FuelBoard Contributor 2026-08-13 23:41:16 +01:00
  • fec139cf5a Icon: replace with Fuelboard-copy composer render (Vecteezy gas-station art) FuelBoard Contributor 2026-08-13 23:36:57 +01:00
  • 018e6eec2f Icon: use the Icon Composer render instead of the pre-baked appiconset PNG FuelBoard Contributor 2026-08-13 22:00:14 +01:00
  • 3545239ad6 New app icon: green pump showing £1.00, with dark + tinted variants FuelBoard Contributor 2026-08-13 21:37:36 +01:00
  • cd88e23601 Widget pump icon flexes to the chosen fuel's colour FuelBoard Contributor 2026-08-13 20:53:20 +01:00
  • dafc96f845 Fix small widget skeleton: use the proven medium intent; delete failing small intent FuelBoard Contributor 2026-08-13 20:43:15 +01:00
  • 553730681f A/B test: from-scratch minimal small widget (proven medium intent) FuelBoard Contributor 2026-08-13 20:27:03 +01:00
  • 8a9e77546f Small widget: remove @IntentParameterDependency from WidgetFavouriteQuery FuelBoard Contributor 2026-08-13 20:23:12 +01:00
  • 3cf1d5c9af Widget diagnostics: per-intent beacons (keychain slots + relay query) FuelBoard Contributor 2026-08-13 20:13:24 +01:00
  • 335a9751dc Widget diagnostics: beacon from makeEntry (keychain + relay) + app diagnostics section FuelBoard Contributor 2026-08-13 19:52:12 +01:00
  • 4d35b08533 Widget: keychain-free fresh defaults — drop defaultResult(), auto-populate at entry time FuelBoard Contributor 2026-08-13 19:35:46 +01:00
  • 8646521176 Small widget: fuel-only relay fetch when no location, so default/Cheapest/Closest faces populate with real stations instead of sample data. Root cause of the persistent skeleton: favourites mode reads keychain (works on free accounts), but the non-favourites path needs stations — the app-group cache can be absent on free accounts and keychain can't hold the station dump, so with no location fix the widget fell through to SampleFuelProvider and never populated. Now when location is nil the widget fetches /api/v1/stations?fuel=X&limit=500 (fuel-only, cheapest-first, verified against the relay). FuelBoard Contributor 2026-08-13 18:51:41 +01:00
  • 38b47eea38 Widget gallery order + default-widget skeleton fix. (1) Register FuelPriceSmallWidget BEFORE FuelPriceWidget so the gallery lists small, then medium (bundle order = gallery order). (2) Revert entity resolution to LENIENT: the timeline request resolves the full configuration through the entity queries, and the b1765b5 strict entities(for:) (nil for the empty default favourite 'fuel|') failed resolution for default-config small widgets, stranding them on the iOS skeleton placeholder. entities(for:) now always returns a value; defaultResult() still auto-populates fresh widgets to the first fuel with a favourite / first favourite of that fuel. FuelBoard Contributor 2026-08-13 18:39:30 +01:00
  • b1765b5611 Widget favourites defaults: auto-populate Fuel and Favourite rows when Sort = Favourites. FavouriteFuelQuery gains defaultResult() (first fuel with a favourite, Unleaded→Diesel order) and strict entities(for:) — a stored fuel that no longer has favourites fails resolution and falls back to the default. WidgetFavouriteQuery gains defaultResult() (first favourite of the Fuel row's fuel, else first favourite overall) and strict entities(for:) — the empty static default ('fuel|') and removed favourites now resolve to nil so the sheet pre-selects a real favourite instead of showing a placeholder. Provider fallback (cheapest favourite of the fuel) unchanged. FuelBoard Contributor 2026-08-13 18:28:23 +01:00
  • 906f8a8429 Small widget: declare config params in display order for every summary branch. If iOS falls back to declaration order when re-rendering the sheet after a parameter change, the favourites branch previously re-ordered to Sort by first (sort was declared before favouriteFuel). Now favouriteFuel, fuel, sort, favourite, distance — Favourites mode reads Fuel · Sort by · Favourite under either ordering mechanism. No encoding change (config keys are identifiers, order-independent). FuelBoard Contributor 2026-08-13 18:21:03 +01:00
  • 926317236a Widget config sheets: unify row layout across both widgets — Fuel type first, then Sort by, then Favourite (Favourites sort only). Small widget's Favourites branch reordered from Sort/Fuel/Favourite to Fuel/Sort/Favourite, and the favourites-scoped fuel param retitled 'Fuel' so the row reads identically in every mode. Medium widget was already Fuel-first. No parameter type changes, so no stored-config reset beyond the normal reinstall. FuelBoard Contributor 2026-08-13 18:02:53 +01:00
  • 3e2d3775f2 Widget config sheet: revert WidgetSort to String-backed AppEnum. parameterSummary When(\.$sort, .equalTo, …) silently falls back to the otherwise branch for AppEntity parameters (iOS 17+ bug FB13263902), which hid the Favourite/Favourite Fuel rows on the small widget — the metadata compared against a literal 'WidgetSort.favourites' string instead of the enum case. String AppEnums match reliably (the d8506a0 form). Tradeoff: the Sort picker always offers Favourites; picking it with no favourites shows the empty state. FavouriteFuel entity + IntentParameterDependency filtering unchanged. FuelBoard Contributor 2026-08-13 17:48:33 +01:00
  • d0bd4e7a8e Small widget favourites config: fuel dictates the favourite list (@IntentParameterDependency filters picker options by the chosen fuel), fuel picker shows only fuels with favourites (FavouriteFuel entity), Favourites sort hidden when no favourites exist (WidgetSort → dynamic AppEntity), fuel tags removed from favourite rows FuelBoard Contributor 2026-08-13 17:14:14 +01:00
  • d8506a035f Small widget favourite picker: embed station name + multi-fuel flag in the WidgetFavourite entity so picker rows render with no storage read (config-sheet resolution can run without keychain/app-group access, which made every row show the 'Favourite' placeholder) FuelBoard Contributor 2026-08-13 17:00:17 +01:00
  • 7357eb98c3 Small widget favourites: fuel row returns to the config sheet (picks the default favourite); pinned favourite wins, fuel-tagged picker rows when favourites span >1 fuel; fallback = selected fuel's cheapest favourite FuelBoard Contributor 2026-08-13 16:51:21 +01:00
  • 1bdef59d78 Small widget: Favourites gains a picker to pin which favourite to show (separate FuelPriceWidgetSmall kind + AppEntity picker; medium keeps the list, no picker). Backlog: dual-unit widget picker labels FuelBoard Contributor 2026-08-13 15:49:18 +01:00
  • 26e724f48a Widget config: Distance picker as AppEntity so labels resolve dynamically from the app's units (AppEnum labels are static) FuelBoard Contributor 2026-08-13 15:33:24 +01:00
  • 64330f96a8 Widget config: Distance picker mirrors the app's units setting (5 mi = 8 km) via dynamic AppEnum displayRepresentation FuelBoard Contributor 2026-08-13 15:25:20 +01:00
  • 2409b71f2f Labels: pluralize miles (1 mile) and show true distances in the chosen unit (5 mi = 8 km) across Alerts/Stations pickers + captions FuelBoard Contributor 2026-08-13 15:10:23 +01:00
  • 490c343fd5 Alerts: mile-friendly radius 1/2/3/5/8 + Follow search (capped 8 mi); Live Activity Follow search; legacy radii clamped FuelBoard Contributor 2026-08-13 15:00:53 +01:00
  • bb48995fac Onboarding copy: tighten values (daily refresh, widget line, alert line) FuelBoard Contributor 2026-08-13 14:22:12 +01:00
  • 61bb61d802 Backlog: add GitHub production-data mirror (P3); mark API switch, unit tests, backoff done FuelBoard Contributor 2026-08-13 14:04:58 +01:00
  • 2d070fa3ba Fuel colours: align with wheel palette — Unleaded #30D158, Premium #FFD60A, Diesel #64D2FF FuelBoard Contributor 2026-08-13 13:09:22 +01:00
  • 3fe2a7f03c Onboarding copy: drop premium fuel mention, 'updated daily' FuelBoard Contributor 2026-08-13 13:02:50 +01:00
  • 0d91c82bb1 Localize all app copy via Localizable.strings FuelBoard Contributor 2026-08-13 10:57:36 +01:00
  • bbe43a6149 Onboarding: Local Network confirmation matches other pages FuelBoard Contributor 2026-08-13 10:35:18 +01:00
  • a1fa0f9998 Onboarding: silent Local Network pre-flight on replay FuelBoard Contributor 2026-08-13 10:29:20 +01:00
  • ed243fae9e Onboarding: show green tick on Local Network page before advancing FuelBoard Contributor 2026-08-13 10:11:57 +01:00
  • cb174f66fa Settings About: drop redundant 'FuelBoard x.y(z)' footer FuelBoard Contributor 2026-08-13 10:06:51 +01:00
  • c2a9943d4c Favourites tab: fuel-type selector gets the same coloured pump icons FuelBoard Contributor 2026-08-12 23:03:35 +01:00
  • 0fef9870cb Favourites tab: remove the crown 'cheapest favourite' banner FuelBoard Contributor 2026-08-12 23:00:16 +01:00
  • d864319593 Fuel-type segmented control: coloured pump icons per fuel FuelBoard Contributor 2026-08-12 22:52:03 +01:00
  • 7f7c0fff03 Alerts tab: picker-style config matching Live Activity; move Live Activity there FuelBoard Contributor 2026-08-12 22:30:54 +01:00
  • a721ccd187 Raise deployment target to iOS 26.0; enable CarPlay Live Activity FuelBoard Contributor 2026-08-12 21:13:24 +01:00
  • fcb83f1eed Live Activity: own fuel + distance config, independent of Stations tab FuelBoard Contributor 2026-08-12 20:58:05 +01:00
  • 04b233bf9a Live Activity: cheapest-in-radius Lock Screen/Dynamic Island pill FuelBoard Contributor 2026-08-12 20:11:42 +01:00
  • 1dcd47c6cd Fix widget distance menu + geofence notification chain FuelBoard Contributor 2026-08-12 18:18:24 +01:00
  • f822bd2636 Live-test fixes: CarPlay disfavor, widget location refresh, debug cheapest parity FuelBoard Contributor 2026-08-12 18:01:29 +01:00
  • d37aab04f1 Widget: family-aware row cap — large/extraLarge show 5 stations, medium 3 FuelBoard Contributor 2026-08-12 16:35:42 +01:00