Easy-to-manage touch screens
무료 오픈소스 터치스크린으로 USB 설정 가이드, 드래그‑드롭 편집기, 로컬 제어를 제공하며 Home Assistant용으로 제작되었습니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Windy-style live wind, rain, radar, and satellite over a dark map. Phone first.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Live radar, wind, and forecasts over a satellite map, phone first. One screen: the map is the app.
Two themes
• Liquid (default): close to Apple's own apps. Liquid-glass controls, SF Pro on iPhone/Mac (Inter elsewhere), system colors, and a weather page with a live sky.
• Classic: the original black-and-amber look, sharp corners, IBM Plex.
Switch under Layers → Units, sound & appearance → Theme. The choice is remembered. Both themes share one layout; DESIGN.md defines both.README 전문 보기 ↗Live radar, wind, and forecasts over a satellite map, phone first. One screen: the map is the app.
Live: https://boorussia.github.io/weather-map/
Switch under Layers → Units, sound & appearance → Theme. The choice is remembered. Both themes share one layout; DESIGN.md defines both.
/ on a keyboard to jump to it. Tap the empty field for your tagged places.H:87° L:76°. Tap it for the weather page.#map=zoom/lat/lon); reloads and links open there.VITE_TOMTOM_KEY), and Settings, Snow, mix & ice, Falling rain.Apple Weather's main screen for the selected point: a live sky that matches the current weather and time of day behind glass cards. It's drawn on the GPU: soft clouds lit from the sun's side, the sun moving on its real arc between that day's sunrise and sunset (warm at golden hour), stars and the moon in its actual phase at night, rain at three depths, drifting snow, rolling fog, and lightning that lights the clouds from inside. It shows alerts (tap to expand), the next 2 hours of rain in plain words with 15-minute bars, an hourly strip with sunrise/sunset, 7 days with temperature-colored range bars, and tiles for feels like, UV, wind (compass), humidity, sunrise/sunset, visibility, pressure (gauge), and precipitation. On phones it slides up full screen (swipe down or ✕ to close); at 1100px and wider it stays docked on the right.
Which ideas came from which apps is logged in docs/inspiration.md. PRODUCT.md is the brief; DESIGN.md is the locked visual language; read it before changing any UI.
npm install
npm run dev # http://localhost:5173
npm test # unit tests (vitest)
npm run build # typecheck + production build into dist/
npm run preview # serve dist/ locally
Node 20+ is recommended. npm run dev binds to your LAN address too (server.host), so you can open it on your phone while on the same Wi-Fi to test the real thing.
api.weather.gov asks every client to send a User-Agent that names the app and a contact (website or email), so NWS can reach you if your traffic causes trouble. Set yours before deploying:
cp .env.example .env.local
# then edit .env.local:
# VITE_NWS_USER_AGENT="WeatherMap/1.0 ([email protected])"
How it's sent: every NWS request includes User-Agent: <your value>. NWS allows this header in CORS. Firefox honors it; Chrome and Safari don't let page scripts set User-Agent, so they send the browser's own string instead. NWS accepts that, but if you want your contact string on every request, put a small proxy in front of api.weather.gov (a Netlify/Vercel/Cloudflare function that adds the header) and point NWS_BASE in src/config.ts at it.
| Source | Used for | Terms |
|---|---|---|
| NWS api.weather.gov | Place name (/points), latest observation, forecast, active alerts | U.S. government data, no key. User-Agent required (above). |
| NWS warnings map service | Alert areas and the alerts list (warnings and watches; marine products, including the offshore hurricane boxes, and advisories filtered out); trip weather (every alert the route crosses, advisories included) | U.S. government data, no key. Each alert's full text comes from api.weather.gov. |
NOAA MRMS via NCEP GeoServer (conus_bref_qcd WMS) | Radar now and for the last 2 hours: the quality-controlled reflectivity mosaic, every 2 minutes | Free, no key, CORS open. Tiles come pre-colored with no published table; the ramp (an anchor color every 5 dBZ, 0.5 dBZ steps) was worked out from the server's colors and checked against IEM's dBZ at the same places and time, and is decoded back to dBZ like IEM's. Frame times from WMS GetCapabilities each minute. |
NOAA NESDIS Hydro-Estimator via SSEC RealEarth (NESDIS-GHE-HourlyRainfall) | Rain beyond radar range, under every observed frame | Free, no key, CORS open. Satellite (infrared) rain rate every 15 minutes, ~45 minutes behind, kept 2 days. Tiles are colored in discrete bins (read from RealEarth's legend); each bin's rate is drawn as the reflectivity radar would show for it (Marshall–Palmer). Used only past ~230–300 km from every NEXRAD tower and never over an echo the radar has; tiles fully inside radar coverage aren't requested. |
IEM HRRR precipitation type (hrrr::REFP) |
The on-screen attribution strip (bottom-left) credits Open-Meteo, NWS, CARTO, and OpenStreetMap, each linked. Esri and NOAA GOES credits appear while their imagery is showing.
Each grid point counts as one call. The app requests about 40 points per view in one batched request and refetches only when the view leaves the padded grid, the zoom changes by 2+ levels, or the data is 15 minutes old. Requests are at least 8 seconds apart (45 seconds when only detail would improve), and the last 6 grids are cached for panning back and forth. A normal session uses a few hundred calls.
Lightning comes from the GOES satellites' Geostationary Lightning Mapper (flash extent density, a frame every minute, about a minute behind) through SSEC RealEarth's tiles. The tiles are colored; the app reads the colors back into flash locations and strengths, draws a soft glow where lightning is flashing, and sets the animated bolts (and the crackle) inside those flashes, about one every few seconds per active spot, capped at 1.2 per second for the view. It refreshes every minute and when you pan off the fetched area. If the feed is down, bolts fall back to forecast thunderstorm cells from Open-Meteo, and a note says so. If no lightning is in view when you turn it on, a short note says that too.
It's a static site: build, then host dist/ anywhere.
.github/workflows/pages.yml tests, builds, and deploys on every push to master. It sets BASE_PATH=/<repo>/ because Pages serves the site from a sub-path, and sets the NWS User-Agent contact to the repo URL. To use your email instead, edit VITE_NWS_USER_AGENT in the workflow.netlify.toml is included (build npm run build, publish dist). Add VITE_NWS_USER_AGENT under Site settings → Environment variables.npm run build, output dist). Add VITE_NWS_USER_AGENT in Project → Settings → Environment Variables.VITE_ variables are baked in at build time, so redeploy after changing it.
The site ships a web app manifest, so it can go on the home screen today: Safari → Share → Add to Home Screen (iOS), or Chrome → Install app (Android). It opens full screen, black, with no browser chrome.
src/
config.ts defaults, endpoints, fetch budgets
state.ts tiny store; units + sound persist, layers do not
main.ts wiring: map, data, layers, UI
data/ NWS, Open-Meteo, grid fetching, geolocation, routes + trip hazards (framework-free)
field/grid.ts Open-Meteo lattice + bilinear sampling
layers/ wind / rain / thunder particle layers on canvas
map/ MapLibre setup, smoothed radar (WebGL layer + palette), trip route, basemap grayscale
audio/crackle.ts procedural thunder sound (Web Audio)
ui/ HUD, sheet, panels, trip planner, icons
styles.css tokens from DESIGN.md
tests/ vitest unit tests for the pure logic
The App Store version wraps this same site with Capacitor (ios/, capacitor.config.json). Inside the app the page runs edge to edge like the home-screen app (html.native), and location comes from iOS through @capacitor/geolocation (src/util/position.ts), since the web view's own asks twice. iPhone only, portrait; bundle ID com.boorussia.weathermap. The privacy policy is public/privacy.html, served by Pages and linked from Layers → Settings.
VITE_NWS_USER_AGENT and VITE_TOMTOM_KEY in .env.local; they're baked in at build time.npm run ios builds the site and copies it into the Xcode project; npm run ios:open also opens Xcode.After any change to the site, run npm run ios again before building in Xcode.
Everything under data/, field/, and layers/ is plain TypeScript with no framework, written so the logic can move. Three routes, from least to most work:
data/ and field/ almost line for line, and redraw the particles with Metal or Core Animation. MapKit gives you Apple Maps, including its satellite and hybrid views, free and built in. Best feel and battery life; needed for widgets, Live Activities, and the Apple Watch. The most work.Apple Maps on the website (MapKit JS) is possible but needs a paid Apple Developer account ($99/yr) for a MapKit key, and Apple doesn't allow its tiles inside other map libraries, so MapLibre would have to be swapped out. The free Esri imagery covers the satellite look on the web until the native app.
| Snow, mix, and ice on the radar |
| Free, no key. HRRR reflectivity painted in 22 shades each of rain, snow, freezing rain, and sleet (decoded from the raster's palette); read only for the type. Archived runs back to 2017, forecasts every 15 minutes to 18 h. |
NOAA nowCOAST GOES imagery (goes_visible_imagery, goes_longwave_imagery, global_longwave_imagery_mosaic) | Satellite clouds (beta) | Free, no key, CORS open. GOES East + West, already reprojected to web-map coordinates; both bands fetched per tile (with a 32 px margin) and cut out in the browser; NOAA/NESDIS's global mosaic (GMGSI, hourly, ~3 km) fills everywhere else to 72° N/S. |
| Iowa Environmental Mesonet | Radar older than 2 hours (archived MRMS lowest-level composite reflectivity, mrms::lcref, to 24 h), now if MRMS is down (raw NEXRAD composite), HRRR simulated radar (forecast) | Free, no key; NEXRAD and HRRR are NOAA data. CONUS coverage. Tiles come from four IEM hostnames for parallel loading, a zoom level coarser than the screen (smoothing hides it), so a frame is a few tiles. |
| OSRM on FOSSGIS | Trip weather: driving routes and drive times | Free, no key, fair use (the servers openstreetmap.org uses); OpenStreetMap data. Typical speeds, no live traffic. |
| NOAA SPC and WPC outlooks | Storm outlook layer (categorical days 1–3, excessive rainfall days 1–3). Trip weather: severe-storm outlooks (days 1–3) and excessive-rainfall (flash-flood) outlooks (days 1–3), queried with the route line | U.S. government data, no key. |
| NHC tropical GIS | Hurricanes: official cone, track, forecast points, watches/warnings, past track, wind field, wind-speed odds, arrival times, storm surge, seven-day outlook | U.S. government data, no key. |
| NHC storm graphics and NOAA STAR floaters | Storm panel images: NHC's graphics, GOES satellite of the storm | U.S. government data, no key; shown as images and links. |
| NASA GIBS (GHRSST MUR; GOES-East/West ABI band 13) | Hurricanes: sea surface temperature. Infrared weather map: band 13 tiles, decoded back to °C with NASA's colormap | NASA open data, no key. Infrared is about half an hour behind real time. |
| ECCC MSC GeoMet | Wind for the particles (GDPS 10 m speed and direction → u/v). Weather maps: wind, gusts, temperature, rain, rain total, CAPE, clouds, humidity, dew point, pressure, snow (GDPS 15 km), waves and swell (GDWPS 25 km), sea temperature (GIOPS). One WCS GeoTIFF per frame for the padded view; past hours from the previous runs | Open data, no key, CORS open. Credit: "Data Source: Environment and Climate Change Canada" (shown while a GeoMet map is on). Contact ECCC above ~86,400 requests/day. |
| State DOT traffic cameras: the 511 sites (FL511, 511GA, 511LA, AZ511, UDOT Traffic, NVRoads, 511WI, 511PA, CTroads, New England 511, Idaho 511, Alaska 511) and Caltrans | Traffic cameras: where they are, their snapshots, and live video where it's open | Public DOT data, no key. The lists can't be read from a browser, so .github/workflows/cameras.yml runs scripts/cameras.mjs daily and publishes cameras.json to the repo's cameras branch; snapshots and streams load straight from each DOT. For local dev, node scripts/cameras.mjs public/cameras.dev.json. |
| NHC storm list and ATCF guidance | Hurricanes: active storms and the spaghetti models | U.S. government data, no key. Browsers can't fetch these (no CORS), so .github/workflows/tropical.yml runs scripts/tropical.mjs every 30 minutes and publishes tropical.json to the repo's data branch, which the app reads from raw.githubusercontent.com. If that's unavailable the app still finds storms from the NHC GIS (without models). For local dev, node scripts/tropical.mjs public/tropical.dev.json. |
| SSEC RealEarth (NOAA GOES GLM flash extent density) | Live lightning: where flashes are, minute by minute | Free, no key; credit "SSEC RealEarth, UW-Madison" shown while lightning is on. Read at full detail (zoom 7, ~2 km); each flash is a smear in this product, so a point goes at each density peak (a lone flash's middle, or where flashes stack), not on every lit pixel. Empty tiles come back opaque black and count as none. |
| IEM RIDGE single-site NEXRAD (N0B, N0S) and NEXRAD sites | Single-site radar: each tower's super-res reflectivity and storm-relative velocity scans (listed by json/radar.py), and the tower list | Free, no key. Reflectivity tiles use the composite's palette (same decoder); velocity's 13 colors are decoded to knots-ordered steps. Stamped scans use IEM's long-cache /c/ tiles. |
| IEM NEXRAD storm attributes and local storm reports | Storm tracks (every radar's latest storm cells: motion, strongest echo, top, hail, rotation, tornado signature) and storm reports | Free, no key; NEXRAD Level III and NWS reports. Cells refresh every 2 minutes while shown, reports every 5. |
| Photon by Komoot | Search (cities and addresses) and place names outside NWS coverage | Free, no key, fair use; OpenStreetMap data (© OpenStreetMap contributors). |
| Esri World Imagery | Satellite map style | Credit: Source: Esri, Vantor, Earthstar Geographics, and the GIS User Community. Fine for personal and non-commercial use; check Esri's terms (or get a free ArcGIS Location Platform key) before a commercial launch. |
| Open-Meteo | Precipitation and thunderstorm grid for falling rain and lightning (only while those are on), and the particles' wind if GeoMet is down; hourly, 7-day, next-2-hours, and details for the weather page; temperature fallback; weather maps GeoMet lacks (feels like, low clouds, visibility, currents via the marine API, AQI via the air-quality API) | CC BY 4.0, attribution required. Free tier: non-commercial, 10,000 calls/day. |
| CARTO Dark Matter | Basemap (converted to grayscale at load) | © CARTO © OpenStreetMap contributors. Check CARTO's basemap terms before commercial use. |
| Inter | Liquid theme type on non-Apple devices (Apple devices use their system SF Pro), self-hosted via @fontsource-variable | SIL Open Font License. |
| IBM Plex Sans | Classic theme type, self-hosted via @fontsource | SIL Open Font License. |