Ovidiu U
5acb99c9e3
Remove obsolete Livewire fuel search components and consolidate pricing tiers
...
linter / quality (push) Has been cancelled
tests / ci (8.3) (push) Has been cancelled
tests / ci (8.4) (push) Has been cancelled
tests / ci (8.5) (push) Has been cancelled
- Delete unused Livewire Search test and fuel type select Blade component
- Move subscription webhook listener from EventServiceProvider to AppServiceProvider
- Add FUEL_TYPES global config to app layout for client-side use
- Add Billable trait to User model and include email_verified_at in fillable
- Implement monthly/annual cadence toggle with pricing display and smart CTA routing on homepage
- Update VerifyApiKeyMiddlewareTest to use e10 instead of petrol
- Refactor PollFuelPrices to auto-refresh stale stations based on last_seen_at
- Add incremental polling with cached timestamp and effective-start-timestamp param to FuelPriceService
- Normalize amenities/fuel_types from API objects to flat arrays, skip stations missing required fields
- Log response body on API failures in ApiLogger
- Default homepage sort to 'reliable' instead of 'price'
2026-04-20 14:12:15 +01:00
Ovidiu U
aec547cd86
refactor: restructure Stripe pricing config to support monthly and annual tiers
...
linter / quality (push) Has been cancelled
tests / ci (8.3) (push) Has been cancelled
tests / ci (8.4) (push) Has been cancelled
tests / ci (8.5) (push) Has been cancelled
- Nest price IDs under `monthly` and `annual` keys for each tier (basic, plus, pro)
2026-04-14 19:26:01 +01:00
Ovidiu U
486f0e689c
refactor: split oil price ingestion and prediction into separate services + commands
...
- BrentPriceFetcher owns ingestion (fetchFromEia / fetchFromFred, each throws on failure)
- BrentPricePredictor owns prediction and marks latest brent_prices row as generated
- oil:fetch command tries EIA, falls back to FRED, fails loudly if both fail
- oil:predict command prompts if latest price already has a prediction; --force bypasses
- add prediction_generated_at column to brent_prices
- delete OilPriceService (replaced by the two focused services)
2026-04-14 16:59:43 +01:00
Ovidiu U
1a0381265e
refactor: extract Brent price sources into dedicated classes
...
OilPriceService no longer inlines per-provider fetch/transform/error logic.
EIA and FRED are now their own classes with a common shape; the service
just iterates and upserts the first successful result.
2026-04-14 16:29:52 +01:00
Ovidiu U
a7ee9f4557
feat: use EIA as primary Brent crude source with FRED fallback
2026-04-14 16:23:06 +01:00
Ovidiu U
4220b1b86a
Add subscription tiers, notification preferences, and logging infrastructure
...
linter / quality (push) Has been cancelled
tests / ci (8.3) (push) Has been cancelled
tests / ci (8.4) (push) Has been cancelled
tests / ci (8.5) (push) Has been cancelled
- Add database migrations for plans, subscriptions, notification preferences, and notification log tables
- Implement DispatchUserNotificationJob to handle channel resolution, daily limits, and logging (sent/tier_restricted/daily_limit)
- Add SendScheduledWhatsAppJob for scheduled notification delivery
- Create PlanFeatures service to resolve tier capabilities, check daily limits, and validate fuel
2026-04-14 16:20:51 +01:00
Ovidiu U
3cd3467178
config: add EIA API key for Brent crude price source
2026-04-14 16:20:07 +01:00
Ovidiu U
d25883ead4
feat: add geolocation support with Near Me button and user location marker on map
...
linter / quality (push) Has been cancelled
tests / ci (8.3) (push) Has been cancelled
tests / ci (8.4) (push) Has been cancelled
tests / ci (8.5) (push) Has been cancelled
- Add "Near Me" button to SearchBar with loading state and geolocation via postcodes.io API
- Display user location on map with pulsing blue marker using geolocation API with IP fallback
- Adjust map zoom level based on search radius for better context
- Pass radiusMiles prop from
2026-04-11 21:27:11 +01:00
Ovidiu U
a969c1b347
feat: add fuel price classification markers and responsive search UI improvements
...
linter / quality (push) Has been cancelled
tests / ci (8.3) (push) Has been cancelled
tests / ci (8.4) (push) Has been cancelled
tests / ci (8.5) (push) Has been cancelled
- Move map pin icon to right side of input with adjusted spacing
- Change button styling from accent to primary color
2026-04-11 20:51:07 +01:00
Ovidiu U
951bb0b98d
feat: add sort select to homepage SearchBar
2026-04-11 18:57:03 +01:00
Ovidiu U
b8adc98669
feat: add brand and reliable sort options to StationList
2026-04-11 18:55:21 +01:00
Ovidiu U
2747047f53
fix: correct default fuelType in useStations from 'petrol' to 'e10'
2026-04-11 18:50:29 +01:00
Ovidiu U
5fe9f9dc6d
fix: empty results state and validation error display on homepage
2026-04-11 18:48:25 +01:00
Ovidiu U
276f9bf612
feat: wire up homepage search with map and station list
2026-04-11 18:46:34 +01:00
Ovidiu U
6f52f3f0d7
feat: add defaultOpen prop to LeafletMap
2026-04-11 18:45:26 +01:00
Ovidiu U
d11d500a35
fix: accessibility and Enter key handling in SearchBar
2026-04-11 18:44:34 +01:00
Ovidiu U
b5ee25db67
feat: add fuel type and radius selects to SearchBar
2026-04-11 17:23:56 +01:00
Ovidiu U
66c662f471
docs: add homepage search implementation plan
2026-04-11 17:23:03 +01:00
Ovidiu U
9f7b45751e
docs: add homepage search design spec
2026-04-11 17:15:23 +01:00
Ovidiu U
03b0bece2c
feat: add auth guards and server-side logout with postcode search integration
...
linter / quality (push) Has been cancelled
tests / ci (8.3) (push) Has been cancelled
tests / ci (8.4) (push) Has been cancelled
tests / ci (8.5) (push) Has been cancelled
- Add navigation guard requiring authentication for dashboard routes
- Create
2026-04-11 17:08:19 +01:00
Ovidiu U
4a3ce4cc1d
docs: add advanced skills for Vitest, Pinia, and Vue built-ins
...
linter / quality (push) Has been cancelled
tests / ci (8.3) (push) Has been cancelled
tests / ci (8.4) (push) Has been cancelled
tests / ci (8.5) (push) Has been cancelled
Add comprehensive reference documentation for:
- Vitest: environments, projects/workspaces, type testing, vi utilities
- Pinia: HMR, Nuxt integration, SSR setup
- Vue: built-in components (Transition, Teleport, Suspense, KeepAlive) and advanced directives
2026-04-11 16:28:36 +01:00
Ovidiu U
069a85cf11
refactor: migrate from hardcoded hex colors to Tailwind CSS color tokens
...
linter / quality (push) Has been cancelled
tests / ci (8.3) (push) Has been cancelled
tests / ci (8.4) (push) Has been cancelled
tests / ci (8.5) (push) Has been cancelled
Replace all hardcoded hex color values with semantic Tailwind design tokens:
- `#bb5b3e` → `accent`
- `#a34a31` → `accent-content` / `primary-dark`
- `#4a3f3b`, `#89726c` → `zinc-800`, `zinc-500`
- `#e5ded7`, `#faf6f3` → `zinc-300`, `zinc-50`
- `#8
2026-04-11 16:26:34 +01:00
Ovidiu U
02b004f381
fix: handle TransientToken in logout for session-based auth
...
When the SPA authenticates via cookies (not Bearer token), Sanctum returns
a TransientToken from currentAccessToken() which has no delete() method.
Detect it and invalidate the session instead.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-11 13:29:03 +01:00
Ovidiu U
977ae8a5a1
chore: remove orphaned settings-heading partial
...
settings-heading.blade.php was a Livewire settings layout partial with no
remaining references after the settings Vue migration.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-11 13:27:47 +01:00
Ovidiu U
25770445bc
fix: correct $route naming and aria-expanded type in DashboardLayout
...
- Rename \$route → route (no \$ prefix in script setup, that's Options API)
- Use string 'true'/'false' for aria-expanded (ARIA spec requires string)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-11 13:26:22 +01:00
Ovidiu U
3895356b0d
fix: replace Alpine dropdown with Vue reactive state in DashboardLayout
...
Alpine.js is not loaded in the Vue SPA bundle, causing the avatar dropdown
to never open and making Settings and Log out inaccessible. Replaced x-data/
x-show/x-transition/@click.away with Vue refs, onMounted/onUnmounted click-
outside listener, and Vue's built-in <Transition> component.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-11 13:21:27 +01:00
Ovidiu U
ea7a5b4f10
chore: remove Livewire settings pages — migrated to Vue SPA
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-11 13:14:34 +01:00
Ovidiu U
83809cd4f3
feat: add Appearance settings view with light/dark/system theme toggle
2026-04-11 13:13:09 +01:00
Ovidiu U
f714169183
feat: add Security settings view with password update and 2FA management
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-11 13:11:58 +01:00
Ovidiu U
00e99044f6
feat: add Profile settings view with name/email form and delete account modal
2026-04-11 13:09:40 +01:00
Ovidiu U
5bf8868124
feat: add settings routes and SettingsLayout sub-nav
2026-04-11 13:08:11 +01:00
Ovidiu U
bd68a179d8
feat: add user avatar dropdown with settings and logout to dashboard nav
2026-04-11 13:07:00 +01:00
Ovidiu U
7976b9facc
feat: add logout, updateProfile, updatePassword, deleteAccount to useAuth
2026-04-11 13:05:04 +01:00
Ovidiu U
e90078d39e
feat: add updateProfile, updatePassword, deleteAccount API endpoints
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-11 13:02:23 +01:00
Ovidiu U
94d695d637
docs: add settings Vue migration implementation plan
2026-04-11 12:54:57 +01:00
Ovidiu U
1d39c69fe4
docs: add settings Vue migration design spec
2026-04-11 12:41:27 +01:00
Ovidiu U
c6e65330b2
fix: make SPA catch-all param optional, add named dashboard route
linter / quality (push) Has been cancelled
tests / ci (8.3) (push) Has been cancelled
tests / ci (8.4) (push) Has been cancelled
tests / ci (8.5) (push) Has been cancelled
2026-04-10 18:17:49 +01:00
Ovidiu U
6224dedd45
fix: restore route('home'), remove dashboard Blade route, load iconify in SPA
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-10 18:14:58 +01:00
Ovidiu U
1bfcb84402
feat: add dashboard Overview, SavedStations, and Preferences views
2026-04-10 18:09:31 +01:00
Ovidiu U
4c3ef5af99
feat: add DashboardLayout with sidebar navigation
2026-04-10 18:08:59 +01:00
Ovidiu U
fe01d2d6d0
feat: add useSavedStations composable
2026-04-10 18:08:38 +01:00
Ovidiu U
580f9c6929
feat: add user preferences and saved stations API endpoints
...
Adds authenticated endpoints for reading/updating fuel type preferences and managing saved stations, backed by new migrations and a SavedStation model.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-10 18:06:31 +01:00
Ovidiu U
0bae0945c0
feat: build full Home.vue with search, station list, map, and prediction
2026-04-10 18:04:10 +01:00
Ovidiu U
d7054402dd
feat: add PredictionCard component with tier gating
2026-04-10 18:02:23 +01:00
Ovidiu U
f9befb463f
feat: add usePrediction composable
2026-04-10 18:02:02 +01:00
Ovidiu U
6785bf952f
feat: add LeafletMap component (foldable), remove legacy station-map.js
2026-04-10 18:01:55 +01:00
Ovidiu U
393c9cc147
feat: add StationList component with sort tabs
2026-04-10 18:01:38 +01:00
Ovidiu U
d25e4e3747
feat: add StationCard component
2026-04-10 18:01:29 +01:00
Ovidiu U
bbbef2d60c
feat: add useStations composable
2026-04-10 18:01:18 +01:00
Ovidiu U
acade5a735
feat: add SearchBar component with debounce
2026-04-10 18:01:10 +01:00