Commit graph

25 commits

Author SHA1 Message Date
598a60c7f5 Add Ground View screen for server edition, powered by the Windy API https://api.windy.com/ 2026-04-14 12:17:42 -04:00
fc97cda830 Start of themes development 2026-04-08 12:49:21 -04:00
437100c433 cache ArcGIS basemap tiles on disk for faster map loads 2026-04-07 22:11:03 -04:00
1faa580b18 Restore Regional Observations map 2026-04-07 18:08:38 -04:00
81e0fc2bc0 In progress, add global radar support using RainViewer and Leaflet 2026-04-07 15:16:52 -04:00
7098414f67 add international forecast support with Open-Meteo 2026-04-07 14:57:23 -04:00
91cc2bd663 Add LWN News section 2026-04-06 18:50:03 -04:00
57a766380a Adds fastfetch/Server Observations as a screen 2026-04-04 15:12:08 -04:00
Mitchell Scott
ec8fffbb64
fix: correctly use music mount when DIST=1. Fixes #174 2026-02-17 07:34:12 -07:00
Matt Walsh
31315d1ace
add com.chrome.devtools.json 2025-10-16 18:36:41 -05:00
Eddy G
996baa78aa Add MapClick adapter and "fallback" logic when observations are stale
- Create utils/mapclick.mjs with centralized MapClick API functionality
- Refactor modules to use the new utility:
  - Current Weather
  - Latest Observations
  - Regional Forecast
- Add staleness checking utility for use by modules
2025-07-13 22:10:41 -04:00
Eddy G
517cafe40a Refactor data loading: move from inline JSON to client-side fetch
- Remove large JSON data injection from EJS templates
- Add client-side data-loader utility with cache-busting support
- Create server endpoints for JSON data with long-term caching
- Add graceful failure handling if core data fails to load
- Copy JSON data files to dist/data for static hosting
- Update app initialization to load data asynchronously
- Set serverAvailable flag for static builds in gulp task

This reduces HTML payload size and enables better caching strategies
for both server and static deployment modes.
2025-06-26 20:10:15 -04:00
Eddy G
7f7cb96231 Add STATIC environment variable for browser-only deployment mode
Implement STATIC=1 environment variable to enable browser-only deployment
without proxy server infrastructure. Uses WS4KP_SERVER_AVAILABLE flag to
distinguish between server-backed and static deployments for proper URL
rewriting and User-Agent header handling.

- Add STATIC env var to skip proxy route registration at startup
- Inject WS4KP_SERVER_AVAILABLE flag via EJS template based on STATIC mode
- Update fetch.mjs to conditionally send User-Agent headers based on server availability
- Update url-rewrite.mjs to skip proxy rewriting when server is unavailable
- Use renderIndex helper for consistent template data across dev/prod modes
- Improve music playlist logging

Benefits of integrated approach:
- Single environment variable controls both server and client behavior
- Flag injection happens once at render time, not on every request
- No runtime HTML string manipulation overhead
- Clean separation between server-backed and static deployment logic
- Same codebase supports both deployment modes without duplication

Static mode (STATIC=1): Direct API calls to external services, no caching
Server mode (default): Local proxy with caching and API request observability
2025-06-26 20:10:11 -04:00
Eddy G
ca272de8bf Replace separate .js data files with server-side JSON injection
- Remove need to maintain duplicate .js data files alongside JSON sources
- Load JSON data once at server startup and inject into templates
- Dev and production modes use the same data sources

Removes:
- server/scripts/data/{travelcities,regionalcities,stations}.js
- gulp compressJsData task for bundling data files
2025-06-24 22:51:09 -04:00
Eddy G
be41d66de9 Improve kiosk mode startup experience
- Pass query parameters to EJS template for kiosk mode detection
- Add kiosk class to body when enabled via query parameter
- Simplify kiosk mode CSS to hide all elements except main weather display
- Add null checks for progress object to prevent errors in kiosk mode
- Prevent navigation errors when no suitable displays are available
2025-06-24 22:30:16 -04:00
Eddy G
7a07c67e84 Replace CORS proxy with complete server-side cache
- Replace cors/ directory and cors.mjs utility with comprehensive
    HTTP caching proxy in proxy/ directory
- Implement RFC-compliant caching with cache-control headers,
    conditional requests, and in-flight deduplication
- Centralized error handling with "safe" fetch utilities
- Add unified proxy handlers for weather.gov, SPC, radar, and mesonet APIs
- Include cache management endpoint and extensive diagnostic logging
- Migrate client-side URL rewriting from cors.mjs to url-rewrite.mjs
2025-06-24 20:45:43 -04:00
Matt Walsh
1dece10679
cache-busting for radar worker 2025-06-12 12:14:56 -05:00
Matt Walsh
974a061b44
clean up paths for server and server-dist, remove cors #96 2025-06-02 20:59:35 -05:00
Kevin Stone
cf5c818ee3
Gracefully shutdown on both SIGINT + SIGTERM
Most service managers (systemd, docker, etc) use SIGTERM as the shutdown signal by default rather than SIGINT (which is used for interactive CTRL-C).
2025-05-29 17:37:40 -07:00
Matt Walsh
1609ab3d38
radar host overrides 2025-05-23 22:14:48 -05:00
Matt Walsh
8cb8873760
add hooks for geoip lookup 2025-05-21 13:49:49 -05:00
Matt Walsh
e952d860dc
add environment variables for default configuration 2025-05-13 23:04:46 -05:00
Matt Walsh
130a1bfad3 update to express 5 2025-04-02 22:34:59 -05:00
Matt Walsh
0dac24f77d playlist json 2025-03-22 13:52:00 +01:00
Matt Walsh
c2f0b9bf3f convert server to mjs 2025-03-22 13:19:36 +01:00
Renamed from index.js (Browse further)