26 Commits

Author SHA1 Message Date
5bb35b278f Remove swipe destination peek labels
All checks were successful
Test, Build & Deploy / test-and-build (push) Successful in 39s
Test, Build & Deploy / deploy (push) Successful in 22s
Drop the 'Hourly'/'Daily'/etc. peek chip shown at the edge while swiping.
The live finger-tracking slide remains; only the label affordance is
removed.
2026-08-30 19:26:19 +00:00
f5488eaa98 Live swipe feedback: content tracks finger with destination peek
All checks were successful
Test, Build & Deploy / test-and-build (push) Successful in 41s
Test, Build & Deploy / deploy (push) Successful in 25s
Replace the instant-jump swipe with a live drag on touch: the current tab
content translates with the finger in real time (translateX driven by
touchmove), a peek chip at the edge shows the destination tab, and on
release the sheet animates to the next tab or snaps back. Horizontal vs
vertical travel is decided after 12px so normal page scrolling is
untouched; touch-action:pan-y keeps horizontal gestures JS-owned. Radar
still pans its map instead of switching tabs.
2026-08-30 19:22:35 +00:00
09cea275b7 Fix WebDAV deploy: DELETE-then-PUT to bypass stale-file cache
All checks were successful
Test, Build & Deploy / test-and-build (push) Successful in 38s
Test, Build & Deploy / deploy (push) Successful in 20s
The serving layer caches uploaded files, so a plain PUT over the existing
index.html returned 201 but kept serving the old copy, failing the
verify step. Delete first, then PUT (single-line curls: YAML block
scalars don't process backslash continuations).
2026-08-30 19:03:38 +00:00
38f0c04b3e Bake commit hash into build; log it via console.info on startup
Some checks failed
Test, Build & Deploy / test-and-build (push) Successful in 38s
Test, Build & Deploy / deploy (push) Failing after 20s
Build injects __WEATHER_COMMIT__ (VITE_COMMIT_HASH from CI's github.sha on
branch builds, git rev-parse HEAD locally) and main.js logs
console.info({ commit_hash }) so a deploy can be verified to match the
commit that produced it.
2026-08-30 19:01:13 +00:00
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