I was halfway through my morning coffee when the thought arrived fully formed: build a weather station. Not a physical one โ€” a Davis Vantage Pro2 runs $700 and requires mounting hardware and a roof I'd rather not climb. A software one. Four stations, four climates, one dashboard, zero dollars. I had the coffee. I had the API docs open. The project was going to happen whether I finished the cup or not.

Weather Station is a real-time monitoring dashboard tracking four locations across the American West, updating every 15 minutes via GitHub Actions. It looks like something bolted to the wall of a NOAA operations center. It cost exactly nothing.

The Four Stations

StationElevationThe Vibe
Lakewood, WA 300 ft Home base. Pacific Northwest grey. The kind of place where "partly cloudy" is basically sunshine and you own four rain jackets.
Groveland, CA 2,844 ft Where I grew up. Gateway to Yosemite. Pine trees, gold country air, thunderstorms rolling off the Sierra crest on summer afternoons.
Reno, NV 4,505 ft High desert. Big wind, bigger sky. Where a "partly sunny" forecast means the sun is actively trying to fight you.
Death Valley, CA -282 ft The hottest place on Earth. Below sea level. The barometric pressure is higher than sea level because you're in a geological hole. We monitor this one for sport.

The four locations aren't random โ€” they're the geography of a life. Lakewood is home. Groveland is where I'm from. Reno is where I went to college. Death Valley is where the atmosphere runs out of ways to be reasonable. Together they give you a cross-section of the American West from the Pacific coast to the Mojave, from sea level to high desert plateau.

What's on the Dashboard

This isn't your phone's weather app. The instrument panel has real depth โ€” wind compass with a proper SVG dial showing the actual direction the wind is coming from, not just a text label. Barometric pressure with a 3-hour trend arrow โ€” rising, falling fast, steady. This is how storm chasers read the sky before the clouds arrive. NWS alerts rendered as color-coded banners pulled straight from the National Weather Service. Heat advisories in Death Valley, wind advisories in Reno, frost warnings in Groveland. Tabs get a colored dot when a station has something brewing.

The astronomy panel was the unexpected pleasure โ€” moon phase, illumination percentage, age in days, and countdowns to the next full and new moon, all calculated via Julian day math with no API required. A method that has worked since 45 BC and continues to work in a Python script in 2026. Air quality covers US AQI, PM2.5, PM10, and ozone โ€” critical during wildfire season in the West. And 24-hour trend charts: temperature and pressure plotted on canvas-drawn charts with gradient fills. Watch the pressure drop. Feel the front coming in.

"The barometer reading plus a 3-hour trend indicator. Rising? Falling fast? Steady? The arrow tells you what's coming before the clouds do."

The Architecture

Same pattern as everything else in this collection. GitHub Actions runs fetch_weather.py on a 15-minute cron, pulls from Open-Meteo and the NWS API, writes data/weather.json. The frontend reads that JSON on page load. No frameworks. No npm install. No node_modules black hole. Python that writes JSON and HTML that reads it.

# The whole data pipeline in one line of intent Open-Meteo + NWS API โ†’ fetch_weather.py โ†’ data/weather.json โ†’ index.html โ†’ your eyeballs

Open-Meteo is genuinely excellent โ€” free, no API key required, open source, and it covers weather data, forecasts, and air quality in a single ecosystem. The NWS API is taxpayer-funded public infrastructure that works exactly as advertised. The moon phase is pure math. Zero authentication, zero rate limits that matter, zero cost.

The Cost Analysis

ItemPhysical StationThis Project
Hardware$330โ€“$700$0
Monthly fees$0โ€“$10$0
Roof climbing requiredYesNo
Covers 4 locationsNoYes
NWS alertsNoYes
Moon phaseNoYes
Looks like a NOAA ops centerNoYes
Total$385โ€“$765$0.00

The Design

Dark instrument panel aesthetic โ€” Barlow Condensed for the industrial gauge readouts, IBM Plex Sans for body text, JetBrains Mono for the data values. Amber accent on charcoal. Built to look like you're monitoring the atmosphere from a bunker in Oklahoma. The Twister reference in the README is intentional. Bill Paxton's character had a wind compass too. His was analog. Mine updates every 15 minutes automatically via a cron job and has never once required him to drive into an F5.


The whole thing was built before the coffee was finished. That's either a testament to the quality of the tooling or a sign that I should drink slower. Either way โ€” live at bdgroves.github.io/weather-station. Open source at github.com/bdgroves/weather-station. The barometric pressure in Death Valley right now is higher than sea level. The atmosphere is doing something out there. Might as well watch.