22 Commits

Author SHA1 Message Date
93e5660a5c Remove diagnostic probe workflow
Some checks failed
Test, Build & Deploy / test-and-build (push) Successful in 39s
Test, Build & Deploy / deploy (push) Failing after 22s
2026-08-30 14:25:35 +00:00
a7aade37d6 Probe workflow (dispatch diagnostic)
Some checks failed
Test, Build & Deploy / test-and-build (push) Successful in 1m58s
Probe / build (push) Successful in 4s
Test, Build & Deploy / deploy (push) Failing after 20s
2026-08-30 14:18:28 +00:00
d8adbb76cf Trigger CI run to validate wiring
Some checks are pending
Test, Build & Deploy / test-and-build (push) Waiting to run
Test, Build & Deploy / deploy (push) Blocked by required conditions
2026-08-30 14:15:58 +00:00
789f781c56 Add CI workflow: test, build, and auto-deploy /weather on push to master
Some checks are pending
Test, Build & Deploy / test-and-build (push) Waiting to run
Test, Build & Deploy / deploy (push) Blocked by required conditions
Deploys dist/index.html to the WebDAV mirror via basic-auth curl PUT from
WEBDAV_USER/WEBDAV_PASS repo secrets, then verifies the deployed bytes
match the local build. Hard-fails if the secrets are missing so a silent
non-deploy can never look like a success.
2026-08-30 14:14:42 +00:00
cc6b573748 Add swipe-to-switch between tabs on mobile
Touch swipe on the content area moves between tabs (left = next, right =
previous), gated to non-radar views so map pan gestures keep working.
Vertical scroll with |dx|<|dy| is untouched; 60px horizontal threshold.
2026-08-30 14:05:08 +00:00
36d3625d61 Make tabs hash-routable
- New src/lib/router.js: parseHash/ viewToHash for the 5 tab views, with a
  default fallback for empty/unknown hashes.
- App.svelte: initialize viewMode from location.hash, setView() updates both
  state and the URL hash, and a guarded hashchange listener syncs back/forward
  and manual URL edits. All tab onclicks route through setView().
- Tests for parse/viewToHash round-trips and fallback. 76 total pass.
2026-08-27 00:41:05 +00:00
7e06c17bfa Use light-drizzle icon for WMO 61 (light rain) and 80 (light showers)
Both codes now render 🌦️ instead of 🌧️ in the CODE_MAP. Updated the
weather-codes tests accordingly.
2026-08-27 00:35:29 +00:00
ff73e58d31 Add toggleable lightning strike layer to the radar map
- Lightning layer on PrecipitationRadar: toggleable  button (persisted via
  showLightning setting). When on, fetches recent strikes from the planned CORS
  relay and renders them as markers that pan/zoom with the slippy map.
- New src/lib/api/lightning.js: fetchLightningStrikes() reads
  https://cors.thecookiejar.me/lightning?lat&lon&radiusKm&limit (relay NOT
  deployed yet) with an 8s abort timeout and graceful failure - never blocks or
  crashes the map, shows an unavailable banner instead. Exports pure
  projectStrikeToLayer() for Mercator tile-layer marker projection.
- showLightning setting added to DEFAULT_SETTINGS + app store; toggle persists.
- Tests: fetch URL/parsing/error handling + layer projection. 71 total pass.
2026-08-27 00:30:25 +00:00
3635937085 Remove location label badge from radar pin 2026-08-24 15:46:36 +00:00
0e2a15dd28 Show today's daily high/low on the Now tab 2026-08-23 13:19:03 +00:00
57f5dc32d1 Fix radar tile centering: location now aligns with the pin at viewport center 2026-08-20 16:04:25 +00:00
6276f3a5db Pin Current Location marker to radar map so it pans with the map 2026-08-20 12:38:28 +00:00
0b8e012569 Show light drizzle icon on 7-day forecast when rain/storm chance is low 2026-08-18 17:44:42 +00:00
d870a8e668 Add configurable auto-refresh interval (default 30m, option to disable); remove manual refresh button 2026-08-18 17:32:25 +00:00
6c7fbf68eb Show a visible source icon for Open-Meteo fallback values on NWS
Replace the hidden hover-only native title with a dedicated SourceTooltip
component: a small ⓘ badge rendered inline next to Pressure and UV values
(Current + Details views) that reveals a styled tooltip on hover/focus,
so it is obvious the value came from the non-selected source (Open-Meteo)
instead of requiring discovery by hovering the data.
2026-08-16 21:15:10 +00:00
c0ec45f170 Backfill NWS's missing pressure & UV from Open-Meteo (with source tooltip)
NWS doesn't publish pressure (its pressure series is empty) or a UV index.
When the selected source is NWS, merge current.pressure_msl, current.uv_index
and daily.uv_index_max from Open-Meteo and tag them via data._fallback so the
Current + Details views show a tooltip noting the value came from the
non-selected source (Open-Meteo) instead of showing 0 hPa / --.
2026-08-16 21:05:07 +00:00
ebe81b6bfa Weight NWS weather-code mapping by precipitation probability
NWS text like 'Slight Chance Showers And Thunderstorms' (~17-24%) was mapping
straight to WMO 95 / thunderstorm icon, over-stating a mere chance of storms.
shortForecastToWmo now takes the period's precip probability (plus chance-like
wording) and downgrades low-chance storms to light showers (80) and low-chance
rain to light rain (61), keeping real/severe storms at 95. This also stops the
false thunderstorm alert banner for low-chance days. Today/Monday for Rogers
County now render as showers instead of storms.
2026-08-16 20:58:40 +00:00
32f749444e Add NWS (National Weather Service) as a selectable data source preference
- New Settings > Data source toggle (Open-Meteo global / NWS US); NWS
  falls back to Open-Meteo when unavailable or outside its coverage.
- src/lib/api/nws.js: /points -> forecast/hourly/grid normalizer producing
  the app's shared shape, with realistic air highs (NWS reports 104 for the
  day Open-Meteo over-forecasts at 116); heat-index/feels-like falls back to
  air temp since NWS returns apparentTemperature as null here.
- NWS requires a User-Agent contact; email is a build-time Vite env
  (VITE_NWS_EMAIL), read from gitignored .env.local, never committed.
- Details view now shows which provider served the data.
- Fixes the identical UTC date-parse shift for NWS naive local times.
- Tests (8) + recorded live fixtures for Rogers County, OK.
2026-08-16 20:14:07 +00:00
bc7780d494 Fix 7-day forecast day labels shifted by UTC date parsing 2026-08-16 20:00:14 +00:00
adeb1690e8 Add wind/precip 2026-07-24 02:30:32 +00:00
ddce5c15b3 Add radar tab 2026-07-24 02:30:02 +00:00
4ffb44e107 First pass 2026-07-24 01:53:36 +00:00